7 #ifdef GDK_WINDOWING_X11
8 #include <gdk/x11/gdkx.h>
9 #elif defined (GDK_WINDOWING_WIN32)
10 #include <gdk/win32/gdkwin32.h>
15 keypress_check (GtkWidget *widget, GdkEventKey *evt, gpointer data)
18 GtkDrawingArea *da = (GtkDrawingArea*)data;
21 pixbuf = (GdkPixbuf *) gtk_object_get_data (GTK_OBJECT (da), "pixbuf");
23 if (evt->keyval == 'q')
25 if (evt->keyval == 's') {
27 fprintf (stderr, "PIXBUF NULL\n");
31 if (!gdk_pixbuf_save (pixbuf, "foo.jpg", "jpeg",
35 fprintf (stderr, "%s", err->message);
39 } else if (evt->keyval == 'p') {
41 fprintf (stderr, "PIXBUF NULL\n");
45 if (!gdk_pixbuf_save (pixbuf, "foo.png", "png", &err, NULL)) {
46 fprintf (stderr, "%s", err->message);
54 close_app (GtkWidget *widget, gpointer data)
61 expose_cb (GtkWidget *drawing_area, GdkEventExpose *evt, gpointer data)
65 pixbuf = (GdkPixbuf *) gtk_object_get_data (GTK_OBJECT (drawing_area),
67 if (gdk_pixbuf_get_has_alpha (pixbuf)) {
68 gdk_draw_rgb_32_image (drawing_area->window,
69 drawing_area->style->black_gc,
70 evt->area.x, evt->area.y,
74 gdk_pixbuf_get_pixels (pixbuf) +
75 (evt->area.y * gdk_pixbuf_get_rowstride (pixbuf)) +
76 (evt->area.x * gdk_pixbuf_get_n_channels (pixbuf)),
77 gdk_pixbuf_get_rowstride (pixbuf));
79 gdk_draw_rgb_image (drawing_area->window,
80 drawing_area->style->black_gc,
81 evt->area.x, evt->area.y,
84 GDK_RGB_DITHER_NORMAL,
85 gdk_pixbuf_get_pixels (pixbuf) +
86 (evt->area.y * gdk_pixbuf_get_rowstride (pixbuf)) +
87 (evt->area.x * gdk_pixbuf_get_n_channels (pixbuf)),
88 gdk_pixbuf_get_rowstride (pixbuf));
94 configure_cb (GtkWidget *drawing_area, GdkEventConfigure *evt, gpointer data)
98 pixbuf = (GdkPixbuf *) gtk_object_get_data (GTK_OBJECT (drawing_area),
101 g_print ("X:%d Y:%d\n", evt->width, evt->height);
102 if (evt->width != gdk_pixbuf_get_width (pixbuf) || evt->height != gdk_pixbuf_get_height (pixbuf)) {
104 GdkPixbuf *new_pixbuf;
106 root = GDK_ROOT_PARENT ();
107 new_pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,
108 0, 0, 0, 0, evt->width, evt->height);
109 gtk_object_set_data (GTK_OBJECT (drawing_area), "pixbuf", new_pixbuf);
110 gdk_pixbuf_unref (pixbuf);
117 main (int argc, char **argv)
122 GtkWidget *drawing_area;
125 gtk_init (&argc, &argv);
127 gtk_widget_set_default_colormap (gdk_rgb_get_cmap ());
129 root = GDK_ROOT_PARENT ();
130 pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,
131 0, 0, 0, 0, 150, 160);
133 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
134 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
135 GTK_SIGNAL_FUNC (close_app), NULL);
136 gtk_signal_connect (GTK_OBJECT (window), "destroy",
137 GTK_SIGNAL_FUNC (close_app), NULL);
139 vbox = gtk_vbox_new (FALSE, 0);
140 gtk_container_add (GTK_CONTAINER (window), vbox);
142 drawing_area = gtk_drawing_area_new ();
143 gtk_widget_set_usize (GTK_WIDGET (drawing_area),
144 gdk_pixbuf_get_width (pixbuf),
145 gdk_pixbuf_get_height (pixbuf));
146 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
147 GTK_SIGNAL_FUNC (expose_cb), NULL);
149 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
150 GTK_SIGNAL_FUNC (configure_cb), NULL);
151 gtk_signal_connect (GTK_OBJECT (window), "key_press_event",
152 GTK_SIGNAL_FUNC (keypress_check), drawing_area);
153 gtk_object_set_data (GTK_OBJECT (drawing_area), "pixbuf", pixbuf);
154 gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);
156 gtk_widget_show_all (window);