[gnome-shell] environment: Handle reversed transition with 0 duration
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] environment: Handle reversed transition with 0 duration
- Date: Tue, 25 Feb 2020 18:14:24 +0000 (UTC)
commit 2bb8e1be9b5bda7368321d3625cb954c7047bc09
Author: Florian Müllner <fmuellner gnome org>
Date: Sat Feb 22 16:35:32 2020 +0100
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
js/ui/environment.js | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/js/ui/environment.js b/js/ui/environment.js
index 31440ea2a6..ba378e7d11 100644
--- a/js/ui/environment.js
+++ b/js/ui/environment.js
@@ -111,6 +111,11 @@ function _easeActor(actor, params) {
autoReverse = 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)
actor.set_easing_mode(params.mode);
delete params.mode;
@@ -122,7 +127,8 @@ function _easeActor(actor, params) {
let animatedProps = Object.keys(params).map(p => p.replace('_', '-', 'g'));
animatedProps.forEach(p => actor.remove_transition(p));
- actor.set(params);
+ if (actor.get_easing_duration() > 0 || !isReversed)
+ actor.set(params);
actor.restore_easing_state();
let transition = animatedProps.map(p => actor.get_transition(p))
@@ -161,6 +167,11 @@ function _easeActorProperty(actor, propName, target, params) {
autoReverse = 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
// should_skip_implicit_transition()
if (actor instanceof Clutter.Actor && !actor.mapped)
@@ -174,7 +185,9 @@ function _easeActorProperty(actor, propName, target, params) {
if (duration == 0) {
let [obj, prop] = _getPropertyTarget(actor, propName);
- obj[prop] = target;
+
+ if (!isReversed)
+ obj[prop] = target;
Meta.disable_unredirect_for_display(global.display);
callback(true);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]