[gdk-pixbuf/gdk-pixbuf-2-24] Convert animation implementation to G_DEFINE_TYPE



commit d11ca485bf2799f02bdd5516280eeb6db29187b3
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Dec 16 13:47:36 2011 -0500

    Convert animation implementation to G_DEFINE_TYPE
    
    This has the nice side-effect of giving us thread-safe get_type
    functions, which might fix a few thumbnailing-related gnome-shell
    segfaults that have been accumulating in bugzilla. See e.g.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=756343

 gdk-pixbuf/io-ani-animation.c  |  100 +++++++------------------
 gdk-pixbuf/io-gdip-animation.c |  122 ++++++++----------------------
 gdk-pixbuf/io-gif-animation.c  |  160 ++++++++++++++--------------------------
 3 files changed, 114 insertions(+), 268 deletions(-)
---
diff --git a/gdk-pixbuf/io-ani-animation.c b/gdk-pixbuf/io-ani-animation.c
index c352fd5..c6b28cc 100644
--- a/gdk-pixbuf/io-ani-animation.c
+++ b/gdk-pixbuf/io-ani-animation.c
@@ -26,7 +26,6 @@
 #include "gdk-pixbuf-private.h"
 #include "io-ani-animation.h"
 
-static void gdk_pixbuf_ani_anim_class_init (GdkPixbufAniAnimClass *klass);
 static void gdk_pixbuf_ani_anim_finalize   (GObject        *object);
 
 static gboolean                gdk_pixbuf_ani_anim_is_static_image  (GdkPixbufAnimation *animation);
@@ -40,32 +39,11 @@ static GdkPixbufAnimationIter* gdk_pixbuf_ani_anim_get_iter (GdkPixbufAnimation
 
 
 
-static gpointer parent_class;
+G_DEFINE_TYPE  (GdkPixbufAniAnim, gdk_pixbuf_ani_anim, GDK_TYPE_PIXBUF_ANIMATION)
 
-GType
-gdk_pixbuf_ani_anim_get_type (void)
+static void
+gdk_pixbuf_ani_anim_init (GdkPixbufAniAnim *anim)
 {
-        static GType object_type = 0;
-
-        if (!object_type) {
-                const GTypeInfo object_info = {
-                        sizeof (GdkPixbufAniAnimClass),
-                        (GBaseInitFunc) NULL,
-                        (GBaseFinalizeFunc) NULL,
-                        (GClassInitFunc) gdk_pixbuf_ani_anim_class_init,
-                        NULL,           /* class_finalize */
-                        NULL,           /* class_data */
-                        sizeof (GdkPixbufAniAnim),
-                        0,              /* n_preallocs */
-                        (GInstanceInitFunc) NULL,
-                };
-                
-                object_type = g_type_register_static (GDK_TYPE_PIXBUF_ANIMATION,
-                                                      g_intern_static_string ("GdkPixbufAniAnim"),
-                                                      &object_info, 0);
-        }
-        
-        return object_type;
 }
 
 static void
@@ -73,9 +51,7 @@ gdk_pixbuf_ani_anim_class_init (GdkPixbufAniAnimClass *klass)
 {
         GObjectClass *object_class = G_OBJECT_CLASS (klass);
         GdkPixbufAnimationClass *anim_class = GDK_PIXBUF_ANIMATION_CLASS (klass);
-        
-        parent_class = g_type_class_peek_parent (klass);
-        
+
         object_class->finalize = gdk_pixbuf_ani_anim_finalize;
 
         anim_class->is_static_image = gdk_pixbuf_ani_anim_is_static_image;
@@ -97,12 +73,12 @@ gdk_pixbuf_ani_anim_finalize (GObject *object)
         g_free (ani_anim->pixbufs);
         g_free (ani_anim->sequence);
         g_free (ani_anim->delay);
-        
-        G_OBJECT_CLASS (parent_class)->finalize (object);
+
+        G_OBJECT_CLASS (gdk_pixbuf_ani_anim_parent_class)->finalize (object);
 }
 
 static gboolean
-gdk_pixbuf_ani_anim_is_static_image  (GdkPixbufAnimation *animation)
+gdk_pixbuf_ani_anim_is_static_image (GdkPixbufAnimation *animation)
 {
         GdkPixbufAniAnim *ani_anim;
 
@@ -121,7 +97,7 @@ gdk_pixbuf_ani_anim_get_static_image (GdkPixbufAnimation *animation)
         if (ani_anim->pixbufs == NULL)
                 return NULL;
         else
-                return ani_anim->pixbufs[0];        
+                return ani_anim->pixbufs[0];
 }
 
 static void
@@ -144,7 +120,7 @@ gdk_pixbuf_ani_anim_get_size (GdkPixbufAnimation *anim,
 static void
 iter_restart (GdkPixbufAniAnimIter *iter)
 {
-        iter->current_frame = 0;        
+        iter->current_frame = 0;
         iter->position = 0;
         iter->elapsed = 0;
 }
@@ -160,18 +136,17 @@ gdk_pixbuf_ani_anim_get_iter (GdkPixbufAnimation *anim,
         iter->ani_anim = GDK_PIXBUF_ANI_ANIM (anim);
 
         g_object_ref (iter->ani_anim);
-        
+
         iter_restart (iter);
 
         iter->start_time = *start_time;
         iter->current_time = *start_time;
-        
+
         return GDK_PIXBUF_ANIMATION_ITER (iter);
 }
 
 
 
-static void gdk_pixbuf_ani_anim_iter_class_init (GdkPixbufAniAnimIterClass *klass);
 static void gdk_pixbuf_ani_anim_iter_finalize   (GObject                   *object);
 
 static int        gdk_pixbuf_ani_anim_iter_get_delay_time             (GdkPixbufAnimationIter *iter);
@@ -182,32 +157,11 @@ static gboolean   gdk_pixbuf_ani_anim_iter_advance                    (GdkPixbuf
 
 
 
-static gpointer iter_parent_class;
+G_DEFINE_TYPE (GdkPixbufAniAnimIter, gdk_pixbuf_ani_anim_iter, GDK_TYPE_PIXBUF_ANIMATION_ITER);
 
-GType
-gdk_pixbuf_ani_anim_iter_get_type (void)
+static void
+gdk_pixbuf_ani_anim_iter_init (GdkPixbufAniAnimIter *anim)
 {
-        static GType object_type = 0;
-
-        if (!object_type) {
-                const GTypeInfo object_info = {
-                        sizeof (GdkPixbufAniAnimIterClass),
-                        (GBaseInitFunc) NULL,
-                        (GBaseFinalizeFunc) NULL,
-                        (GClassInitFunc) gdk_pixbuf_ani_anim_iter_class_init,
-                        NULL,           /* class_finalize */
-                        NULL,           /* class_data */
-                        sizeof (GdkPixbufAniAnimIter),
-                        0,              /* n_preallocs */
-                        (GInstanceInitFunc) NULL,
-                };
-                
-                object_type = g_type_register_static (GDK_TYPE_PIXBUF_ANIMATION_ITER,
-                                                      g_intern_static_string ("GdkPixbufAniAnimIter"),
-                                                      &object_info, 0);
-        }
-        
-        return object_type;
 }
 
 static void
@@ -216,9 +170,7 @@ gdk_pixbuf_ani_anim_iter_class_init (GdkPixbufAniAnimIterClass *klass)
         GObjectClass *object_class = G_OBJECT_CLASS (klass);
         GdkPixbufAnimationIterClass *anim_iter_class =
                 GDK_PIXBUF_ANIMATION_ITER_CLASS (klass);
-        
-        iter_parent_class = g_type_class_peek_parent (klass);
-        
+
         object_class->finalize = gdk_pixbuf_ani_anim_iter_finalize;
 
         anim_iter_class->get_delay_time = gdk_pixbuf_ani_anim_iter_get_delay_time;
@@ -233,8 +185,8 @@ gdk_pixbuf_ani_anim_iter_finalize (GObject *object)
         GdkPixbufAniAnimIter *iter = GDK_PIXBUF_ANI_ANIM_ITER (object);
 
         g_object_unref (iter->ani_anim);
-        
-        G_OBJECT_CLASS (iter_parent_class)->finalize (object);
+
+        G_OBJECT_CLASS (gdk_pixbuf_ani_anim_iter_parent_class)->finalize (object);
 }
 
 static gboolean
@@ -247,7 +199,7 @@ gdk_pixbuf_ani_anim_iter_advance (GdkPixbufAnimationIter *anim_iter,
         gint old;
 
         iter = GDK_PIXBUF_ANI_ANIM_ITER (anim_iter);
-        
+
         iter->current_time = *current_time;
 
         /* We use milliseconds for all times */
@@ -264,16 +216,16 @@ gdk_pixbuf_ani_anim_iter_advance (GdkPixbufAnimationIter *anim_iter,
         }
 
         g_assert (iter->ani_anim->total_time > 0);
-        
+
         /* See how many times we've already played the full animation,
          * and subtract time for that.
          */
         elapsed = elapsed % iter->ani_anim->total_time;
 
         iter->position = elapsed;
-        
+
         /* Now move to the proper frame */
-        
+
         iter->elapsed = 0;
         for (tmp = 0; tmp < iter->ani_anim->n_frames; tmp++) {
                 if (iter->position >= iter->elapsed &&
@@ -283,7 +235,7 @@ gdk_pixbuf_ani_anim_iter_advance (GdkPixbufAnimationIter *anim_iter,
         }
 
         old = iter->current_frame;
-        
+
         iter->current_frame = tmp;
 
         return iter->current_frame != old;
@@ -293,7 +245,7 @@ int
 gdk_pixbuf_ani_anim_iter_get_delay_time (GdkPixbufAnimationIter *anim_iter)
 {
         GdkPixbufAniAnimIter *iter;
-  
+
         iter = GDK_PIXBUF_ANI_ANIM_ITER (anim_iter);
 
         return iter->ani_anim->delay[iter->current_frame] - (iter->position - iter->elapsed);
@@ -323,13 +275,13 @@ gdk_pixbuf_ani_anim_iter_on_currently_loading_frame (GdkPixbufAnimationIter *ani
         gint frame;
 
         iter = GDK_PIXBUF_ANI_ANIM_ITER (anim_iter);
-      
+
         if (iter->current_frame >= iter->ani_anim->n_frames - 1)
                 return TRUE;
-        
+
         frame = iter->ani_anim->sequence[iter->current_frame + 1];
 
-        if (!iter->ani_anim->pixbufs[frame]) 
+        if (!iter->ani_anim->pixbufs[frame])
                 return TRUE;
 
         return FALSE;
diff --git a/gdk-pixbuf/io-gdip-animation.c b/gdk-pixbuf/io-gdip-animation.c
index 7281b6d..ade6147 100644
--- a/gdk-pixbuf/io-gdip-animation.c
+++ b/gdk-pixbuf/io-gdip-animation.c
@@ -26,7 +26,6 @@
 #include "io-gdip-native.h"
 #include "io-gdip-animation.h"
 
-static void gdk_pixbuf_gdip_anim_class_init (GdkPixbufGdipAnimClass *klass);
 static void gdk_pixbuf_gdip_anim_finalize   (GObject        *object);
 
 static gboolean                gdk_pixbuf_gdip_anim_is_static_image  (GdkPixbufAnimation *animation);
@@ -38,35 +37,12 @@ static void                    gdk_pixbuf_gdip_anim_get_size (GdkPixbufAnimation
 static GdkPixbufAnimationIter* gdk_pixbuf_gdip_anim_get_iter (GdkPixbufAnimation *anim,
                                                              const GTimeVal     *start_time);
 
-static gpointer parent_class;
 
-GType
-gdk_pixbuf_gdip_anim_get_type (void)
+G_DEFINE_TYPE (GdkPixbufGdipAnim, gdk_pixbuf_gdip_anim, GDK_TYPE_PIXBUF_ANIMATION);
+
+static void
+gdk_pixbuf_gdip_anim_init (GdkPixbufGdipAnim *anim)
 {
-        static GType object_type = 0;
-
-        if (!object_type) {
-                const GTypeInfo object_info = {
-                        sizeof (GdkPixbufGdipAnimClass),
-                        (GBaseInitFunc) NULL,
-                        (GBaseFinalizeFunc) NULL,
-                        (GClassInitFunc) gdk_pixbuf_gdip_anim_class_init,
-                        NULL,           /* class_finalize */
-                        NULL,           /* class_data */
-                        sizeof (GdkPixbufGdipAnim),
-                        0,              /* n_preallocs */
-                        (GInstanceInitFunc) NULL,
-                };
-
-                object_type = g_type_from_name ("GdkPixbufGdipAnim");
-                if (object_type == 0) {
-                  object_type = g_type_register_static (GDK_TYPE_PIXBUF_ANIMATION,
-                                                        g_intern_static_string ("GdkPixbufGdipAnim"),
-                                                        &object_info, 0);
-                }
-        }
-        
-        return object_type;
 }
 
 static void
@@ -74,9 +50,7 @@ gdk_pixbuf_gdip_anim_class_init (GdkPixbufGdipAnimClass *klass)
 {
         GObjectClass *object_class = G_OBJECT_CLASS (klass);
         GdkPixbufAnimationClass *anim_class = GDK_PIXBUF_ANIMATION_CLASS (klass);
-        
-        parent_class = g_type_class_peek_parent (klass);
-        
+
         object_class->finalize = gdk_pixbuf_gdip_anim_finalize;
 
         anim_class->is_static_image = gdk_pixbuf_gdip_anim_is_static_image;
@@ -92,16 +66,16 @@ gdk_pixbuf_gdip_anim_finalize (GObject *object)
 
         GList *l;
         GdkPixbufFrame *frame;
-        
+
         for (l = gdip_anim->frames; l; l = l->next) {
                 frame = l->data;
                 g_object_unref (frame->pixbuf);
                 g_free (frame);
         }
-        
+
         g_list_free (gdip_anim->frames);
-        
-        G_OBJECT_CLASS (parent_class)->finalize (object);
+
+        G_OBJECT_CLASS (gdk_pixbuf_gdip_anim_parent_class)->finalize (object);
 }
 
 static gboolean
@@ -125,7 +99,7 @@ gdk_pixbuf_gdip_anim_get_static_image (GdkPixbufAnimation *animation)
         if (gdip_anim->frames == NULL)
                 return NULL;
         else
-                return GDK_PIXBUF (((GdkPixbufFrame*)gdip_anim->frames->data)->pixbuf);        
+                return GDK_PIXBUF (((GdkPixbufFrame*)gdip_anim->frames->data)->pixbuf);
 }
 
 static void
@@ -155,7 +129,7 @@ static void
 iter_restart (GdkPixbufGdipAnimIter *iter)
 {
         iter_clear (iter);
-  
+
         iter->current_frame = iter->gdip_anim->frames;
 }
 
@@ -170,17 +144,16 @@ gdk_pixbuf_gdip_anim_get_iter (GdkPixbufAnimation *anim,
         iter->gdip_anim = GDK_PIXBUF_GDIP_ANIM (anim);
 
         g_object_ref (iter->gdip_anim);
-        
+
         iter_restart (iter);
 
         iter->start_time = *start_time;
         iter->current_time = *start_time;
         iter->first_loop_slowness = 0;
-        
+
         return GDK_PIXBUF_ANIMATION_ITER (iter);
 }
 
-static void gdk_pixbuf_gdip_anim_iter_class_init (GdkPixbufGdipAnimIterClass *klass);
 static void gdk_pixbuf_gdip_anim_iter_finalize   (GObject                   *object);
 
 static int        gdk_pixbuf_gdip_anim_iter_get_delay_time             (GdkPixbufAnimationIter *iter);
@@ -189,36 +162,7 @@ static gboolean   gdk_pixbuf_gdip_anim_iter_on_currently_loading_frame (GdkPixbu
 static gboolean   gdk_pixbuf_gdip_anim_iter_advance                    (GdkPixbufAnimationIter *iter,
                                                                        const GTimeVal         *current_time);
 
-static gpointer iter_parent_class;
-
-GType
-gdk_pixbuf_gdip_anim_iter_get_type (void)
-{
-        static GType object_type = 0;
-
-        if (!object_type) {
-                const GTypeInfo object_info = {
-                        sizeof (GdkPixbufGdipAnimIterClass),
-                        (GBaseInitFunc) NULL,
-                        (GBaseFinalizeFunc) NULL,
-                        (GClassInitFunc) gdk_pixbuf_gdip_anim_iter_class_init,
-                        NULL,           /* class_finalize */
-                        NULL,           /* class_data */
-                        sizeof (GdkPixbufGdipAnimIter),
-                        0,              /* n_preallocs */
-                        (GInstanceInitFunc) NULL,
-                };
-                
-                object_type = g_type_from_name ("GdkPixbufGdipAnimIter");
-                if (object_type == 0) {
-                  object_type = g_type_register_static (GDK_TYPE_PIXBUF_ANIMATION_ITER,
-                                                        g_intern_static_string ("GdkPixbufGdipAnimIter"),
-                                                        &object_info, 0);
-                }
-        }
-        
-        return object_type;
-}
+G_DEFINE_TYPE (GdkPixbufGdipAnimIter, gdk_pixbuf_gdip_anim_iter, GDK_TYPE_PIXBUF_ANIMATION_ITER);
 
 static void
 gdk_pixbuf_gdip_anim_iter_class_init (GdkPixbufGdipAnimIterClass *klass)
@@ -226,9 +170,7 @@ gdk_pixbuf_gdip_anim_iter_class_init (GdkPixbufGdipAnimIterClass *klass)
         GObjectClass *object_class = G_OBJECT_CLASS (klass);
         GdkPixbufAnimationIterClass *anim_iter_class =
                 GDK_PIXBUF_ANIMATION_ITER_CLASS (klass);
-        
-        iter_parent_class = g_type_class_peek_parent (klass);
-        
+
         object_class->finalize = gdk_pixbuf_gdip_anim_iter_finalize;
 
         anim_iter_class->get_delay_time = gdk_pixbuf_gdip_anim_iter_get_delay_time;
@@ -245,8 +187,8 @@ gdk_pixbuf_gdip_anim_iter_finalize (GObject *object)
         iter_clear (iter);
 
         g_object_unref (iter->gdip_anim);
-        
-        G_OBJECT_CLASS (iter_parent_class)->finalize (object);
+
+        G_OBJECT_CLASS (gdk_pixbuf_gdip_anim_iter_parent_class)->finalize (object);
 }
 
 static gboolean
@@ -258,9 +200,9 @@ gdk_pixbuf_gdip_anim_iter_advance (GdkPixbufAnimationIter *anim_iter,
         gint loop;
         GList *tmp;
         GList *old;
-        
+
         iter = GDK_PIXBUF_GDIP_ANIM_ITER (anim_iter);
-        
+
         iter->current_time = *current_time;
 
         /* We use milliseconds for all times */
@@ -277,7 +219,7 @@ gdk_pixbuf_gdip_anim_iter_advance (GdkPixbufAnimationIter *anim_iter,
         }
 
         g_assert (iter->gdip_anim->total_time > 0);
-        
+
         /* See how many times we've already played the full animation,
          * and subtract time for that.
          */
@@ -301,22 +243,22 @@ gdk_pixbuf_gdip_anim_iter_advance (GdkPixbufAnimationIter *anim_iter,
         iter->position = elapsed;
 
         /* Now move to the proper frame */
-        if (iter->gdip_anim->loop == 0 || loop < iter->gdip_anim->loop) 
+        if (iter->gdip_anim->loop == 0 || loop < iter->gdip_anim->loop)
                 tmp = iter->gdip_anim->frames;
-        else 
+        else
                 tmp = NULL;
         while (tmp != NULL) {
                 GdkPixbufFrame *frame = tmp->data;
-                
+
                 if (iter->position >= frame->elapsed &&
                     iter->position < (frame->elapsed + frame->delay_time))
                         break;
-                
+
                 tmp = tmp->next;
         }
 
         old = iter->current_frame;
-        
+
         iter->current_frame = tmp;
 
         return iter->current_frame != old;
@@ -327,7 +269,7 @@ gdk_pixbuf_gdip_anim_iter_get_delay_time (GdkPixbufAnimationIter *anim_iter)
 {
         GdkPixbufFrame *frame;
         GdkPixbufGdipAnimIter *iter;
-  
+
         iter = GDK_PIXBUF_GDIP_ANIM_ITER (anim_iter);
 
         if (iter->current_frame) {
@@ -340,9 +282,9 @@ gdk_pixbuf_gdip_anim_iter_get_delay_time (GdkPixbufAnimationIter *anim_iter)
                          frame->delay_time,
                          frame->delay_time - (iter->position - frame->elapsed));
 #endif
-                
+
                 return frame->delay_time - (iter->position - frame->elapsed);
-        } else 
+        } else
                 return -1; /* show last frame forever */
 }
 
@@ -351,7 +293,7 @@ gdk_pixbuf_gdip_anim_iter_get_pixbuf (GdkPixbufAnimationIter *anim_iter)
 {
         GdkPixbufGdipAnimIter *iter;
         GdkPixbufFrame *frame;
-        
+
         iter = GDK_PIXBUF_GDIP_ANIM_ITER (anim_iter);
 
         frame = iter->current_frame ? iter->current_frame->data : g_list_last (iter->gdip_anim->frames)->data;
@@ -365,7 +307,7 @@ gdk_pixbuf_gdip_anim_iter_get_pixbuf (GdkPixbufAnimationIter *anim_iter)
                    gdk_pixbuf_get_width (frame->pixbuf),
                    gdk_pixbuf_get_height (frame->pixbuf));
 #endif
-        
+
         if (frame == NULL)
                 return NULL;
 
@@ -376,8 +318,8 @@ static gboolean
 gdk_pixbuf_gdip_anim_iter_on_currently_loading_frame (GdkPixbufAnimationIter *anim_iter)
 {
         GdkPixbufGdipAnimIter *iter;
-  
+
         iter = GDK_PIXBUF_GDIP_ANIM_ITER (anim_iter);
 
-        return iter->current_frame == NULL || iter->current_frame->next == NULL;  
+        return iter->current_frame == NULL || iter->current_frame->next == NULL;
 }
diff --git a/gdk-pixbuf/io-gif-animation.c b/gdk-pixbuf/io-gif-animation.c
index e36f234..17e0aa8 100644
--- a/gdk-pixbuf/io-gif-animation.c
+++ b/gdk-pixbuf/io-gif-animation.c
@@ -28,7 +28,6 @@
 #include "gdk-pixbuf-private.h"
 #include "io-gif-animation.h"
 
-static void gdk_pixbuf_gif_anim_class_init (GdkPixbufGifAnimClass *klass);
 static void gdk_pixbuf_gif_anim_finalize   (GObject        *object);
 
 static gboolean                gdk_pixbuf_gif_anim_is_static_image  (GdkPixbufAnimation *animation);
@@ -43,32 +42,11 @@ static GdkPixbufAnimationIter* gdk_pixbuf_gif_anim_get_iter (GdkPixbufAnimation
 
 
 
-static gpointer parent_class;
+G_DEFINE_TYPE (GdkPixbufGifAnim, gdk_pixbuf_gif_anim, GDK_TYPE_PIXBUF_ANIMATION);
 
-GType
-gdk_pixbuf_gif_anim_get_type (void)
+static void
+gdk_pixbuf_gif_anim_init (GdkPixbufGifAnim *anim)
 {
-        static GType object_type = 0;
-
-        if (!object_type) {
-                const GTypeInfo object_info = {
-                        sizeof (GdkPixbufGifAnimClass),
-                        (GBaseInitFunc) NULL,
-                        (GBaseFinalizeFunc) NULL,
-                        (GClassInitFunc) gdk_pixbuf_gif_anim_class_init,
-                        NULL,           /* class_finalize */
-                        NULL,           /* class_data */
-                        sizeof (GdkPixbufGifAnim),
-                        0,              /* n_preallocs */
-                        (GInstanceInitFunc) NULL,
-                };
-                
-                object_type = g_type_register_static (GDK_TYPE_PIXBUF_ANIMATION,
-                                                      g_intern_static_string ("GdkPixbufGifAnim"),
-                                                      &object_info, 0);
-        }
-        
-        return object_type;
 }
 
 static void
@@ -76,9 +54,7 @@ gdk_pixbuf_gif_anim_class_init (GdkPixbufGifAnimClass *klass)
 {
         GObjectClass *object_class = G_OBJECT_CLASS (klass);
         GdkPixbufAnimationClass *anim_class = GDK_PIXBUF_ANIMATION_CLASS (klass);
-        
-        parent_class = g_type_class_peek_parent (klass);
-        
+
         object_class->finalize = gdk_pixbuf_gif_anim_finalize;
 
         anim_class->is_static_image = gdk_pixbuf_gif_anim_is_static_image;
@@ -94,7 +70,7 @@ gdk_pixbuf_gif_anim_finalize (GObject *object)
 
         GList *l;
         GdkPixbufFrame *frame;
-        
+
         for (l = gif_anim->frames; l; l = l->next) {
                 frame = l->data;
                 g_object_unref (frame->pixbuf);
@@ -104,10 +80,10 @@ gdk_pixbuf_gif_anim_finalize (GObject *object)
                         g_object_unref (frame->revert);
                 g_free (frame);
         }
-        
+
         g_list_free (gif_anim->frames);
-        
-        G_OBJECT_CLASS (parent_class)->finalize (object);
+
+        G_OBJECT_CLASS (gdk_pixbuf_gif_anim_parent_class)->finalize (object);
 }
 
 static gboolean
@@ -131,7 +107,7 @@ gdk_pixbuf_gif_anim_get_static_image (GdkPixbufAnimation *animation)
         if (gif_anim->frames == NULL)
                 return NULL;
         else
-                return GDK_PIXBUF (((GdkPixbufFrame*)gif_anim->frames->data)->pixbuf);        
+                return GDK_PIXBUF (((GdkPixbufFrame*)gif_anim->frames->data)->pixbuf);
 }
 
 static void
@@ -161,7 +137,7 @@ static void
 iter_restart (GdkPixbufGifAnimIter *iter)
 {
         iter_clear (iter);
-  
+
         iter->current_frame = iter->gif_anim->frames;
 }
 
@@ -176,19 +152,18 @@ gdk_pixbuf_gif_anim_get_iter (GdkPixbufAnimation *anim,
         iter->gif_anim = GDK_PIXBUF_GIF_ANIM (anim);
 
         g_object_ref (iter->gif_anim);
-        
+
         iter_restart (iter);
 
         iter->start_time = *start_time;
         iter->current_time = *start_time;
         iter->first_loop_slowness = 0;
-        
+
         return GDK_PIXBUF_ANIMATION_ITER (iter);
 }
 
 
 
-static void gdk_pixbuf_gif_anim_iter_class_init (GdkPixbufGifAnimIterClass *klass);
 static void gdk_pixbuf_gif_anim_iter_finalize   (GObject                   *object);
 
 static int        gdk_pixbuf_gif_anim_iter_get_delay_time             (GdkPixbufAnimationIter *iter);
@@ -199,32 +174,11 @@ static gboolean   gdk_pixbuf_gif_anim_iter_advance                    (GdkPixbuf
 
 
 
-static gpointer iter_parent_class;
+G_DEFINE_TYPE (GdkPixbufGifAnimIter, gdk_pixbuf_gif_anim_iter, GDK_TYPE_PIXBUF_ANIMATION_ITER);
 
-GType
-gdk_pixbuf_gif_anim_iter_get_type (void)
+static void
+gdk_pixbuf_gif_anim_iter_init (GdkPixbufGifAnimIter *iter)
 {
-        static GType object_type = 0;
-
-        if (!object_type) {
-                const GTypeInfo object_info = {
-                        sizeof (GdkPixbufGifAnimIterClass),
-                        (GBaseInitFunc) NULL,
-                        (GBaseFinalizeFunc) NULL,
-                        (GClassInitFunc) gdk_pixbuf_gif_anim_iter_class_init,
-                        NULL,           /* class_finalize */
-                        NULL,           /* class_data */
-                        sizeof (GdkPixbufGifAnimIter),
-                        0,              /* n_preallocs */
-                        (GInstanceInitFunc) NULL,
-                };
-                
-                object_type = g_type_register_static (GDK_TYPE_PIXBUF_ANIMATION_ITER,
-                                                      g_intern_static_string ("GdkPixbufGifAnimIter"),
-                                                      &object_info, 0);
-        }
-        
-        return object_type;
 }
 
 static void
@@ -233,9 +187,7 @@ gdk_pixbuf_gif_anim_iter_class_init (GdkPixbufGifAnimIterClass *klass)
         GObjectClass *object_class = G_OBJECT_CLASS (klass);
         GdkPixbufAnimationIterClass *anim_iter_class =
                 GDK_PIXBUF_ANIMATION_ITER_CLASS (klass);
-        
-        iter_parent_class = g_type_class_peek_parent (klass);
-        
+
         object_class->finalize = gdk_pixbuf_gif_anim_iter_finalize;
 
         anim_iter_class->get_delay_time = gdk_pixbuf_gif_anim_iter_get_delay_time;
@@ -252,8 +204,8 @@ gdk_pixbuf_gif_anim_iter_finalize (GObject *object)
         iter_clear (iter);
 
         g_object_unref (iter->gif_anim);
-        
-        G_OBJECT_CLASS (iter_parent_class)->finalize (object);
+
+        G_OBJECT_CLASS (gdk_pixbuf_gif_anim_iter_parent_class)->finalize (object);
 }
 
 static gboolean
@@ -265,9 +217,9 @@ gdk_pixbuf_gif_anim_iter_advance (GdkPixbufAnimationIter *anim_iter,
         gint loop;
         GList *tmp;
         GList *old;
-        
+
         iter = GDK_PIXBUF_GIF_ANIM_ITER (anim_iter);
-        
+
         iter->current_time = *current_time;
 
         /* We use milliseconds for all times */
@@ -284,7 +236,7 @@ gdk_pixbuf_gif_anim_iter_advance (GdkPixbufAnimationIter *anim_iter,
         }
 
         g_assert (iter->gif_anim->total_time > 0);
-        
+
         /* See how many times we've already played the full animation,
          * and subtract time for that.
          */
@@ -308,22 +260,22 @@ gdk_pixbuf_gif_anim_iter_advance (GdkPixbufAnimationIter *anim_iter,
         iter->position = elapsed;
 
         /* Now move to the proper frame */
-        if (iter->gif_anim->loop == 0 || loop < iter->gif_anim->loop) 
+        if (iter->gif_anim->loop == 0 || loop < iter->gif_anim->loop)
                 tmp = iter->gif_anim->frames;
-        else 
+        else
                 tmp = NULL;
         while (tmp != NULL) {
                 GdkPixbufFrame *frame = tmp->data;
-                
+
                 if (iter->position >= frame->elapsed &&
                     iter->position < (frame->elapsed + frame->delay_time))
                         break;
-                
+
                 tmp = tmp->next;
         }
 
         old = iter->current_frame;
-        
+
         iter->current_frame = tmp;
 
         return iter->current_frame != old;
@@ -334,7 +286,7 @@ gdk_pixbuf_gif_anim_iter_get_delay_time (GdkPixbufAnimationIter *anim_iter)
 {
         GdkPixbufFrame *frame;
         GdkPixbufGifAnimIter *iter;
-  
+
         iter = GDK_PIXBUF_GIF_ANIM_ITER (anim_iter);
 
         if (iter->current_frame) {
@@ -347,21 +299,21 @@ gdk_pixbuf_gif_anim_iter_get_delay_time (GdkPixbufAnimationIter *anim_iter)
                          frame->delay_time,
                          frame->delay_time - (iter->position - frame->elapsed));
 #endif
-                
+
                 return frame->delay_time - (iter->position - frame->elapsed);
-        } else 
+        } else
                 return -1; /* show last frame forever */
 }
 
 void
 gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
                                      GdkPixbufFrame   *frame)
-{  
+{
         GList *link;
         GList *tmp;
-        
+
         link = g_list_find (gif_anim->frames, frame);
-        
+
         if (frame->need_recomposite || frame->composited == NULL) {
                 /* For now, to composite we start with the last
                  * composited frame and composite everything up to
@@ -372,7 +324,7 @@ gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
                 tmp = link;
                 while (tmp != NULL) {
                         GdkPixbufFrame *f = tmp->data;
-                        
+
                         if (f->need_recomposite) {
                                 if (f->composited) {
                                         g_object_unref (f->composited);
@@ -382,14 +334,14 @@ gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
 
                         if (f->composited != NULL)
                                 break;
-                        
+
                         tmp = tmp->prev;
                 }
 
                 /* Go forward, compositing all frames up to the current frame */
                 if (tmp == NULL)
                         tmp = gif_anim->frames;
-                
+
                 while (tmp != NULL) {
                         GdkPixbufFrame *f = tmp->data;
                         gint clipped_width, clipped_height;
@@ -399,14 +351,14 @@ gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
 
                         clipped_width = MIN (gif_anim->width - f->x_offset, gdk_pixbuf_get_width (f->pixbuf));
                         clipped_height = MIN (gif_anim->height - f->y_offset, gdk_pixbuf_get_height (f->pixbuf));
-  
+
                         if (f->need_recomposite) {
                                 if (f->composited) {
                                         g_object_unref (f->composited);
                                         f->composited = NULL;
                                 }
                         }
-                        
+
                         if (f->composited != NULL)
                                 goto next;
 
@@ -424,7 +376,7 @@ gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
                                         return;
 
                                 /* alpha gets dumped if f->composited has no alpha */
-                                
+
                                 gdk_pixbuf_fill (f->composited,
                                                  (gif_anim->bg_red << 24) |
                                                  (gif_anim->bg_green << 16) |
@@ -441,7 +393,7 @@ gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
                                                               1.0, 1.0,
                                                               GDK_INTERP_BILINEAR,
                                                               255);
-                                
+
                                 if (f->action == GDK_PIXBUF_FRAME_REVERT)
                                         g_warning ("First frame of GIF has bad dispose mode, GIF loader should not have loaded this image");
 
@@ -450,7 +402,7 @@ gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
                                 GdkPixbufFrame *prev_frame;
                                 gint prev_clipped_width;
                                 gint prev_clipped_height;
-                                
+
                                 prev_frame = tmp->prev->data;
 
                                 prev_clipped_width = MIN (gif_anim->width - prev_frame->x_offset, gdk_pixbuf_get_width (prev_frame->pixbuf));
@@ -459,13 +411,13 @@ gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
                                 /* Init f->composited with what we should have after the previous
                                  * frame
                                  */
-                                
+
                                 if (prev_frame->action == GDK_PIXBUF_FRAME_RETAIN) {
                                         f->composited = gdk_pixbuf_copy (prev_frame->composited);
 
                                         if (f->composited == NULL)
                                                 return;
-                                        
+
                                 } else if (prev_frame->action == GDK_PIXBUF_FRAME_DISPOSE) {
                                         f->composited = gdk_pixbuf_copy (prev_frame->composited);
 
@@ -484,14 +436,14 @@ gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
 
                                                 if (area == NULL)
                                                         return;
-                                                
+
                                                 gdk_pixbuf_fill (area,
                                                                  (gif_anim->bg_red << 24) |
                                                                  (gif_anim->bg_green << 16) |
                                                                  (gif_anim->bg_blue << 8));
-                                                
+
                                                 g_object_unref (area);
-                                        }                                        
+                                        }
                                 } else if (prev_frame->action == GDK_PIXBUF_FRAME_REVERT) {
                                         f->composited = gdk_pixbuf_copy (prev_frame->composited);
 
@@ -518,16 +470,16 @@ gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
                                         if (clipped_width > 0 && clipped_height > 0) {
                                                 /* We need to save the contents before compositing */
                                                 GdkPixbuf *area;
-                                                
+
                                                 area = gdk_pixbuf_new_subpixbuf (f->composited,
                                                                                  f->x_offset,
                                                                                  f->y_offset,
                                                                                  clipped_width,
                                                                                  clipped_height);
-                                            
+
                                                 if (area == NULL)
                                                         return;
-                                                
+
                                                 f->revert = gdk_pixbuf_copy (area);
 
                                                 g_object_unref (area);
@@ -551,14 +503,14 @@ gdk_pixbuf_gif_anim_frame_composite (GdkPixbufGifAnim *gif_anim,
                                                               GDK_INTERP_NEAREST,
                                                               255);
                                 }
-                        
+
                                 f->need_recomposite = FALSE;
                         }
-                        
+
                 next:
                         if (tmp == link)
                                 break;
-                        
+
                         tmp = tmp->next;
                 }
         }
@@ -569,7 +521,7 @@ gdk_pixbuf_gif_anim_iter_get_pixbuf (GdkPixbufAnimationIter *anim_iter)
 {
         GdkPixbufGifAnimIter *iter;
         GdkPixbufFrame *frame;
-        
+
         iter = GDK_PIXBUF_GIF_ANIM_ITER (anim_iter);
 
         frame = iter->current_frame ? iter->current_frame->data : g_list_last (iter->gif_anim->frames)->data;
@@ -583,12 +535,12 @@ gdk_pixbuf_gif_anim_iter_get_pixbuf (GdkPixbufAnimationIter *anim_iter)
                    gdk_pixbuf_get_width (frame->pixbuf),
                    gdk_pixbuf_get_height (frame->pixbuf));
 #endif
-        
+
         if (frame == NULL)
                 return NULL;
 
         gdk_pixbuf_gif_anim_frame_composite (iter->gif_anim, frame);
-        
+
         return frame->composited;
 }
 
@@ -596,8 +548,8 @@ static gboolean
 gdk_pixbuf_gif_anim_iter_on_currently_loading_frame (GdkPixbufAnimationIter *anim_iter)
 {
         GdkPixbufGifAnimIter *iter;
-  
+
         iter = GDK_PIXBUF_GIF_ANIM_ITER (anim_iter);
 
-        return iter->current_frame == NULL || iter->current_frame->next == NULL;  
+        return iter->current_frame == NULL || iter->current_frame->next == NULL;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]