[gnome-shell] shell-app: Fade the app icon on the left in RTL layouts



commit 1cc5bb5ec4778d366d74340d60188b4910c6f8b7
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Fri Jul 19 15:39:48 2013 -0400

    shell-app: Fade the app icon on the left in RTL layouts
    
    The point of fading the icon is to make the text displayed over the
    icon more legible. In RTL layouts, the text is displayed on the left
    of the icon, so fading the right-hand-side of the icon doesn't work
    well.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=704583

 js/ui/panel.js  |   13 +++++++------
 src/shell-app.c |   32 +++++++++++++++++++++++++-------
 src/shell-app.h |    2 +-
 3 files changed, 33 insertions(+), 14 deletions(-)
---
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 1eca2b3..55c9919 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -297,13 +297,16 @@ const AppMenuButton = new Lang.Class({
         this._updateIconBoxClip();
     },
 
+    _syncIcon: function() {
+        let icon = this._targetApp.get_faded_icon(2 * PANEL_ICON_SIZE, this._iconBox.text_direction);
+        this._iconBox.set_child(icon);
+    },
+
     _onIconThemeChanged: function() {
         if (this._iconBox.child == null)
             return;
 
-        this._iconBox.child.destroy();
-        let icon = this._targetApp.get_faded_icon(2 * PANEL_ICON_SIZE);
-        this._iconBox.set_child(icon);
+        this._syncIcon();
     },
 
     _updateIconBoxClip: function() {
@@ -526,12 +529,10 @@ const AppMenuButton = new Lang.Class({
         }
 
         this._targetApp = targetApp;
-        let icon = targetApp.get_faded_icon(2 * PANEL_ICON_SIZE);
-
         this._label.setText(targetApp.get_name());
         this.setName(targetApp.get_name());
 
-        this._iconBox.set_child(icon);
+        this._syncIcon();
         this._iconBox.show();
 
         if (targetApp.get_state() == Shell.AppState.STARTING ||
diff --git a/src/shell-app.c b/src/shell-app.c
index 6afa56a..9fa6592 100644
--- a/src/shell-app.c
+++ b/src/shell-app.c
@@ -214,6 +214,7 @@ shell_app_create_icon_texture (ShellApp   *app,
 typedef struct {
   ShellApp *app;
   int size;
+  ClutterTextDirection direction;
 } CreateFadedIconData;
 
 static CoglHandle
@@ -231,7 +232,7 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
   guint8 n_channels;
   gboolean have_alpha;
   gint fade_start;
-  gint fade_range;
+  gint fade_end;
   guint i, j;
   guint pixbuf_byte_size;
   guint8 *orig_pixels;
@@ -283,14 +284,26 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
   pixels = g_malloc0 (rowstride * height);
   memcpy (pixels, orig_pixels, pixbuf_byte_size);
 
-  fade_start = width / 2;
-  fade_range = width - fade_start;
-  for (i = fade_start; i < width; i++)
+  /* fade on the right side for LTR, left side for RTL */
+  if (data->direction == CLUTTER_TEXT_DIRECTION_LTR)
+    {
+      fade_start = width / 2;
+      fade_end = width;
+    }
+  else
+    {
+      fade_start = 0;
+      fade_end = width / 2;
+    }
+
+  for (i = fade_start; i < fade_end; i++)
     {
       for (j = 0; j < height; j++)
         {
           guchar *pixel = &pixels[j * rowstride + i * n_channels];
-          float fade = 1.0 - ((float) i - fade_start) / fade_range;
+          float fade = ((float) i - fade_start) / (fade_end - fade_start);
+          if (data->direction == CLUTTER_TEXT_DIRECTION_LTR)
+            fade = 1.0 - fade;
           pixel[0] = 0.5 + pixel[0] * fade;
           pixel[1] = 0.5 + pixel[1] * fade;
           pixel[2] = 0.5 + pixel[2] * fade;
@@ -316,13 +329,14 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
  * shell_app_get_faded_icon:
  * @app: A #ShellApp
  * @size: Size in pixels
+ * @direction: Whether to fade on the left or right
  *
  * Return an actor with a horizontally faded look.
  *
  * Return value: (transfer none): A floating #ClutterActor, or %NULL if no icon
  */
 ClutterActor *
-shell_app_get_faded_icon (ShellApp *app, int size)
+shell_app_get_faded_icon (ShellApp *app, int size, ClutterTextDirection direction)
 {
   CoglHandle texture;
   ClutterActor *result;
@@ -338,9 +352,13 @@ shell_app_get_faded_icon (ShellApp *app, int size)
 
   /* Use icon: prefix so that we get evicted from the cache on
    * icon theme changes. */
-  cache_key = g_strdup_printf ("icon:%s,size=%d,faded", shell_app_get_id (app), size);
+  cache_key = g_strdup_printf ("icon:%s,size=%d,faded-%s",
+                               shell_app_get_id (app),
+                               size,
+                               direction == CLUTTER_TEXT_DIRECTION_RTL ? "rtl" : "ltr");
   data.app = app;
   data.size = size;
+  data.direction = direction;
   texture = st_texture_cache_load (st_texture_cache_get_default (),
                                    cache_key,
                                    ST_TEXTURE_CACHE_POLICY_FOREVER,
diff --git a/src/shell-app.h b/src/shell-app.h
index 3009d8f..4377914 100644
--- a/src/shell-app.h
+++ b/src/shell-app.h
@@ -43,7 +43,7 @@ GMenuTreeEntry *shell_app_get_tree_entry (ShellApp *app);
 GDesktopAppInfo *shell_app_get_app_info (ShellApp *app);
 
 ClutterActor *shell_app_create_icon_texture (ShellApp *app, int size);
-ClutterActor *shell_app_get_faded_icon (ShellApp *app, int size);
+ClutterActor *shell_app_get_faded_icon (ShellApp *app, int size, ClutterTextDirection direction);
 const char *shell_app_get_name (ShellApp *app);
 const char *shell_app_get_description (ShellApp *app);
 gboolean shell_app_is_window_backed (ShellApp *app);


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