actor: Remove existing implicit transition if duration is 0
When changing an implicit transition mid flight we may end up with an easing state with a duration of zero milliseconds; this leads to the implicit transition machinery setting the final state directly onto the actor. If there is a running transition, though, we need to remove it from the transitions table, otherwise it will keep running. This regression happened when the update_transition() internal function was merged into the create_transition() one. Tested-by: Lionel Landwerlin <llandwerlin@gmail.com>
This commit is contained in:
parent
2ef148a2c9
commit
03f4f1c69e
@ -18624,6 +18624,9 @@ _clutter_actor_create_transition (ClutterActor *actor,
|
|||||||
*/
|
*/
|
||||||
if (info->cur_state->easing_duration == 0)
|
if (info->cur_state->easing_duration == 0)
|
||||||
{
|
{
|
||||||
|
/* remove a transition, if one exists */
|
||||||
|
clutter_actor_remove_transition (actor, pspec->name);
|
||||||
|
|
||||||
clutter_actor_set_animatable_property (actor,
|
clutter_actor_set_animatable_property (actor,
|
||||||
pspec->param_id,
|
pspec->param_id,
|
||||||
&final,
|
&final,
|
||||||
@ -18784,6 +18787,8 @@ clutter_actor_remove_transition (ClutterActor *self,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
clos = g_hash_table_lookup (info->transitions, name);
|
clos = g_hash_table_lookup (info->transitions, name);
|
||||||
|
if (clos == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
was_playing =
|
was_playing =
|
||||||
clutter_timeline_is_playing (CLUTTER_TIMELINE (clos->transition));
|
clutter_timeline_is_playing (CLUTTER_TIMELINE (clos->transition));
|
||||||
|
Loading…
Reference in New Issue
Block a user