environment: Handle reversed transition with 0 duration
If a transition is reversed, the final property values will be the same as before the transition. However this currently only works correctly when we actually use a transition; to fix this with a duration of 0, simply skip the set() call when the transition is reversed. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1042
This commit is contained in:
parent
967a6ae44d
commit
2bb8e1be9b
@ -111,6 +111,11 @@ function _easeActor(actor, params) {
|
|||||||
autoReverse = params.autoReverse;
|
autoReverse = params.autoReverse;
|
||||||
delete params.autoReverse;
|
delete params.autoReverse;
|
||||||
|
|
||||||
|
// repeatCount doesn't include the initial iteration
|
||||||
|
const numIterations = repeatCount + 1;
|
||||||
|
// whether the transition should finish where it started
|
||||||
|
const isReversed = autoReverse && numIterations % 2 === 0;
|
||||||
|
|
||||||
if (params.mode != undefined)
|
if (params.mode != undefined)
|
||||||
actor.set_easing_mode(params.mode);
|
actor.set_easing_mode(params.mode);
|
||||||
delete params.mode;
|
delete params.mode;
|
||||||
@ -122,7 +127,8 @@ function _easeActor(actor, params) {
|
|||||||
let animatedProps = Object.keys(params).map(p => p.replace('_', '-', 'g'));
|
let animatedProps = Object.keys(params).map(p => p.replace('_', '-', 'g'));
|
||||||
animatedProps.forEach(p => actor.remove_transition(p));
|
animatedProps.forEach(p => actor.remove_transition(p));
|
||||||
|
|
||||||
actor.set(params);
|
if (actor.get_easing_duration() > 0 || !isReversed)
|
||||||
|
actor.set(params);
|
||||||
actor.restore_easing_state();
|
actor.restore_easing_state();
|
||||||
|
|
||||||
let transition = animatedProps.map(p => actor.get_transition(p))
|
let transition = animatedProps.map(p => actor.get_transition(p))
|
||||||
@ -161,6 +167,11 @@ function _easeActorProperty(actor, propName, target, params) {
|
|||||||
autoReverse = params.autoReverse;
|
autoReverse = params.autoReverse;
|
||||||
delete params.autoReverse;
|
delete params.autoReverse;
|
||||||
|
|
||||||
|
// repeatCount doesn't include the initial iteration
|
||||||
|
const numIterations = repeatCount + 1;
|
||||||
|
// whether the transition should finish where it started
|
||||||
|
const isReversed = autoReverse && numIterations % 2 === 0;
|
||||||
|
|
||||||
// Copy Clutter's behavior for implicit animations, see
|
// Copy Clutter's behavior for implicit animations, see
|
||||||
// should_skip_implicit_transition()
|
// should_skip_implicit_transition()
|
||||||
if (actor instanceof Clutter.Actor && !actor.mapped)
|
if (actor instanceof Clutter.Actor && !actor.mapped)
|
||||||
@ -174,7 +185,9 @@ function _easeActorProperty(actor, propName, target, params) {
|
|||||||
|
|
||||||
if (duration == 0) {
|
if (duration == 0) {
|
||||||
let [obj, prop] = _getPropertyTarget(actor, propName);
|
let [obj, prop] = _getPropertyTarget(actor, propName);
|
||||||
obj[prop] = target;
|
|
||||||
|
if (!isReversed)
|
||||||
|
obj[prop] = target;
|
||||||
|
|
||||||
Meta.disable_unredirect_for_display(global.display);
|
Meta.disable_unredirect_for_display(global.display);
|
||||||
callback(true);
|
callback(true);
|
||||||
|
Loading…
Reference in New Issue
Block a user