allView: Scale in when moving icons from folders

App icons inside folders are already animated when the folder is
opened, but moving an app icon from a folder doesn't, making the
transition abrupt.

Fortunately, it's easy to detect icons that were previously hidden
but are not anymore.

Add an animation to these icons when showing.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/664
This commit is contained in:
Georges Basile Stavracas Neto 2019-06-29 14:09:32 -03:00
parent 54a2773046
commit fd19906c64
No known key found for this signature in database
GPG Key ID: 886C17EE170D1385

View File

@ -38,6 +38,9 @@ var VIEWS_SWITCH_ANIMATION_DELAY = 100;
var PAGE_SWITCH_TIME = 300;
var APP_ICON_SCALE_IN_TIME = 500;
var APP_ICON_SCALE_IN_DELAY = 700;
const SWITCHEROO_BUS_NAME = 'net.hadess.SwitcherooControl';
const SWITCHEROO_OBJECT_PATH = '/net/hadess/SwitcherooControl';
@ -358,6 +361,8 @@ var AllView = class AllView extends BaseAppView {
}
_refilterApps() {
let filteredApps = this._allItems.filter(icon => !icon.actor.visible);
this._allItems.forEach(icon => {
if (icon instanceof AppIcon)
icon.actor.visible = true;
@ -370,6 +375,12 @@ var AllView = class AllView extends BaseAppView {
appIcon.actor.visible = false;
});
});
// Scale in app icons that weren't visible, but now are
filteredApps.filter(icon => icon.actor.visible).forEach(icon => {
if (icon instanceof AppIcon)
icon.scaleIn();
});
}
getAppInfos() {
@ -1711,6 +1722,7 @@ var AppIcon = class AppIcon {
this.name = app.get_name();
this.actor = new St.Button({ style_class: 'app-well-app',
pivot_point: new Clutter.Point({ x: 0.5, y: 0.5 }),
reactive: true,
button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO,
can_focus: true,
@ -1927,6 +1939,19 @@ var AppIcon = class AppIcon {
this.icon.animateZoomOut();
}
scaleIn() {
this.actor.scale_x = 0;
this.actor.scale_y = 0;
this.actor.ease({
scale_x: 1,
scale_y: 1,
time: APP_ICON_SCALE_IN_TIME,
delay: APP_ICON_SCALE_IN_DELAY,
mode: Clutter.AnimationMode.EASE_OUT_QUINT
});
}
shellWorkspaceLaunch(params) {
params = Params.parse(params, { workspace: -1,
timestamp: 0 });