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



commit c1d107a682a01b3cf71b5d3fb85c6ed17bfc5009
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 0e17cdc..a6f73a5 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -371,13 +371,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() {
@@ -595,12 +598,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 1f8d6f0..9390bcf 100644
--- a/src/shell-app.c
+++ b/src/shell-app.c
@@ -210,6 +210,7 @@ shell_app_create_icon_texture (ShellApp   *app,
 typedef struct {
   ShellApp *app;
   int size;
+  ClutterTextDirection direction;
 } CreateFadedIconData;
 
 static CoglHandle
@@ -227,7 +228,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;
@@ -279,14 +280,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;
@@ -312,13 +325,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;
@@ -334,9 +348,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 6bf707a..8a07e01 100644
--- a/src/shell-app.h
+++ b/src/shell-app.h
@@ -42,7 +42,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]