3 #include <gdk-pixbuf/gdk-pixbuf.h>
4 #include <gdk-pixbuf/gdk-pixbuf-drawable.h>
6 void close_app(GtkWidget *widget, gpointer data)
11 void expose_cb(GtkWidget *drawing_area, GdkEventExpose *evt, gpointer
17 pixbuf = (GdkPixbuf *) gtk_object_get_data(GTK_OBJECT(drawing_area),
20 if(pixbuf->art_pixbuf->has_alpha)
22 gdk_draw_rgb_32_image(drawing_area->window,
23 drawing_area->style->black_gc,
24 evt->area.x, evt->area.y,
28 pixbuf->art_pixbuf->pixels +
29 (evt->area.y * pixbuf->art_pixbuf->rowstride) +
30 (evt->area.x * pixbuf->art_pixbuf->n_channels),
31 pixbuf->art_pixbuf->rowstride);
35 gdk_draw_rgb_image(drawing_area->window,
36 drawing_area->style->white_gc,
37 evt->area.x, evt->area.y,
40 GDK_RGB_DITHER_NORMAL,
41 pixbuf->art_pixbuf->pixels +
42 (evt->area.y * pixbuf->art_pixbuf->rowstride) +
43 (evt->area.x * pixbuf->art_pixbuf->n_channels),
44 pixbuf->art_pixbuf->rowstride);
47 void configure_cb(GtkWidget *drawing_area, GdkEventConfigure *evt,
50 GdkPixbuf *pixbuf, spb;
52 pixbuf = (GdkPixbuf *) gtk_object_get_data(GTK_OBJECT(drawing_area),
55 g_print("X:%d Y:%d\n", evt->width, evt->height);
57 if(((evt->width) != (pixbuf->art_pixbuf->width)) ||
58 ((evt->height) != (pixbuf->art_pixbuf->height)))
59 gdk_pixbuf_scale(pixbuf, evt->width, evt->height);
63 int main(int argc, char **argv)
68 GtkWidget *drawing_area;
73 gtk_init(&argc, &argv);
74 gdk_rgb_set_verbose(TRUE);
77 gtk_widget_set_default_colormap(gdk_rgb_get_cmap());
78 gtk_widget_set_default_visual(gdk_rgb_get_visual());
80 root = gdk_window_foreign_new(GDK_ROOT_WINDOW());
81 pixbuf = gdk_pixbuf_rgb_from_drawable(root, 0, 0, 150, 160);
83 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
84 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
85 GTK_SIGNAL_FUNC(close_app), NULL);
86 gtk_signal_connect(GTK_OBJECT(window), "destroy",
88 GTK_SIGNAL_FUNC(close_app), NULL);
90 vbox = gtk_vbox_new(FALSE, 0);
91 gtk_container_add(GTK_CONTAINER(window), vbox);
93 drawing_area = gtk_drawing_area_new();
94 gtk_drawing_area_size(GTK_DRAWING_AREA(drawing_area),
95 pixbuf->art_pixbuf->width,
96 pixbuf->art_pixbuf->height);
97 gtk_signal_connect(GTK_OBJECT(drawing_area), "expose_event",
98 GTK_SIGNAL_FUNC(expose_cb), NULL);
100 gtk_signal_connect(GTK_OBJECT(drawing_area), "configure_event",
101 GTK_SIGNAL_FUNC(configure_cb), NULL);
102 gtk_object_set_data(GTK_OBJECT(drawing_area), "pixbuf", pixbuf);
103 gtk_box_pack_start(GTK_BOX(vbox), drawing_area, TRUE, TRUE, 0);
105 gtk_widget_show_all(window);