]> Pileus Git - ~andy/gtk/commitdiff
If neither load nor begin_load are available fall back to load_animation
authorMatthias Clasen <maclas@gmx.de>
Sun, 9 Nov 2003 22:08:33 +0000 (22:08 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sun, 9 Nov 2003 22:08:33 +0000 (22:08 +0000)
Sun Nov  9 23:07:05 2003  Matthias Clasen  <maclas@gmx.de>

* gdk-pixbuf-io.c (_gdk_pixbuf_generic_image_load): If neither
load nor begin_load are available fall back to load_animation
and use gdk_pixbuf_animation_get_static_image() to obtain a
pixbuf. Inefficient, but at least doesn't crash.

gdk-pixbuf/ChangeLog
gdk-pixbuf/gdk-pixbuf-io.c

index f5747e2eaaff065bb13087f494c1ae2c8c5ba703..929904a098e1baaec70579d5f2caf942f9bd8030 100644 (file)
@@ -1,3 +1,10 @@
+Sun Nov  9 23:07:05 2003  Matthias Clasen  <maclas@gmx.de>
+
+       * gdk-pixbuf-io.c (_gdk_pixbuf_generic_image_load): If neither
+       load nor begin_load are available fall back to load_animation 
+       and use gdk_pixbuf_animation_get_static_image() to obtain a 
+       pixbuf. Inefficient, but at least doesn't crash.
+
 Sun Nov  9 21:56:20 2003  Matthias Clasen  <maclas@gmx.de>
 
        * queryloaders.c (write_loader_info): New function to write 
index f77c2bebcb48a6bf061ac86a0c5b66726daafdcb..dc96b44d28217c2dd13aa6f547d2ccdaefcb9fd9 100644 (file)
@@ -647,34 +647,53 @@ _gdk_pixbuf_generic_image_load (GdkPixbufModule *module,
        guchar buffer[4096];
        size_t length;
        GdkPixbuf *pixbuf = NULL;
+       GdkPixbufAnimation *animation = NULL;
        gpointer context;
 
        if (module->load != NULL)
                return (* module->load) (f, error);
        
-       context = module->begin_load (NULL, prepared_notify, NULL, &pixbuf, error);
-       
-       if (!context)
-               return NULL;
+       if (module->begin_load != NULL) {
+               
+               context = module->begin_load (NULL, prepared_notify, NULL, &pixbuf, error);
        
-       while (!feof (f)) {
-               length = fread (buffer, 1, sizeof (buffer), f);
-               if (length > 0)
-                       if (!module->load_increment (context, buffer, length, error)) {
-                               module->stop_load (context, NULL);
-                               if (pixbuf != NULL)
-                                       g_object_unref (pixbuf);
-                               return NULL;
-                       }
+               if (!context)
+                       return NULL;
+               
+               while (!feof (f)) {
+                       length = fread (buffer, 1, sizeof (buffer), f);
+                       if (length > 0)
+                               if (!module->load_increment (context, buffer, length, error)) {
+                                       module->stop_load (context, NULL);
+                                       if (pixbuf != NULL)
+                                               g_object_unref (pixbuf);
+                                       return NULL;
+                               }
+               }
+               
+               if (!module->stop_load (context, error)) {
+                       if (pixbuf != NULL)
+                               g_object_unref (pixbuf);
+                       return NULL;
+               }
+               
+               return pixbuf;
        }
+       
+       if (module->load_animation != NULL) {
+               animation = (* module->load_animation) (f, error);
+               if (animation != NULL) {
+                       pixbuf = gdk_pixbuf_animation_get_static_image (animation);
 
-       if (!module->stop_load (context, error)) {
-               if (pixbuf != NULL)
-                       g_object_unref (pixbuf);
-               return NULL;
+                       g_object_ref (pixbuf);
+
+                       g_object_unref (animation);
+                       
+                       return pixbuf;
+               }
        }
-       
-       return pixbuf;
+
+       return NULL;
 }
 
 /**