ubuntuusers.de

GDK oder XLib Ausgabe funktioniert nicht

Status: Ungelöst | Ubuntu-Version: Kubuntu 7.10 (Gutsy Gibbon)
Antworten |

MS47

Anmeldungsdatum:
30. Juli 2007

Beiträge: 202

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);
}

MS47

(Themenstarter)

Anmeldungsdatum:
30. Juli 2007

Beiträge: 202

Wie ich es mir gedacht habe. Wenn ich KDE beende und als Session-Typ statt KDE Failsafe angebe, wird zumindest schon mal das Bild angezeigt. Beim XLib Programm tut sich zwar auch was, allerdings sehe ich durch das Konsolenfenster nichts. Mir hilft das nur im Moment selber noch nicht viel weiter ☹

Antworten |