7 #ifdef GDK_WINDOWING_X11
8 #include <gdk/x11/gdkx.h>
9 #elif defined (GDK_WINDOWING_WIN32)
10 #include <gdk/win32/gdkwin32.h>
11 #elif defined (GDK_WINDOWING_FB)
12 #include <gdk/linux-fb/gdkfb.h>
17 keypress_check (GtkWidget *widget, GdkEventKey *evt, gpointer data)
20 GtkDrawingArea *da = (GtkDrawingArea*)data;
23 pixbuf = (GdkPixbuf *) gtk_object_get_data (GTK_OBJECT (da), "pixbuf");
25 if (evt->keyval == 'q')
27 if (evt->keyval == 's') {
29 fprintf (stderr, "PIXBUF NULL\n");
33 if (!gdk_pixbuf_save (pixbuf, "foo.jpg", "jpeg",
37 fprintf (stderr, "%s", err->message);
41 } else if (evt->keyval == 'p') {
43 fprintf (stderr, "PIXBUF NULL\n");
47 if (!gdk_pixbuf_save (pixbuf, "foo.png", "png", &err, NULL)) {
48 fprintf (stderr, "%s", err->message);
56 close_app (GtkWidget *widget, gpointer data)
63 expose_cb (GtkWidget *drawing_area, GdkEventExpose *evt, gpointer data)
67 pixbuf = (GdkPixbuf *) gtk_object_get_data (GTK_OBJECT (drawing_area),
69 if (gdk_pixbuf_get_has_alpha (pixbuf)) {
70 gdk_draw_rgb_32_image (drawing_area->window,
71 drawing_area->style->black_gc,
72 evt->area.x, evt->area.y,
76 gdk_pixbuf_get_pixels (pixbuf) +
77 (evt->area.y * gdk_pixbuf_get_rowstride (pixbuf)) +
78 (evt->area.x * gdk_pixbuf_get_n_channels (pixbuf)),
79 gdk_pixbuf_get_rowstride (pixbuf));
81 gdk_draw_rgb_image (drawing_area->window,
82 drawing_area->style->black_gc,
83 evt->area.x, evt->area.y,
86 GDK_RGB_DITHER_NORMAL,
87 gdk_pixbuf_get_pixels (pixbuf) +
88 (evt->area.y * gdk_pixbuf_get_rowstride (pixbuf)) +
89 (evt->area.x * gdk_pixbuf_get_n_channels (pixbuf)),
90 gdk_pixbuf_get_rowstride (pixbuf));
96 configure_cb (GtkWidget *drawing_area, GdkEventConfigure *evt, gpointer data)
100 pixbuf = (GdkPixbuf *) gtk_object_get_data (GTK_OBJECT (drawing_area),
103 g_print ("X:%d Y:%d\n", evt->width, evt->height);
104 if (evt->width != gdk_pixbuf_get_width (pixbuf) || evt->height != gdk_pixbuf_get_height (pixbuf)) {
106 GdkPixbuf *new_pixbuf;
108 root = GDK_ROOT_PARENT ();
109 new_pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,
110 0, 0, 0, 0, evt->width, evt->height);
111 gtk_object_set_data (GTK_OBJECT (drawing_area), "pixbuf", new_pixbuf);
112 gdk_pixbuf_unref (pixbuf);
119 main (int argc, char **argv)
124 GtkWidget *drawing_area;
127 gtk_init (&argc, &argv);
129 gtk_widget_set_default_colormap (gdk_rgb_get_colormap ());
131 root = GDK_ROOT_PARENT ();
132 pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,
133 0, 0, 0, 0, 150, 160);
135 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
136 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
137 GTK_SIGNAL_FUNC (close_app), NULL);
138 gtk_signal_connect (GTK_OBJECT (window), "destroy",
139 GTK_SIGNAL_FUNC (close_app), NULL);
141 vbox = gtk_vbox_new (FALSE, 0);
142 gtk_container_add (GTK_CONTAINER (window), vbox);
144 drawing_area = gtk_drawing_area_new ();
145 gtk_widget_set_size_request (GTK_WIDGET (drawing_area),
146 gdk_pixbuf_get_width (pixbuf),
147 gdk_pixbuf_get_height (pixbuf));
148 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
149 GTK_SIGNAL_FUNC (expose_cb), NULL);
151 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
152 GTK_SIGNAL_FUNC (configure_cb), NULL);
153 gtk_signal_connect (GTK_OBJECT (window), "key_press_event",
154 GTK_SIGNAL_FUNC (keypress_check), drawing_area);
155 gtk_object_set_data (GTK_OBJECT (drawing_area), "pixbuf", pixbuf);
156 gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);
158 gtk_widget_show_all (window);