[gnome-shell] [baseIcon] Allow setting the icon size from code



commit 01f4dc68b84ccf626d1088fd5f3db1081bcf952b
Author: Florian Müllner <fmuellner gnome org>
Date:   Mon Aug 30 14:59:45 2010 +0200

    [baseIcon] Allow setting the icon size from code
    
    The current design features a sidebar where the icon size shrinks
    automatically to fit more items. Add a setSizeManually parameter
    to BaseIcon, which disables sizes read from CSS and allows to use
    BaseIcon.setIconSize() to support this.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=625887

 js/ui/iconGrid.js |   41 ++++++++++++++++++++++++++++-------------
 1 files changed, 28 insertions(+), 13 deletions(-)
---
diff --git a/js/ui/iconGrid.js b/js/ui/iconGrid.js
index e728caf..b2b0193 100644
--- a/js/ui/iconGrid.js
+++ b/js/ui/iconGrid.js
@@ -15,7 +15,9 @@ function BaseIcon(label, createIcon) {
 }
 
 BaseIcon.prototype = {
-    _init : function(label, createIcon) {
+    _init : function(label, params) {
+        params = Params.parse(params, { createIcon: null,
+                                        setSizeManually: false });
         this.actor = new St.Bin({ style_class: 'overview-icon',
                                   x_fill: true,
                                   y_fill: true });
@@ -35,8 +37,9 @@ BaseIcon.prototype = {
         this._name = new St.Label({ text: label });
         box.add_actor(this._name);
 
-        if (createIcon)
-            this.createIcon = createIcon;
+        if (params.createIcon)
+            this.createIcon = params.createIcon;
+        this._setSizeManually = params.setSizeManually;
 
         this.icon = this.createIcon(this.iconSize);
         this._iconBin.set_child(this.icon);
@@ -48,17 +51,29 @@ BaseIcon.prototype = {
         throw new Error('no implementation of createIcon in ' + this);
     },
 
+    setIconSize: function(size) {
+        if (!this._setSizeManually)
+            throw new Error('setSizeManually has to be set to use setIconsize');
+
+        this._setIconSize(size);
+    },
+
+    _setIconSize: function(size) {
+        if (size == this.iconSize)
+            return;
+
+        this.icon.destroy();
+        this.iconSize = size;
+        this.icon = this.createIcon(this.iconSize);
+        this._iconBin.child = this.icon;
+    },
+
     _onStyleChanged: function() {
-        let node = this.actor.get_theme_node();
-        let [success, len] = node.get_length('icon-size', false);
-        if (success) {
-            if (len == this.iconSize)
-                return;
-
-            this.icon.destroy();
-            this.iconSize = len;
-            this.icon = this.createIcon(this.iconSize);
-            this._iconBin.set_child(this.icon);
+        if (!this._setSizeManually) {
+            let node = this.actor.get_theme_node();
+            let [success, len] = node.get_length('icon-size', false);
+            if (success)
+                this._setIconSize(len);
         }
     }
 };



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