Hallo,
ich versuche mit selbst erstellten Programmen einen Text oder ein Bild ohne Fenster direkt auf den Bildschirm auszugeben. Ähnlich einem OnScreen Display. Leider klappt da nichts.
Beide Programme laufen auch insofern korrekt ab, dass die jeweiligen Schleifen auch durchlaufen werden, es kommt nur keine Ausgabe. Ich vermute, dass die Ausgabe zwar auf dem Bildschirm erscheint, jedoch irgendwo im Hintergrund und für mich somit nicht sichtbar.
Was mache ich da falsch?
Vielen Dank im Voraus.
Gruß
Markus
// gcc -Wall prog.c -o prog `pkg-config --cflags --libs gtk+-2.0` #include <stdio.h> #include <gtk/gtk.h> #include <gdk/gdk.h> #include <gdk-pixbuf/gdk-pixbuf.h> gint main(gint argc, gchar *argv[]) { GdkWindow *root; GdkPixbuf *pixbuf; GdkPixmap *pixmap; GdkPixmap *mask; gdk_init(&argc, &argv); root = gdk_get_default_root_window(); pixbuf = gdk_pixbuf_new_from_file(argv[1], NULL); if(!pixbuf) { printf("error\n"); return 1; } gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap, &mask, 0); gdk_window_set_back_pixmap(root, pixmap, FALSE); gdk_window_show(root); gdk_window_clear(root); gtk_main(); return 0; }
Das XLib-Programm:
// gcc -o main main.c -L/usr/X11R6/lib -lX11 #include <stdlib.h> #include <stdio.h> #include <X11/Xlib.h> int main(void) { Display *display; Window root; GC g; XGCValues gcvalue; display = XOpenDisplay (getenv ("DISPLAY")); root = DefaultRootWindow (display); gcvalue.function = GXcopy; gcvalue.plane_mask = AllPlanes; gcvalue.background = WhitePixel(display,DefaultScreen(display)); gcvalue.foreground = BlackPixel(display,DefaultScreen(display)); gcvalue.line_width = 10; gcvalue.line_style = LineSolid; gcvalue.fill_style = FillSolid; g = XCreateGC (display, root, GCFunction|GCPlaneMask|GCForeground|GCBackground|GCLineWidth|GCFillStyle|GCLineStyle, &gcvalue); XSetForeground(display, g, WhitePixelOfScreen(DefaultScreenOfDisplay(display)) ); while (1) { XFillRectangle (display, root, g, random()%500, random()%500, 50, 40); XFlush(display); usleep (10); } XCloseDisplay (display); }