Merge branch 'wip/abono/cursor-animation' into 'main'

locatePointer: Mark the animation as required

See merge request GNOME/gnome-shell!2986
This commit is contained in:
Alessandro Bono 2024-06-24 23:00:52 +00:00
commit 51bef9352c
4 changed files with 24 additions and 7 deletions

View file

@ -13,14 +13,15 @@ const N_WIGGLES = 3;
* adjustAnimationTime:
*
* @param {number} msecs - time in milliseconds
* @param {number} required - whether the animation is required
*
* Adjust `msecs` to account for St's enable-animations
* and slow-down-factor settings
*/
export function adjustAnimationTime(msecs) {
export function adjustAnimationTime(msecs, required = false) {
const settings = St.Settings.get();
if (!settings.enable_animations)
if (!settings.enable_animations && !required)
return 0;
return settings.slow_down_factor * msecs;
}

View file

@ -92,8 +92,15 @@ function _getPropertyTarget(actor, propName) {
function _easeActor(actor, params) {
actor.save_easing_state();
if (params.duration !== undefined)
actor.set_easing_duration(params.duration);
let required = false;
if (params.required !== undefined)
required = params.required;
delete params.required;
if (params.duration !== undefined) {
params.duration = adjustAnimationTime(params.duration, required);
origSetEasingDuration.call(actor, params.duration);
}
delete params.duration;
if (params.delay !== undefined)
@ -162,8 +169,13 @@ function _easeActorProperty(actor, propName, target, params) {
params.progress_mode = params.mode;
delete params.mode;
let required = false;
if (params.required !== undefined)
required = params.required;
delete params.required;
if (params.duration)
params.duration = adjustAnimationTime(params.duration);
params.duration = adjustAnimationTime(params.duration, required);
let duration = Math.floor(params.duration || 0);
let repeatCount = 0;

View file

@ -20,7 +20,7 @@ export class LocatePointer {
return;
if (enabled) {
this._ripples = new Ripples.Ripples(0.5, 0.5, 'ripple-pointer-location');
this._ripples = new Ripples.Ripples(0.5, 0.5, 'ripple-pointer-location', true);
this._ripples.addTo(Main.uiGroup);
} else {
this._ripples.destroy();

View file

@ -5,12 +5,13 @@ import St from 'gi://St';
// Shamelessly copied from the layout "hotcorner" ripples implementation
export class Ripples {
constructor(px, py, styleClass) {
constructor(px, py, styleClass, required = false) {
this._x = 0;
this._y = 0;
this._px = px;
this._py = py;
this._required = required;
this._ripple1 = new St.BoxLayout({
style_class: styleClass,
@ -60,11 +61,13 @@ export class Ripples {
ripple.opacity = 255 * Math.sqrt(startOpacity);
ripple.scale_x = ripple.scale_y = startScale;
ripple.set_translation(-this._px * ripple.width, -this._py * ripple.height, 0.0);
const required = this._required;
ripple.ease({
opacity: 0,
delay,
duration,
required,
mode: Clutter.AnimationMode.EASE_IN_QUAD,
});
ripple.ease({
@ -72,6 +75,7 @@ export class Ripples {
scale_y: finalScale,
delay,
duration,
required,
mode: Clutter.AnimationMode.LINEAR,
onComplete: () => (ripple.visible = false),
});