Code:
Auschnitt aus main.c:
.
.
.
GdkWindow *root_win = (GdkWindow *)GDK_ROOT_PARENT();
GdkGC *gc = gdk_gc_new(root_win);
if((root_win != NULL) && (gc != NULL))
iv_put_image_to_root_centered(
root_win, gc,
(const guint8 *)data_rgba,
width, height, bpl, bpp,
IMGVIEW_FORMAT_RGBA
);
.
.
.
Auschnitt aus rootwin.c:
void iv_put_image_to_root_centered(
GdkWindow *root_window, GdkGC *gc,
const guint8 *data,
gint width, gint height, gint bpl, gint bpp,
gint format
)
{
gint rx, ry, rwidth, rheight, rdepth;
GdkPixmap *pixmap;
if((root_window == NULL) || (data == NULL) || (gc == NULL) ||
(width < 1) || (height < 1) || (bpl <= 0) || (bpp <= 0)
)
return;
/* Get size of root window. */
gdk_window_get_geometry(
root_window, &rx, &ry, &rwidth, &rheight, &rdepth
);
/* Root window size valid? */
if((rwidth < 1) || (rheight < 1))
return;
/* Create tempory GdkPixmap. */
pixmap = gdk_pixmap_new(root_window, rwidth, rheight, rdepth);
if(pixmap != NULL)
{
/* Put given data to the GdkPixmap. */
switch(bpp)
{
case 4:
gdk_draw_rgb_32_image(
(GdkDrawable *)pixmap, gc,
(rwidth / 2) - (width / 2),
(rheight / 2) - (height / 2),
width, height,
GDK_RGB_DITHER_NORMAL,
(guchar *)data,
bpl
);
break;
case 3:
gdk_draw_rgb_image(
(GdkDrawable *)pixmap, gc,
(rwidth / 2) - (width / 2),
(rheight / 2) - (height / 2),
width, height,
GDK_RGB_DITHER_NORMAL,
(guchar *)data,
bpl
);
break;
}
/* Set this pixmap to the root window. */
gdk_window_set_back_pixmap(
root_window, pixmap, FALSE
);
/* Redraw the root window. */
gdk_window_clear(root_window);
/* Unref the tempory GdkPixmap, the root window should keep
* one refcount that it will manage.
*/
gdk_pixmap_unref(pixmap);
pixmap = NULL;
}
}
c ya,
Lesezeichen