]> Dogcows Code - chaz/openbox/commitdiff
make iconic windows have 50% opacity in the alt-tab box
authorDana Jansens <danakj@orodu.net>
Mon, 28 May 2007 02:56:35 +0000 (02:56 +0000)
committerDana Jansens <danakj@orodu.net>
Mon, 28 May 2007 02:56:35 +0000 (02:56 +0000)
openbox/focus_cycle_popup.c

index e282465e4d44295d56244a1e5da2f8b3855cf9b2..13f12da514fac6b3a60eea04472d7e145ec3357b 100644 (file)
@@ -405,6 +405,7 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c)
             const gint row = i / icons_per_row; /* starting from 0 */
             const gint col = i % icons_per_row; /* starting from 0 */
             gint innerx, innery;
+            RrPixel32 *icon_data;
 
             /* find the dimensions of the icon inside it */
             innerx = icons_center_x + l + (col * ICON_SIZE);
@@ -420,12 +421,33 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c)
             icon = client_icon(target->client, innerw, innerh);
             p->a_icon->texture[0].data.rgba.width = icon->width;
             p->a_icon->texture[0].data.rgba.height = icon->height;
-            p->a_icon->texture[0].data.rgba.data = icon->data;
+            if (target->client->iconic) {
+                /* fade iconic windows */
+                gint i;
+                RrPixel32 *d, *s;
+
+                icon_data = g_new(RrPixel32, icon->width * icon->height);
+
+                s = icon->data;
+                d = icon_data;
+                for (i = 0; i < icon->width * icon->height; ++i, ++d, ++s) {
+                     /* 50% opacity */
+                    gint a = ((*s >> RrDefaultAlphaOffset) & 0xff);
+                    *d = *s - (a << RrDefaultAlphaOffset) +
+                        ((a>>1) << RrDefaultAlphaOffset);
+                }
+                    
+            } else
+                icon_data = icon->data;
+            p->a_icon->texture[0].data.rgba.data = icon_data;
 
             /* draw the icon */
             p->a_icon->surface.parentx = innerx;
             p->a_icon->surface.parenty = innery;
             RrPaint(p->a_icon, target->win, innerw, innerh);
+
+            if (target->client->iconic)
+                g_free(icon_data);
         }
     }
 
This page took 0.023941 seconds and 4 git commands to generate.