[clutter] property-transition: Verify the interval on compute_value()
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] property-transition: Verify the interval on compute_value()
- Date: Fri, 8 Jun 2012 16:39:35 +0000 (UTC)
commit b21cb294791f50285bbe86c7f1c8ec446370ffbe
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Fri Jun 8 17:33:30 2012 +0100
property-transition: Verify the interval on compute_value()
By checking if the interval is valid inside compute_value() we can catch
the cases where the interval values of a PropertyTransition are set
after the transition has been added to an Animatable instance - i.e. the
following code:
let transition = new Clutter.PropertyTransition();
transition.set_property_name('opacity');
actor.add_transition('opacityAnim', transition);
transition.set_to_value(0);
should be equivalent to:
let transition = new Clutter.PropertyTransition();
transition.set_property_name('opacity');
transition.set_to_value(0);
actor.add_transition('opacityAnim', transition);
instead of emitting a warning.
clutter/clutter-property-transition.c | 55 +++++++++++++++++++++------------
1 files changed, 35 insertions(+), 20 deletions(-)
---
diff --git a/clutter/clutter-property-transition.c b/clutter/clutter-property-transition.c
index 90f9ac2..9591169 100644
--- a/clutter/clutter-property-transition.c
+++ b/clutter/clutter-property-transition.c
@@ -62,6 +62,38 @@ static GParamSpec *obj_props[PROP_LAST] = { NULL, };
G_DEFINE_TYPE (ClutterPropertyTransition, clutter_property_transition, CLUTTER_TYPE_TRANSITION)
+static inline void
+clutter_property_transition_ensure_interval (ClutterPropertyTransition *transition,
+ ClutterAnimatable *animatable,
+ ClutterInterval *interval)
+{
+ ClutterPropertyTransitionPrivate *priv = transition->priv;
+ GValue *value_p;
+
+ if (clutter_interval_is_valid (interval))
+ return;
+
+ /* if no initial value has been set, use the current value */
+ value_p = clutter_interval_peek_initial_value (interval);
+ if (!G_IS_VALUE (value_p))
+ {
+ g_value_init (value_p, clutter_interval_get_value_type (interval));
+ clutter_animatable_get_initial_state (animatable,
+ priv->property_name,
+ value_p);
+ }
+
+ /* if no final value has been set, use the current value */
+ value_p = clutter_interval_peek_final_value (interval);
+ if (!G_IS_VALUE (value_p))
+ {
+ g_value_init (value_p, clutter_interval_get_value_type (interval));
+ clutter_animatable_get_initial_state (animatable,
+ priv->property_name,
+ value_p);
+ }
+}
+
static void
clutter_property_transition_attached (ClutterTransition *transition,
ClutterAnimatable *animatable)
@@ -69,7 +101,6 @@ clutter_property_transition_attached (ClutterTransition *transition,
ClutterPropertyTransition *self = CLUTTER_PROPERTY_TRANSITION (transition);
ClutterPropertyTransitionPrivate *priv = self->priv;
ClutterInterval *interval;
- GValue *value;
if (priv->property_name == NULL)
return;
@@ -84,25 +115,7 @@ clutter_property_transition_attached (ClutterTransition *transition,
if (interval == NULL)
return;
- /* if no initial value has been set, use the current value */
- value = clutter_interval_peek_initial_value (interval);
- if (!G_IS_VALUE (value))
- {
- g_value_init (value, clutter_interval_get_value_type (interval));
- clutter_animatable_get_initial_state (animatable,
- priv->property_name,
- value);
- }
-
- /* if no final value has been set, use the current value */
- value = clutter_interval_peek_final_value (interval);
- if (!G_IS_VALUE (value))
- {
- g_value_init (value, clutter_interval_get_value_type (interval));
- clutter_animatable_get_initial_state (animatable,
- priv->property_name,
- value);
- }
+ clutter_property_transition_ensure_interval (self, animatable, interval);
}
static void
@@ -130,6 +143,8 @@ clutter_property_transition_compute_value (ClutterTransition *transition,
if (priv->pspec == NULL)
return;
+ clutter_property_transition_ensure_interval (self, animatable, interval);
+
g_value_init (&value, clutter_interval_get_value_type (interval));
res = clutter_animatable_interpolate_value (animatable,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]