actor: Check easing duration when updating in-flight transitions

If we update a transition that is currently playing, we need to check
the current easing state, and look at the eventual duration, in case
the user wants to cancel the transition.
This commit is contained in:
Emmanuele Bassi 2012-03-28 12:43:57 +01:00
parent 3c1358da5d
commit 24d43cd076

View File

@ -17003,6 +17003,7 @@ _clutter_actor_update_transition (ClutterActor *actor,
...)
{
TransitionClosure *clos;
ClutterTimeline *timeline;
ClutterInterval *interval;
const ClutterAnimationInfo *info;
va_list var_args;
@ -17020,6 +17021,8 @@ _clutter_actor_update_transition (ClutterActor *actor,
if (clos == NULL)
return;
timeline = CLUTTER_TIMELINE (clos->transition);
va_start (var_args, pspec);
ptype = G_PARAM_SPEC_VALUE_TYPE (pspec);
@ -17041,7 +17044,17 @@ _clutter_actor_update_transition (ClutterActor *actor,
clutter_interval_set_initial_value (interval, &initial);
clutter_interval_set_final_value (interval, &final);
clutter_timeline_rewind (CLUTTER_TIMELINE (clos->transition));
/* if we're updating with an easing duration of zero milliseconds,
* we just jump the timeline to the end and let it run its course
*/
if (info->cur_state == NULL || info->cur_state->easing_duration == 0)
{
guint duration = clutter_timeline_get_duration (timeline);
clutter_timeline_advance (timeline, duration);
}
else
clutter_timeline_rewind (timeline);
out:
g_value_unset (&initial);