pointerA11yTimeout: Add a zoom out+fade animation on success

We currently don't indicate success of the pie timer at all, let's do
this by animating the circle's scale and fading it out at the same time.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/688
This commit is contained in:
Jonas Dreßler 2019-08-22 10:25:19 +02:00 committed by Olivier Fourdan
parent 20fc4b4490
commit 5d0c403f1d

View File

@ -3,6 +3,8 @@ const { Clutter, GLib, GObject, Meta, St } = imports.gi;
const Main = imports.ui.main; const Main = imports.ui.main;
const Cairo = imports.cairo; const Cairo = imports.cairo;
const SUCCESS_ZOOM_OUT_DURATION = 150;
var PieTimer = GObject.registerClass({ var PieTimer = GObject.registerClass({
Properties: { Properties: {
'angle': GObject.ParamSpec.double( 'angle': GObject.ParamSpec.double(
@ -19,6 +21,8 @@ var PieTimer = GObject.registerClass({
can_focus: false, can_focus: false,
reactive: false reactive: false
}); });
this.set_pivot_point(0.5, 0.5);
} }
get angle() { get angle() {
@ -77,6 +81,8 @@ var PieTimer = GObject.registerClass({
this.opacity = 0; this.opacity = 0;
this.x = x - this.width / 2; this.x = x - this.width / 2;
this.y = y - this.height / 2; this.y = y - this.height / 2;
this.scale_y = 1;
this.scale_x = 1;
this._angle = 0; this._angle = 0;
this.show(); this.show();
@ -91,7 +97,18 @@ var PieTimer = GObject.registerClass({
this.ease_property('angle', 2 * Math.PI, { this.ease_property('angle', 2 * Math.PI, {
duration, duration,
mode: Clutter.AnimationMode.LINEAR, mode: Clutter.AnimationMode.LINEAR,
onComplete: () => this.stop() onComplete: this._onTransitionComplete.bind(this)
});
}
_onTransitionComplete() {
this.ease({
scale_x: 2,
scale_y: 2,
opacity: 0,
duration: SUCCESS_ZOOM_OUT_DURATION,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onStopped: () => this.hide()
}); });
} }