[libadwaita/wip/exalm/animation-cleanup: 3/10] animation-target: Split out AdwCallbackAnimationTarget




commit 93cb020de3445b4696cf9d08ccdec662e7e41270
Author: Manuel Genovés <manuel genoves gmail com>
Date:   Tue Nov 16 02:23:37 2021 +0500

    animation-target: Split out AdwCallbackAnimationTarget

 src/adw-animation-target-private.h | 22 +++++++-----
 src/adw-animation-target.c         | 71 ++++++++++++++++++++++++++++----------
 src/adw-animation.c                |  2 +-
 3 files changed, 67 insertions(+), 28 deletions(-)
---
diff --git a/src/adw-animation-target-private.h b/src/adw-animation-target-private.h
index f8428758..4f335e98 100644
--- a/src/adw-animation-target-private.h
+++ b/src/adw-animation-target-private.h
@@ -12,21 +12,27 @@
 
 #include "adw-version.h"
 
-#include <glib-object.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
-typedef void (*AdwAnimationTargetFunc) (double   value,
-                                        gpointer user_data);
-
 #define ADW_TYPE_ANIMATION_TARGET (adw_animation_target_get_type())
 
-G_DECLARE_FINAL_TYPE (AdwAnimationTarget, adw_animation_target, ADW, ANIMATION_TARGET, GObject)
-
-AdwAnimationTarget *adw_animation_target_new (AdwAnimationTargetFunc callback,
-                                              gpointer               user_data);
+GDK_DECLARE_INTERNAL_TYPE (AdwAnimationTarget, adw_animation_target, ADW, ANIMATION_TARGET, GObject)
 
 void adw_animation_target_set_value (AdwAnimationTarget *self,
                                      double              value);
 
+
+
+typedef void (*AdwAnimationTargetFunc) (double   value,
+                                        gpointer user_data);
+
+#define ADW_TYPE_CALLBACK_ANIMATION_TARGET (adw_callback_animation_target_get_type())
+
+GDK_DECLARE_INTERNAL_TYPE (AdwCallbackAnimationTarget, adw_callback_animation_target, ADW, 
CALLBACK_ANIMATION_TARGET, AdwAnimationTarget)
+
+AdwAnimationTarget *adw_callback_animation_target_new (AdwAnimationTargetFunc callback,
+                                                       gpointer               user_data);
+
 G_END_DECLS
diff --git a/src/adw-animation-target.c b/src/adw-animation-target.c
index 32b04e6e..4a9b0e13 100644
--- a/src/adw-animation-target.c
+++ b/src/adw-animation-target.c
@@ -7,14 +7,10 @@
 #include "config.h"
 
 #include "adw-animation-target-private.h"
-#include "adw-macros-private.h"
 
 struct _AdwAnimationTarget
 {
   GObject parent_instance;
-
-  AdwAnimationTargetFunc callback;
-  gpointer user_data;
 };
 
 struct _AdwAnimationTargetClass
@@ -25,7 +21,7 @@ struct _AdwAnimationTargetClass
                      double              value);
 };
 
-G_DEFINE_FINAL_TYPE (AdwAnimationTarget, adw_animation_target, G_TYPE_OBJECT)
+G_DEFINE_ABSTRACT_TYPE (AdwAnimationTarget, adw_animation_target, G_TYPE_OBJECT)
 
 static void
 adw_animation_target_class_init (AdwAnimationTargetClass *klass)
@@ -37,27 +33,64 @@ adw_animation_target_init (AdwAnimationTarget *self)
 {
 }
 
-AdwAnimationTarget *
-adw_animation_target_new (AdwAnimationTargetFunc callback,
-                          gpointer               user_data)
+void
+adw_animation_target_set_value (AdwAnimationTarget *self,
+                                double              value)
 {
-  AdwAnimationTarget *self;
+  g_return_if_fail (ADW_IS_ANIMATION_TARGET (self));
 
-  g_return_val_if_fail (callback != NULL, NULL);
+  ADW_ANIMATION_TARGET_GET_CLASS (self)->set_value (self, value);
+}
 
-  self = g_object_new (ADW_TYPE_ANIMATION_TARGET, NULL);
+struct _AdwCallbackAnimationTarget
+{
+  AdwAnimationTarget parent_instance;
 
-  self->callback = callback;
-  self->user_data = user_data;
+  AdwAnimationTargetFunc callback;
+  gpointer user_data;
+};
 
-  return self;
-}
+struct _AdwCallbackAnimationTargetClass
+{
+  AdwAnimationTargetClass parent_class;
+};
 
-void
-adw_animation_target_set_value (AdwAnimationTarget *self,
-                                double              value)
+G_DEFINE_TYPE (AdwCallbackAnimationTarget, adw_callback_animation_target, ADW_TYPE_ANIMATION_TARGET)
+
+static void
+adw_callback_animation_target_set_value (AdwAnimationTarget *target,
+                                         double              value)
 {
-  g_return_if_fail (ADW_IS_ANIMATION_TARGET (self));
+  AdwCallbackAnimationTarget *self = ADW_CALLBACK_ANIMATION_TARGET (target);
 
   self->callback (value, self->user_data);
 }
+
+static void
+adw_callback_animation_target_class_init (AdwCallbackAnimationTargetClass *klass)
+{
+  AdwAnimationTargetClass *target_class = ADW_ANIMATION_TARGET_CLASS (klass);
+
+  target_class->set_value = adw_callback_animation_target_set_value;
+}
+
+static void
+adw_callback_animation_target_init (AdwCallbackAnimationTarget *self)
+{
+}
+
+AdwAnimationTarget *
+adw_callback_animation_target_new (AdwAnimationTargetFunc callback,
+                                   gpointer               user_data)
+{
+  AdwCallbackAnimationTarget *self;
+
+  g_return_val_if_fail (callback != NULL, NULL);
+
+  self = g_object_new (ADW_TYPE_CALLBACK_ANIMATION_TARGET, NULL);
+
+  self->callback = callback;
+  self->user_data = user_data;
+
+  return ADW_ANIMATION_TARGET (self);
+}
diff --git a/src/adw-animation.c b/src/adw-animation.c
index 5ae48d22..90057cfb 100644
--- a/src/adw-animation.c
+++ b/src/adw-animation.c
@@ -347,7 +347,7 @@ adw_animation_new (GtkWidget                 *widget,
   g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
   g_return_val_if_fail (target_func != NULL, NULL);
 
-  target = adw_animation_target_new (target_func, user_data);
+  target = adw_callback_animation_target_new (target_func, user_data);
 
   return g_object_new (ADW_TYPE_ANIMATION,
                        "widget", widget,


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