diff options
author | Mark Crichton <crichton@src.gnome.org> | 1999-07-16 20:35:21 +0000 |
---|---|---|
committer | Mark Crichton <crichton@src.gnome.org> | 1999-07-16 20:35:21 +0000 |
commit | 96ba724fc5977275139e101e28c77e7558ad1cf1 (patch) | |
tree | 398551a787d0fb7bfdc3bab90a461efa810f3338 /demos | |
parent | 1922a3ed01296c6a08a6a5af836a156f73b5c236 (diff) | |
download | gtk+-96ba724fc5977275139e101e28c77e7558ad1cf1.tar.gz |
Added scaling of pixmaps. Currently doesn't work, however, since I'm
Added scaling of pixmaps. Currently doesn't work, however, since I'm guessing
how art_rgb_affine really works.
Mark
Diffstat (limited to 'demos')
-rw-r--r-- | demos/testpixbuf.c | 87 |
1 files changed, 51 insertions, 36 deletions
diff --git a/demos/testpixbuf.c b/demos/testpixbuf.c index 27a0975774..5f70302f9f 100644 --- a/demos/testpixbuf.c +++ b/demos/testpixbuf.c @@ -1,3 +1,4 @@ + /* GTK - The GIMP Toolkit * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * @@ -44,34 +45,47 @@ quit_func (GtkWidget *widget, gpointer dummy) expose_func (GtkWidget *drawing_area, GdkEventExpose *event, gpointer data) { - GdkPixBuf *pixbuf = (GdkPixBuf *)data; - gint x1, y1, x2, y2; - - if (pixbuf->art_pixbuf->has_alpha){ - gdk_draw_rgb_32_image (drawing_area->window, - drawing_area->style->black_gc, - event->area.x, event->area.y, - event->area.width, - event->area.height, - GDK_RGB_DITHER_MAX, - pixbuf->art_pixbuf->pixels - + (event->area.y * pixbuf->art_pixbuf->rowstride) - + (event->area.x * pixbuf->art_pixbuf->n_channels), - pixbuf->art_pixbuf->rowstride); - }else{ - gdk_draw_rgb_image (drawing_area->window, - drawing_area->style->white_gc, - event->area.x, event->area.y, - event->area.width, - event->area.height, - GDK_RGB_DITHER_NORMAL, - pixbuf->art_pixbuf->pixels - + (event->area.y * pixbuf->art_pixbuf->rowstride) - + (event->area.x * pixbuf->art_pixbuf->n_channels), - pixbuf->art_pixbuf->rowstride); - } + GdkPixBuf *pixbuf; + + pixbuf = (GdkPixBuf *)gtk_object_get_data(GTK_OBJECT(drawing_area), "pixbuf"); + + if (pixbuf->art_pixbuf->has_alpha){ + gdk_draw_rgb_32_image (drawing_area->window, + drawing_area->style->black_gc, + 0, 0, + pixbuf->art_pixbuf->width, + pixbuf->art_pixbuf->height, + GDK_RGB_DITHER_NORMAL, + pixbuf->art_pixbuf->pixels, + pixbuf->art_pixbuf->rowstride); + } else { + gdk_draw_rgb_image (drawing_area->window, + drawing_area->style->white_gc, + 0, 0, + pixbuf->art_pixbuf->width, + pixbuf->art_pixbuf->height, + GDK_RGB_DITHER_NORMAL, + pixbuf->art_pixbuf->pixels, + pixbuf->art_pixbuf->rowstride); + } } +config_func (GtkWidget *drawing_area, GdkEventConfigure *event, gpointer data) +{ + GdkPixBuf *pixbuf, *spb; + + pixbuf = (GdkPixBuf *)gtk_object_get_data(GTK_OBJECT(drawing_area), "pixbuf"); + + g_print("X:%d Y:%d\n", event->width, event->height); + + if (((event->width) != (pixbuf->art_pixbuf->width)) || + ((event->height) != (pixbuf->art_pixbuf->height))) { + spb = gdk_pixbuf_scale(pixbuf, event->width, event->height); + gdk_pixbuf_free (pixbuf); + gtk_object_set_data (GTK_OBJECT(drawing_area), "pixbuf", spb); + } +} + void new_testrgb_window (GdkPixBuf *pixbuf) { @@ -88,7 +102,7 @@ new_testrgb_window (GdkPixBuf *pixbuf) "GtkObject::user_data", NULL, "GtkWindow::type", GTK_WINDOW_TOPLEVEL, "GtkWindow::title", "testrgb", - "GtkWindow::allow_shrink", FALSE, + "GtkWindow::allow_shrink", TRUE, NULL); gtk_signal_connect (GTK_OBJECT (window), "destroy", (GtkSignalFunc) quit_func, NULL); @@ -97,11 +111,15 @@ new_testrgb_window (GdkPixBuf *pixbuf) drawing_area = gtk_drawing_area_new (); - gtk_widget_set_usize (drawing_area, w, h); - gtk_box_pack_start (GTK_BOX (vbox), drawing_area, FALSE, FALSE, 0); + gtk_drawing_area_size (GTK_DRAWING_AREA(drawing_area), w, h); + gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT(drawing_area), "expose_event", - GTK_SIGNAL_FUNC (expose_func), pixbuf); + GTK_SIGNAL_FUNC(expose_func), NULL); + gtk_signal_connect (GTK_OBJECT(drawing_area), "configure_event", + GTK_SIGNAL_FUNC (config_func), NULL); + + gtk_object_set_data (GTK_OBJECT(drawing_area), "pixbuf", pixbuf); gtk_widget_show (drawing_area); @@ -137,14 +155,11 @@ main (int argc, char **argv) gtk_widget_set_default_visual (gdk_rgb_get_visual ()); i = 1; - for (i = 1; i < argc; i++) - { - if (argv[i]) - { + for (i = 1; i < argc; i++) { + if (argv[i]) { pixbuf = gdk_pixbuf_load_image (argv[i]); - if (pixbuf) - { + if (pixbuf) { new_testrgb_window (pixbuf); found_valid = TRUE; } |