]> Pileus Git - ~andy/gtk/blobdiff - demos/testpixbuf.c
contrib subdir
[~andy/gtk] / demos / testpixbuf.c
index fe96bd390135d16ff47704b34dee2d339a5712b1..f118205e2153c802f4c402839ace0532ce33004a 100644 (file)
@@ -25,6 +25,8 @@
 #include <gtk/gtk.h>
 #include <gtk/gdk-pixbuf-loader.h>
 
+#include "test-inline-pixbufs.h"
+
 typedef struct {
        FILE             *imagefile;
        GdkPixbufLoader  *loader;
@@ -368,14 +370,15 @@ new_testrgb_window (GdkPixbuf *pixbuf, gchar *title)
        GtkWidget *button;
        GtkWidget *drawing_area;
        gint w, h;
+
+        g_return_val_if_fail (pixbuf != NULL, NULL);
        w = gdk_pixbuf_get_width (pixbuf);
        h = gdk_pixbuf_get_height (pixbuf);
 
        window = gtk_widget_new (gtk_window_get_type (),
                                 "GtkObject::user_data", NULL,
                                 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
-                                "GtkWindow::title", "testrgb",
+                                "GtkWindow::title", title ? title : "testrgb",
                                 "GtkWindow::allow_shrink", TRUE,
                                 NULL);
        gtk_signal_connect (GTK_OBJECT (window), "destroy",
@@ -425,18 +428,34 @@ static gint
 update_timeout(gpointer data)
 {
         ProgressFileStatus *status = data;
-       gboolean done;
-
-       done = TRUE;
+       gboolean done, error;
+        
+       done = FALSE;
+        error = FALSE;
        if (!feof(status->imagefile)) {
                gint nbytes;
 
                nbytes = fread(status->buf, 1, status->readlen, 
                               status->imagefile);
 
-               done = !gdk_pixbuf_loader_write (GDK_PIXBUF_LOADER (status->loader), status->buf, nbytes);
-                       
-       }
+
+                error = !gdk_pixbuf_loader_write (GDK_PIXBUF_LOADER (status->loader), status->buf, nbytes);
+                if (error) {
+                        G_BREAKPOINT();
+                }
+
+        } else { /* Really done */ 
+
+                GdkPixbuf *pixbuf = gdk_pixbuf_loader_get_pixbuf (status->loader); 
+                new_testrgb_window (pixbuf, "After progressive load"); 
+                done = TRUE; 
+
+        }
+
+        if (error) { 
+                g_warning ("Serious error writing to loader"); 
+                done = TRUE; 
+        } 
 
        if (done) {
                 gtk_widget_queue_draw(*status->rgbwin);
@@ -535,6 +554,13 @@ main (int argc, char **argv)
                         new_testrgb_window (pixbuf, NULL);
                         ++xpmp;
                 }
+
+                /* Test loading from inline data. */
+                pixbuf = gdk_pixbuf_new_from_inline (apple_red, FALSE, -1);
+                new_testrgb_window (pixbuf, "Red apple from inline data");
+
+                pixbuf = gdk_pixbuf_new_from_inline (gnome_foot, TRUE, sizeof (gnome_foot));
+                new_testrgb_window (pixbuf, "Foot from inline data");
                 
                found_valid = TRUE;
        } else {