[gnome-shell/gbsneto/quick-settings-arrow] quickSettings: Rotate menu arrows




commit c742482371a8d60b95cfadfb8d5d13b5a96ac584
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Mon Aug 22 18:46:20 2022 -0300

    quickSettings: Rotate menu arrows
    
    Static arrows representing menus are inconsistent with the rest of
    the platform, where we rotate arrows to represent that the menu is
    open. Make quick settings arrows do the same.

 js/ui/quickSettings.js | 32 +++++++++++++++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)
---
diff --git a/js/ui/quickSettings.js b/js/ui/quickSettings.js
index ad9033c795..6983fb55f5 100644
--- a/js/ui/quickSettings.js
+++ b/js/ui/quickSettings.js
@@ -115,6 +115,7 @@ var QuickMenuToggle = GObject.registerClass({
             child: new St.Icon({
                 style_class: 'quick-toggle-arrow',
                 icon_name: 'go-next-symbolic',
+                pivot_point: new Graphene.Point({x: 0.5, y: 0.5}),
             }),
             style_class: 'quick-toggle-arrow-button',
             x_expand: false,
@@ -133,6 +134,19 @@ var QuickMenuToggle = GObject.registerClass({
             if (this.menuEnabled)
                 this.menu.open();
         });
+
+        this.menu.connect('open-state-changed', (popup, isOpen) => {
+            if (!this.menuEnabled)
+                return;
+
+            const ltr = this.text_direction !== Clutter.TextDirection.RTL;
+            const angle = ltr ? 90 : -90;
+            this._menuButton.child.ease({
+                rotationAngleZ: isOpen ? angle : 0,
+                delay: isOpen ? 0 : POPUP_ANIMATION_TIME / 2,
+                duration: POPUP_ANIMATION_TIME / 2,
+            });
+        });
     }
 });
 
@@ -200,7 +214,10 @@ var QuickSlider = GObject.registerClass({
         sliderBin.connect('event', (bin, event) => this.slider.event(event, false));
 
         this._menuButton = new St.Button({
-            child: new St.Icon({icon_name: 'go-next-symbolic'}),
+            child: new St.Icon({
+                icon_name: 'go-next-symbolic',
+                pivot_point: new Graphene.Point({x: 0.5, y: 0.5}),
+            }),
             style_class: 'icon-button',
             can_focus: true,
             x_expand: false,
@@ -216,6 +233,19 @@ var QuickSlider = GObject.registerClass({
             if (this.menuEnabled)
                 this.menu.open();
         });
+
+        this.menu.connect('open-state-changed', (popup, isOpen) => {
+            if (!this.menuEnabled)
+                return;
+
+            const ltr = this.text_direction !== Clutter.TextDirection.RTL;
+            const angle = ltr ? 90 : -90;
+            this._menuButton.child.ease({
+                rotationAngleZ: isOpen ? angle : 0,
+                delay: isOpen ? 0 : POPUP_ANIMATION_TIME / 2,
+                duration: POPUP_ANIMATION_TIME / 2,
+            });
+        });
     }
 });
 


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