From 9d5b02fb734869319a0689dee6cafe5316fba4c7 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 14 Mar 2006 21:35:25 +0000 Subject: [PATCH] Add a shortcut to stop the gif mainloop after the first frame, if that is 2006-03-14 Matthias Clasen * 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) --- gdk-pixbuf/ChangeLog | 6 ++++++ gdk-pixbuf/io-gif.c | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog index f6e89c1450..87a5cf4420 100644 --- a/gdk-pixbuf/ChangeLog +++ b/gdk-pixbuf/ChangeLog @@ -1,3 +1,9 @@ +2006-03-14 Matthias Clasen + + * 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-13 Matthias Clasen * ==== Released 2.8.15 === diff --git a/gdk-pixbuf/io-gif.c b/gdk-pixbuf/io-gif.c index 4aa099a82d..99e5d19c21 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,