mirror of
https://github.com/edu4rdshl/gnome-shell.git
synced 2026-07-17 23:24:51 +00:00
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:
commit
51bef9352c
4 changed files with 24 additions and 7 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue