[gnome-shell/gbsneto/icon-grid-part2: 9/10] allView: Scale in when moving icons from folders



commit fd19906c640f206312e8946d877fb844670d2bab
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sat Jun 29 14:09:32 2019 -0300

    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

 js/ui/appDisplay.js | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index e283125d69..f6bab8bbb4 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -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 });


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]