]> Dogcows Code - chaz/openbox/blobdiff - openbox/framerender.c
Merge branch 'backport'
[chaz/openbox] / openbox / framerender.c
index d841267ebfcfc73bfbcafeddb97a2ad61f8e2996..af6be016565332c88aac3a8f7a424db4321a4a83 100644 (file)
@@ -34,14 +34,39 @@ static void framerender_close(ObFrame *self, RrAppearance *a);
 
 void framerender_frame(ObFrame *self)
 {
+    if (frame_iconify_animating(self))
+        return; /* delay redrawing until the animation is done */
+    if (!self->need_render)
+        return;
+    if (!self->visible)
+        return;
+    self->need_render = FALSE;
+
     {
         gulong px;
 
         px = (self->focused ?
               RrColorPixel(ob_rr_theme->cb_focused_color) :
               RrColorPixel(ob_rr_theme->cb_unfocused_color));
-        XSetWindowBackground(ob_display, self->inner, px);
-        XClearWindow(ob_display, self->inner);
+
+        XSetWindowBackground(ob_display, self->backback, px);
+        XClearWindow(ob_display, self->backback);
+        XSetWindowBackground(ob_display, self->innerleft, px);
+        XClearWindow(ob_display, self->innerleft);
+        XSetWindowBackground(ob_display, self->innertop, px);
+        XClearWindow(ob_display, self->innertop);
+        XSetWindowBackground(ob_display, self->innerright, px);
+        XClearWindow(ob_display, self->innerright);
+        XSetWindowBackground(ob_display, self->innerbottom, px);
+        XClearWindow(ob_display, self->innerbottom);
+        XSetWindowBackground(ob_display, self->innerbll, px);
+        XClearWindow(ob_display, self->innerbll);
+        XSetWindowBackground(ob_display, self->innerbrr, px);
+        XClearWindow(ob_display, self->innerbrr);
+        XSetWindowBackground(ob_display, self->innerblb, px);
+        XClearWindow(ob_display, self->innerblb);
+        XSetWindowBackground(ob_display, self->innerbrb, px);
+        XClearWindow(ob_display, self->innerbrb);
 
         px = (self->focused ?
               RrColorPixel(ob_rr_theme->frame_focused_border_color) :
@@ -62,8 +87,6 @@ void framerender_frame(ObFrame *self)
         XClearWindow(ob_display, self->titletopright);
         XSetWindowBackground(ob_display, self->titleright, px);
         XClearWindow(ob_display, self->titleright);
-        XSetWindowBackground(ob_display, self->titlebottom, px);
-        XClearWindow(ob_display, self->titlebottom);
 
         XSetWindowBackground(ob_display, self->handleleft, px);
         XClearWindow(ob_display, self->handleleft);
@@ -87,10 +110,19 @@ void framerender_frame(ObFrame *self)
         XClearWindow(ob_display, self->rgriptop);
         XSetWindowBackground(ob_display, self->rgripbottom, px);
         XClearWindow(ob_display, self->rgripbottom);
+
+        /* don't use the separator color for shaded windows */
+        if (!self->client->shaded)
+            px = (self->focused ?
+                  RrColorPixel(ob_rr_theme->title_separator_focused_color) :
+                  RrColorPixel(ob_rr_theme->title_separator_unfocused_color));
+
+        XSetWindowBackground(ob_display, self->titlebottom, px);
+        XClearWindow(ob_display, self->titlebottom);
     }
 
     if (self->decorations & OB_FRAME_DECOR_TITLEBAR) {
-        RrAppearance *t, *l, *m, *n, *i, *d, *s, *c;
+        RrAppearance *t, *l, *m, *n, *i, *d, *s, *c, *clear;
         if (self->focused) {
 
             t = self->a_focused_title;
@@ -102,12 +134,12 @@ void framerender_frame(ObFrame *self)
                   (self->max_press ?
                    ob_rr_theme->a_toggled_focused_pressed_max :
                    (self->max_hover ?
-                    ob_rr_theme->a_toggled_hover_focused_max : 
+                    ob_rr_theme->a_toggled_hover_focused_max :
                     ob_rr_theme->a_toggled_focused_unpressed_max)) :
                   (self->max_press ?
                    ob_rr_theme->a_focused_pressed_max :
                    (self->max_hover ?
-                    ob_rr_theme->a_hover_focused_max : 
+                    ob_rr_theme->a_hover_focused_max :
                     ob_rr_theme->a_focused_unpressed_max))));
             n = self->a_icon;
             i = (!(self->decorations & OB_FRAME_DECOR_ICONIFY) ?
@@ -115,7 +147,7 @@ void framerender_frame(ObFrame *self)
                  (self->iconify_press ?
                   ob_rr_theme->a_focused_pressed_iconify :
                   (self->iconify_hover ?
-                   ob_rr_theme->a_hover_focused_iconify : 
+                   ob_rr_theme->a_hover_focused_iconify :
                    ob_rr_theme->a_focused_unpressed_iconify)));
             d = (!(self->decorations & OB_FRAME_DECOR_ALLDESKTOPS) ?
                  ob_rr_theme->a_disabled_focused_desk :
@@ -123,12 +155,12 @@ void framerender_frame(ObFrame *self)
                   (self->desk_press ?
                    ob_rr_theme->a_toggled_focused_pressed_desk :
                    (self->desk_hover ?
-                    ob_rr_theme->a_toggled_hover_focused_desk : 
+                    ob_rr_theme->a_toggled_hover_focused_desk :
                     ob_rr_theme->a_toggled_focused_unpressed_desk)) :
                   (self->desk_press ?
                    ob_rr_theme->a_focused_pressed_desk :
                    (self->desk_hover ?
-                    ob_rr_theme->a_hover_focused_desk : 
+                    ob_rr_theme->a_hover_focused_desk :
                     ob_rr_theme->a_focused_unpressed_desk))));
             s = (!(self->decorations & OB_FRAME_DECOR_SHADE) ?
                  ob_rr_theme->a_disabled_focused_shade :
@@ -136,19 +168,19 @@ void framerender_frame(ObFrame *self)
                   (self->shade_press ?
                    ob_rr_theme->a_toggled_focused_pressed_shade :
                    (self->shade_hover ?
-                    ob_rr_theme->a_toggled_hover_focused_shade : 
+                    ob_rr_theme->a_toggled_hover_focused_shade :
                     ob_rr_theme->a_toggled_focused_unpressed_shade)) :
                   (self->shade_press ?
                    ob_rr_theme->a_focused_pressed_shade :
                    (self->shade_hover ?
-                    ob_rr_theme->a_hover_focused_shade : 
+                    ob_rr_theme->a_hover_focused_shade :
                     ob_rr_theme->a_focused_unpressed_shade))));
             c = (!(self->decorations & OB_FRAME_DECOR_CLOSE) ?
                  ob_rr_theme->a_disabled_focused_close :
                  (self->close_press ?
                   ob_rr_theme->a_focused_pressed_close :
                   (self->close_hover ?
-                   ob_rr_theme->a_hover_focused_close : 
+                   ob_rr_theme->a_hover_focused_close :
                    ob_rr_theme->a_focused_unpressed_close)));
         } else {
             t = self->a_unfocused_title;
@@ -159,12 +191,12 @@ void framerender_frame(ObFrame *self)
                   (self->max_press ?
                    ob_rr_theme->a_toggled_unfocused_pressed_max :
                    (self->max_hover ?
-                    ob_rr_theme->a_toggled_hover_unfocused_max : 
+                    ob_rr_theme->a_toggled_hover_unfocused_max :
                     ob_rr_theme->a_toggled_unfocused_unpressed_max)) :
                   (self->max_press ?
                    ob_rr_theme->a_unfocused_pressed_max :
                    (self->max_hover ?
-                    ob_rr_theme->a_hover_unfocused_max : 
+                    ob_rr_theme->a_hover_unfocused_max :
                     ob_rr_theme->a_unfocused_unpressed_max))));
             n = self->a_icon;
             i = (!(self->decorations & OB_FRAME_DECOR_ICONIFY) ?
@@ -172,7 +204,7 @@ void framerender_frame(ObFrame *self)
                  (self->iconify_press ?
                   ob_rr_theme->a_unfocused_pressed_iconify :
                   (self->iconify_hover ?
-                   ob_rr_theme->a_hover_unfocused_iconify : 
+                   ob_rr_theme->a_hover_unfocused_iconify :
                    ob_rr_theme->a_unfocused_unpressed_iconify)));
             d = (!(self->decorations & OB_FRAME_DECOR_ALLDESKTOPS) ?
                  ob_rr_theme->a_disabled_unfocused_desk :
@@ -180,12 +212,12 @@ void framerender_frame(ObFrame *self)
                   (self->desk_press ?
                    ob_rr_theme->a_toggled_unfocused_pressed_desk :
                    (self->desk_hover ?
-                    ob_rr_theme->a_toggled_hover_unfocused_desk : 
+                    ob_rr_theme->a_toggled_hover_unfocused_desk :
                     ob_rr_theme->a_toggled_unfocused_unpressed_desk)) :
                   (self->desk_press ?
                    ob_rr_theme->a_unfocused_pressed_desk :
                    (self->desk_hover ?
-                    ob_rr_theme->a_hover_unfocused_desk : 
+                    ob_rr_theme->a_hover_unfocused_desk :
                     ob_rr_theme->a_unfocused_unpressed_desk))));
             s = (!(self->decorations & OB_FRAME_DECOR_SHADE) ?
                  ob_rr_theme->a_disabled_unfocused_shade :
@@ -193,54 +225,53 @@ void framerender_frame(ObFrame *self)
                   (self->shade_press ?
                    ob_rr_theme->a_toggled_unfocused_pressed_shade :
                    (self->shade_hover ?
-                    ob_rr_theme->a_toggled_hover_unfocused_shade : 
+                    ob_rr_theme->a_toggled_hover_unfocused_shade :
                     ob_rr_theme->a_toggled_unfocused_unpressed_shade)) :
                   (self->shade_press ?
                    ob_rr_theme->a_unfocused_pressed_shade :
                    (self->shade_hover ?
-                    ob_rr_theme->a_hover_unfocused_shade : 
+                    ob_rr_theme->a_hover_unfocused_shade :
                     ob_rr_theme->a_unfocused_unpressed_shade))));
             c = (!(self->decorations & OB_FRAME_DECOR_CLOSE) ?
                  ob_rr_theme->a_disabled_unfocused_close :
                  (self->close_press ?
                   ob_rr_theme->a_unfocused_pressed_close :
                   (self->close_hover ?
-                   ob_rr_theme->a_hover_unfocused_close : 
+                   ob_rr_theme->a_hover_unfocused_close :
                    ob_rr_theme->a_unfocused_unpressed_close)));
         }
+        clear = ob_rr_theme->a_clear;
 
         RrPaint(t, self->title, self->width, ob_rr_theme->title_height);
 
-        ob_rr_theme->a_clear->surface.parent = t;
-        ob_rr_theme->a_clear->surface.parenty = 0;
+        clear->surface.parent = t;
+        clear->surface.parenty = 0;
+
+        clear->surface.parentx = ob_rr_theme->grip_width;
 
-        ob_rr_theme->a_clear->surface.parentx = ob_rr_theme->grip_width +
-            self->bwidth;
-        RrPaint(ob_rr_theme->a_clear, self->topresize,
+        RrPaint(clear, self->topresize,
                 self->width - ob_rr_theme->grip_width * 2,
                 ob_rr_theme->paddingy + 1);
 
-        ob_rr_theme->a_clear->surface.parentx = 0;
+        clear->surface.parentx = 0;
 
         if (ob_rr_theme->grip_width > 0)
-            RrPaint(ob_rr_theme->a_clear, self->tltresize,
+            RrPaint(clear, self->tltresize,
                     ob_rr_theme->grip_width, ob_rr_theme->paddingy + 1);
         if (ob_rr_theme->title_height > 0)
-            RrPaint(ob_rr_theme->a_clear, self->tllresize,
+            RrPaint(clear, self->tllresize,
                     ob_rr_theme->paddingx + 1, ob_rr_theme->title_height);
 
-        ob_rr_theme->a_clear->surface.parentx =
-            self->width - ob_rr_theme->grip_width;
+        clear->surface.parentx = self->width - ob_rr_theme->grip_width;
 
         if (ob_rr_theme->grip_width > 0)
-            RrPaint(ob_rr_theme->a_clear, self->trtresize,
+            RrPaint(clear, self->trtresize,
                     ob_rr_theme->grip_width, ob_rr_theme->paddingy + 1);
 
-        ob_rr_theme->a_clear->surface.parentx =
-            self->width - (ob_rr_theme->paddingx + 1);
+        clear->surface.parentx = self->width - (ob_rr_theme->paddingx + 1);
 
         if (ob_rr_theme->title_height > 0)
-            RrPaint(ob_rr_theme->a_clear, self->trrresize,
+            RrPaint(clear, self->trrresize,
                     ob_rr_theme->paddingx + 1, ob_rr_theme->title_height);
 
         /* set parents for any parent relative guys */
@@ -336,6 +367,7 @@ static void framerender_icon(ObFrame *self, RrAppearance *a)
         a->texture[0].type = RR_TEXTURE_RGBA;
         a->texture[0].data.rgba.width = icon->width;
         a->texture[0].data.rgba.height = icon->height;
+        a->texture[0].data.rgba.alpha = 0xff;
         a->texture[0].data.rgba.data = icon->data;
     } else
         a->texture[0].type = RR_TEXTURE_NONE;
This page took 0.032405 seconds and 4 git commands to generate.