[gtk+/wip/css: 15/37] animation: Add _gtk_style_animation_is_static()



commit 2f7e0543e8a016a21e94e3b392a75afd802a68a1
Author: Benjamin Otte <otte redhat com>
Date:   Wed Sep 12 15:27:59 2012 +0200

    animation: Add _gtk_style_animation_is_static()
    
    This will be useful to not trigger updates all the time when nothing is
    happening (ie due to animations being paused or due to them having
    reached their final value).

 gtk/gtkcssanimation.c          |   13 +++++++++++++
 gtk/gtkcsstransition.c         |   10 ++++++++++
 gtk/gtkstyleanimation.c        |   31 +++++++++++++++++++++++++++++++
 gtk/gtkstyleanimationprivate.h |    4 ++++
 4 files changed, 58 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkcssanimation.c b/gtk/gtkcssanimation.c
index 765bb4e..c0964de 100644
--- a/gtk/gtkcssanimation.c
+++ b/gtk/gtkcssanimation.c
@@ -143,6 +143,18 @@ gtk_css_animation_is_finished (GtkStyleAnimation *style_animation,
   return FALSE;
 }
 
+static gboolean
+gtk_css_animation_is_static (GtkStyleAnimation *style_animation,
+                             gint64             at_time_us)
+{
+  GtkCssAnimation *animation = GTK_CSS_ANIMATION (style_animation);
+  double iteration;
+
+  iteration = gtk_css_animation_get_iteration (animation, at_time_us);
+
+  return iteration >= animation->iteration_count;
+}
+
 static void
 gtk_css_animation_finalize (GObject *object)
 {
@@ -165,6 +177,7 @@ _gtk_css_animation_class_init (GtkCssAnimationClass *klass)
 
   animation_class->set_values = gtk_css_animation_set_values;
   animation_class->is_finished = gtk_css_animation_is_finished;
+  animation_class->is_static = gtk_css_animation_is_static;
 }
 
 static void
diff --git a/gtk/gtkcsstransition.c b/gtk/gtkcsstransition.c
index ede18b3..d1287f2 100644
--- a/gtk/gtkcsstransition.c
+++ b/gtk/gtkcsstransition.c
@@ -68,6 +68,15 @@ gtk_css_transition_is_finished (GtkStyleAnimation *animation,
   return at_time_us >= transition->end_time;
 }
 
+static gboolean
+gtk_css_transition_is_static (GtkStyleAnimation *animation,
+                              gint64             at_time_us)
+{
+  GtkCssTransition *transition = GTK_CSS_TRANSITION (animation);
+
+  return at_time_us >= transition->end_time;
+}
+
 static void
 gtk_css_transition_finalize (GObject *object)
 {
@@ -90,6 +99,7 @@ _gtk_css_transition_class_init (GtkCssTransitionClass *klass)
 
   animation_class->set_values = gtk_css_transition_set_values;
   animation_class->is_finished = gtk_css_transition_is_finished;
+  animation_class->is_static = gtk_css_transition_is_static;
 }
 
 static void
diff --git a/gtk/gtkstyleanimation.c b/gtk/gtkstyleanimation.c
index aab78bd..ac74851 100644
--- a/gtk/gtkstyleanimation.c
+++ b/gtk/gtkstyleanimation.c
@@ -39,11 +39,19 @@ gtk_style_animation_real_is_finished (GtkStyleAnimation *animation,
   return TRUE;
 }
 
+static gboolean
+gtk_style_animation_real_is_static (GtkStyleAnimation *animation,
+                                    gint64             at_time_us)
+{
+  return FALSE;
+}
+
 static void
 _gtk_style_animation_class_init (GtkStyleAnimationClass *klass)
 {
   klass->set_values = gtk_style_animation_real_set_values;
   klass->is_finished = gtk_style_animation_real_is_finished;
+  klass->is_static = gtk_style_animation_real_is_static;
 }
 
 static void
@@ -80,3 +88,26 @@ _gtk_style_animation_is_finished (GtkStyleAnimation *animation,
   return klass->is_finished (animation, at_time_us);
 }
 
+/**
+ * _gtk_style_animation_is_static:
+ * @animation: The animation to query
+ * @at_time_us: The timestamp to query for
+ *
+ * Checks if @animation will not change its values anymore after
+ * @at_time_us. This happens for example when the animation has reached its
+ * final value or when it has been paused.
+ *
+ * Returns: %TRUE if @animation will not change anymore after @at_time_us
+ **/
+gboolean
+_gtk_style_animation_is_static (GtkStyleAnimation *animation,
+                                gint64             at_time_us)
+{
+  GtkStyleAnimationClass *klass;
+
+  g_return_val_if_fail (GTK_IS_STYLE_ANIMATION (animation), TRUE);
+
+  klass = GTK_STYLE_ANIMATION_GET_CLASS (animation);
+
+  return klass->is_static (animation, at_time_us);
+}
diff --git a/gtk/gtkstyleanimationprivate.h b/gtk/gtkstyleanimationprivate.h
index 5d5d6c6..b4f2c69 100644
--- a/gtk/gtkstyleanimationprivate.h
+++ b/gtk/gtkstyleanimationprivate.h
@@ -46,6 +46,8 @@ struct _GtkStyleAnimationClass
 
   gboolean      (* is_finished)                         (GtkStyleAnimation      *animation,
                                                          gint64                  at_time_us);
+  gboolean      (* is_static)                           (GtkStyleAnimation      *animation,
+                                                         gint64                  at_time_us);
   GtkBitmask *  (* set_values)                          (GtkStyleAnimation      *animation,
                                                          GtkBitmask             *changed,
                                                          gint64                  for_time_us,
@@ -60,6 +62,8 @@ GtkBitmask *    _gtk_style_animation_set_values         (GtkStyleAnimation
                                                          GtkCssComputedValues   *values) G_GNUC_WARN_UNUSED_RESULT;
 gboolean        _gtk_style_animation_is_finished        (GtkStyleAnimation      *animation,
                                                          gint64                  at_time_us);
+gboolean        _gtk_style_animation_is_static          (GtkStyleAnimation      *animation,
+                                                         gint64                  at_time_us);
 
 
 G_END_DECLS



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