]> Pileus Git - ~andy/gtk/commitdiff
csscomputedvalues: Store animated values here
authorBenjamin Otte <otte@redhat.com>
Thu, 13 Sep 2012 14:23:36 +0000 (16:23 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 17 Sep 2012 18:39:12 +0000 (20:39 +0200)
Actually use the GtkCssComputedValues to store the computed values here
instead of putting them into the GtkCssAnimatedValues separately.

gtk/gtkcssanimatedvalues.c
gtk/gtkcssanimatedvaluesprivate.h
gtk/gtkcssanimation.c
gtk/gtkcsstransition.c

index 92bd1e48f00f2b7b661b077c5e7d9ea6d1a3c7ce..c7f9d0e3bf87c68696fbf3a64607011a8d8dcc1b 100644 (file)
@@ -41,7 +41,6 @@ gtk_css_animated_values_dispose (GObject *object)
 {
   GtkCssAnimatedValues *values = GTK_CSS_ANIMATED_VALUES (object);
 
-  g_clear_object (&values->computed);
   g_slist_free_full (values->animations, g_object_unref);
   values->animations = NULL;
 
@@ -164,15 +163,11 @@ gtk_css_animated_values_start_transitions (GtkCssAnimatedValues *values,
                                            GtkCssComputedValues *source)
 {
   TransitionInfo transitions[GTK_CSS_PROPERTY_N_PROPERTIES] = { { 0, } };
-  GtkCssComputedValues *source_computed, *computed;
+  GtkCssComputedValues *computed;
   GtkCssValue *durations, *delays, *timing_functions;
   guint i;
 
   computed = GTK_CSS_COMPUTED_VALUES (values);
-  if (GTK_IS_CSS_ANIMATED_VALUES (source))
-    source_computed = GTK_CSS_ANIMATED_VALUES (source)->computed;
-  else
-    source_computed = source;
 
   transition_infos_set (transitions, _gtk_css_computed_values_get_value (computed, GTK_CSS_PROPERTY_TRANSITION_PROPERTY));
 
@@ -194,8 +189,8 @@ gtk_css_animated_values_start_transitions (GtkCssAnimatedValues *values,
       if (duration + delay == 0.0)
         continue;
 
-      start = _gtk_css_computed_values_get_value (source_computed, i);
-      end = _gtk_css_computed_values_get_value (values->computed, i);
+      start = _gtk_css_computed_values_get_intrinsic_value (source, i);
+      end = _gtk_css_computed_values_get_intrinsic_value (computed, i);
       if (_gtk_css_value_equal (start, end))
         {
           if (GTK_IS_CSS_ANIMATED_VALUES (source))
@@ -321,7 +316,6 @@ _gtk_css_animated_values_new (GtkCssComputedValues *computed,
 
   values = g_object_new (GTK_TYPE_CSS_ANIMATED_VALUES, NULL);
 
-  values->computed = g_object_ref (computed);
   for (i = 0; ; i++)
     {
       value = _gtk_css_computed_values_get_value (computed, i);
@@ -357,15 +351,20 @@ GtkBitmask *
 _gtk_css_animated_values_advance (GtkCssAnimatedValues *values,
                                   gint64                timestamp)
 {
+  GtkCssComputedValues *computed;
   GtkBitmask *changed;
+  GPtrArray *old_animated_values;
   GSList *list;
 
   g_return_val_if_fail (GTK_IS_CSS_ANIMATED_VALUES (values), NULL);
   g_return_val_if_fail (timestamp >= values->current_time, NULL);
 
+  computed = GTK_CSS_COMPUTED_VALUES (values);
   changed = _gtk_bitmask_new ();
 
   values->current_time = timestamp;
+  old_animated_values = computed->animated_values;
+  computed->animated_values = NULL;
 
   list = values->animations;
   while (list)
@@ -386,6 +385,9 @@ _gtk_css_animated_values_advance (GtkCssAnimatedValues *values,
         }
     }
   
+  if (old_animated_values)
+    g_ptr_array_unref (old_animated_values);
+
   return changed;
 }
 
index 1877d3bc602f9f39a3b9171788b6dc57d187e7c1..65340f5d0ca7876fa66fb25c3940623cd04b3d1b 100644 (file)
@@ -39,7 +39,6 @@ struct _GtkCssAnimatedValues
   GtkCssComputedValues parent;
 
   gint64 current_time;                  /* the current time in our world */
-  GtkCssComputedValues *computed;       /* the computed values we'd have without animations */
   GSList *animations;                   /* the running animations */
 };
 
index c0964de2ba28e7950aebc0902147ba4c50758169..48ef62bc4915a9a86b1cfefbd8f43da6528c77cb 100644 (file)
@@ -125,9 +125,8 @@ gtk_css_animation_set_values (GtkStyleAnimation    *style_animation,
       value = _gtk_css_keyframes_get_value (animation->keyframes,
                                             i,
                                             progress,
-                                            _gtk_css_computed_values_get_value (values, i));
-      /* XXX: Is using 0 correct here? */
-      _gtk_css_computed_values_set_value (values, property_id, value, 0, NULL);
+                                            _gtk_css_computed_values_get_intrinsic_value (values, i));
+      _gtk_css_computed_values_set_animated_value (values, property_id, value);
       _gtk_css_value_unref (value);
       
       changed = _gtk_bitmask_set (changed, property_id, TRUE);
index d1287f2de6857cc993acf7027d7c363e015ed802..bc50e66c771218c7b7f12fcc23a7172a63c30497 100644 (file)
@@ -52,8 +52,7 @@ gtk_css_transition_set_values (GtkStyleAnimation    *animation,
         value = _gtk_css_value_ref (transition->end);
     }
 
-  /* XXX: Is using 0 correct here? */
-  _gtk_css_computed_values_set_value (values, transition->property, value, 0, NULL);
+  _gtk_css_computed_values_set_animated_value (values, transition->property, value);
   _gtk_css_value_unref (value);
 
   return _gtk_bitmask_set (changed, transition->property, TRUE);