]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: use rectangles instead of a polygon to avoid strange rendering errors
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 14 Nov 2010 20:17:27 +0000 (21:17 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 14 Nov 2010 20:17:27 +0000 (21:17 +0100)
With the polygon, when using pidgin, having the buddy list in the middle of the
screen, 200 px width, full screen high, then opening the manage accounts
window, the decorations of the buddy list were visible on the accounts window.

src/x.c

diff --git a/src/x.c b/src/x.c
index 41707bf7cea3d362f8153d45471033b23c692bd0..fe83a8483f6dc6d12cf0796ac22c73d4d00868c9 100644 (file)
--- a/src/x.c
+++ b/src/x.c
@@ -256,23 +256,17 @@ void x_draw_decoration(Con *con) {
         DLOG("window_rect spans (%d, %d) with %d x %d\n", con->window_rect.x, con->window_rect.y, con->window_rect.width, con->window_rect.height);
 #endif
 
-        /* This polygon represents the border around the child window (left,
-         * bottom and right part). We don’t just fill the whole rectangle
-         * because some childs are not freely resizable and we want their
-         * background color to "shine through". */
+        /* These rectangles represents the border around the child window
+         * (left, bottom and right part). We don’t just fill the whole
+         * rectangle because some childs are not freely resizable and we want
+         * their background color to "shine through". */
         xcb_change_gc_single(conn, con->gc, XCB_GC_FOREGROUND, color->background);
-        xcb_point_t points[] = {
-            { 0,                          0 },
-            { 0,                          r->height },
-            { r->width,                   r->height },
-            { r->width,                   0 },
-            { r->width + br.width + br.x, 0 },
-            { r->width + br.width + br.x, r->height + br.height + br.y },
-            { br.x,                       r->height + br.height },
-            { br.x,                       0 }
+        xcb_rectangle_t borders[] = {
+            { 0, 0, br.x, r->height },
+            { 0, r->height + br.height + br.y, r->width, r->height },
+            { r->width + br.width + br.x, 0, r->width, r->height }
         };
-        xcb_fill_poly(conn, con->frame, con->gc, XCB_POLY_SHAPE_COMPLEX, XCB_COORD_MODE_ORIGIN, 8, points);
-
+        xcb_poly_fill_rectangle(conn, con->frame, con->gc, 3, borders);
         /* 1pixel border needs an additional line at the top */
         if (border_style == BS_1PIXEL) {
             xcb_rectangle_t topline = { br.x, 0, con->rect.width + br.width + br.x, br.y };