diff options
Diffstat (limited to 'gdk-pixbuf')
-rw-r--r-- | gdk-pixbuf/ChangeLog | 6 | ||||
-rw-r--r-- | gdk-pixbuf/io-gif.c | 10 |
2 files changed, 14 insertions, 2 deletions
diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog index 0a5245809..a6f602ed6 100644 --- a/gdk-pixbuf/ChangeLog +++ b/gdk-pixbuf/ChangeLog @@ -1,3 +1,9 @@ +2006-03-14 Matthias Clasen <mclasen@redhat.com> + + * io-gif.c (gdk_pixbuf__gif_image_load): Add a shortcut + to stop the gif mainloop after the first frame, if that + is all we are interested in. (#334538) + 2006-03-03 Matthias Clasen <mclasen@redhat.com> * io-pnm.c: Support pnm files with maxval > 255. diff --git a/gdk-pixbuf/io-gif.c b/gdk-pixbuf/io-gif.c index b403d6fa5..886ef9a59 100644 --- a/gdk-pixbuf/io-gif.c +++ b/gdk-pixbuf/io-gif.c @@ -117,6 +117,7 @@ struct _GifContext unsigned int global_bit_pixel; unsigned int global_color_resolution; unsigned int background_index; + gboolean stop_after_first_frame; gboolean frame_cmap_active; CMap frame_color_map; @@ -1088,6 +1089,9 @@ gif_get_lzw (GifContext *context) */ context->frame = NULL; context->frame_cmap_active = FALSE; + + if (context->stop_after_first_frame) + context->state = GIF_DONE; } return v; @@ -1415,7 +1419,7 @@ new_context (void) memset (context, 0, sizeof (GifContext)); - context->animation = g_object_new (GDK_TYPE_PIXBUF_GIF_ANIM, NULL); + context->animation = g_object_new (GDK_TYPE_PIXBUF_GIF_ANIM, NULL); context->frame = NULL; context->file = NULL; context->state = GIF_START; @@ -1430,6 +1434,7 @@ new_context (void) context->gif89.disposal = -1; context->animation->loop = 1; context->in_loop_extension = FALSE; + context->stop_after_first_frame = FALSE; return context; } @@ -1454,7 +1459,8 @@ gdk_pixbuf__gif_image_load (FILE *file, GError **error) context->file = file; context->error = error; - + context->stop_after_first_frame = TRUE; + if (gif_main_loop (context) == -1 || context->animation->frames == NULL) { if (context->error && *(context->error) == NULL) g_set_error (context->error, |