]> git.lizzy.rs Git - bspwm.git/commitdiff
Remove the inner and outer borders
authorBastien Dejean <nihilhill@gmail.com>
Wed, 6 Feb 2013 21:23:49 +0000 (22:23 +0100)
committerBastien Dejean <nihilhill@gmail.com>
Wed, 6 Feb 2013 21:23:49 +0000 (22:23 +0100)
The concept of triple border was initially introduced to solve the
visibility problem occurring when the border's environment is similar to
the border itself. In practice however, it doesn't help much and has no
redeeming aesthetic value.

README.md
TODO.md
bspwm.1
messages.c
settings.c
settings.h
window.c
window.h

index 92440b3bafcf4f66c43008e85abf784063dbfa17..0297534408fb29a9f5a61d7a6f61c2680c0f8d69 100644 (file)
--- a/README.md
+++ b/README.md
@@ -187,27 +187,23 @@ The following messages are handled:
 
 Colors are either [X color names](http://en.wikipedia.org/wiki/X11_color_names) or *#RRGGBB*, booleans are *true* or *false*.
 
-- `focused_border_color` — Color of the main border of a focused window of a focused monitor.
+- `focused_border_color` — Color of the border of a focused window of a focused monitor.
 
-- `active_border_color` — Color of the main border of a focused window of an unfocused monitor.
+- `active_border_color` — Color of the border of a focused window of an unfocused monitor.
 
-- `normal_border_color` — Color of the main border of an unfocused window.
-
-- `inner_border_color` — Color of the inner border of a window.
-
-- `outer_border_color` — Color of the outer border of a window.
+- `normal_border_color` — Color of the border of an unfocused window.
 
 - `presel_border_color` — Color of the `presel` message feedback.
 
-- `focused_locked_border_color` — Color of the main border of a focused locked window of a focused monitor.
+- `focused_locked_border_color` — Color of the border of a focused locked window of a focused monitor.
 
-- `active_locked_border_color` — Color of the main border of a focused locked window of an unfocused monitor.
+- `active_locked_border_color` — Color of the border of a focused locked window of an unfocused monitor.
 
-- `normal_locked_border_color` — Color of the main border of an unfocused locked window.
+- `normal_locked_border_color` — Color of the border of an unfocused locked window.
 
 - `urgent_border_color` — Color of the border of an urgent window.
 
-- `{inner,main,outer}_border_width` — Width of the inner, main and outer borders.
+- `border_width` — Window border width.
 
 - `window_gap` — Value of the gap that separates windows.
 
@@ -233,7 +229,6 @@ Colors are either [X color names](http://en.wikipedia.org/wiki/X11_color_names)
 - Multiple monitors support (via *Xinerama*)
 - EWMH support (`tint2` works)
 - Automatic and manual modes
-- Triple window borders
 
 ## Panel
 
diff --git a/TODO.md b/TODO.md
index ec4ef848c310ae000acee1e3ba44d38caf214930..2c0cddc7def90595c37f91da70b22c2a4d26607e 100644 (file)
--- a/TODO.md
+++ b/TODO.md
@@ -1,5 +1,4 @@
 - Rewrite `focus_follows_pointer` by using a root sized input only window mapped and unmapped via enter notify events.
-- Optimize border drawing by considering the `{outer,inner}_border_width == 0` case.
 - New setting: `windows_per_desktop` that would automatically send the oldest window of the current desktop to the first found desktop having a number of windows inferior to the limit and create a new desktop if there is none when the number of windows in the current desktop reaches the limit.
 - Grow/shrink through swap.
 - Command line completion for *bspc*.
diff --git a/bspwm.1 b/bspwm.1
index c67112ab42a7e4df4ae3207e3cb5b174c21f3346..a72f5470d68d62a3d0ead2e4d82dd44d85ec0c39 100644 (file)
--- a/bspwm.1
+++ b/bspwm.1
@@ -275,19 +275,13 @@ or
 .IR "true " "or " false .
 .TP
 .I focused_border_color
-Color of the main border of a focused window of a focused monitor.
+Color of the border of a focused window of a focused monitor.
 .TP
 .I active_border_color
-Color of the main border of a focused window of an unfocused monitor.
+Color of the border of a focused window of an unfocused monitor.
 .TP
 .I normal_border_color
-Color of the main border of an unfocused window.
-.TP
-.I inner_border_color
-Color of the inner border of a window.
-.TP
-.I outer_border_color
-Color of the outer border of a window.
+Color of the border of an unfocused window.
 .TP
 .I presel_border_color
 Color of the
@@ -295,23 +289,19 @@ Color of the
 message feedback.
 .TP
 .I focused_locked_border_color
-Color of the main border of a focused locked window of a focused monitor.
+Color of the border of a focused locked window of a focused monitor.
 .TP
 .I active_locked_border_color
-Color of the main border of a focused locked window of an unfocused monitor.
+Color of the border of a focused locked window of an unfocused monitor.
 .TP
 .I normal_locked_border_color
-Color of the main border of an unfocused locked window.
+Color of the border of an unfocused locked window.
 .TP
 .I urgent_border_color
 Color of the border of an urgent window.
 .TP
-.I inner_border_width
-.TQ
-.I main_border_width
-.TQ
-.I outer_border_width
-Width of the inner, main and outer borders.
+.I border_width
+Window border width.
 .TP
 .I window_gap
 Value of the gap that separates windows.
index 84c0f669048a3405fa1ae3d834f34d8849f8b6d1..fc1205018358b961cf6948ca8a8e1d3d06c8d0bb 100644 (file)
@@ -437,15 +437,8 @@ void set_setting(char *name, char *value, char *rsp)
     if (name == NULL || value == NULL)
         return;
 
-    if (strcmp(name, "inner_border_width") == 0) {
-        sscanf(value, "%u", &inner_border_width);
-        border_width = inner_border_width + main_border_width + outer_border_width;
-    } else if (strcmp(name, "main_border_width") == 0) {
-        sscanf(value, "%u", &main_border_width);
-        border_width = inner_border_width + main_border_width + outer_border_width;
-    } else if (strcmp(name, "outer_border_width") == 0) {
-        sscanf(value, "%u", &outer_border_width);
-        border_width = inner_border_width + main_border_width + outer_border_width;
+    if (strcmp(name, "border_width") == 0) {
+        sscanf(value, "%u", &border_width);
     } else if (strcmp(name, "fence_grip") == 0) {
         sscanf(value, "%u", &fence_grip);
     } else if (strcmp(name, "window_gap") == 0) {
@@ -467,12 +460,6 @@ void set_setting(char *name, char *value, char *rsp)
     } else if (strcmp(name, "normal_border_color") == 0) {
         strncpy(normal_border_color, value, sizeof(normal_border_color));
         normal_border_color_pxl = get_color(normal_border_color);
-    } else if (strcmp(name, "inner_border_color") == 0) {
-        strncpy(inner_border_color, value, sizeof(inner_border_color));
-        inner_border_color_pxl = get_color(inner_border_color);
-    } else if (strcmp(name, "outer_border_color") == 0) {
-        strncpy(outer_border_color, value, sizeof(outer_border_color));
-        outer_border_color_pxl = get_color(outer_border_color);
     } else if (strcmp(name, "presel_border_color") == 0) {
         strncpy(presel_border_color, value, sizeof(presel_border_color));
         presel_border_color_pxl = get_color(presel_border_color);
@@ -534,13 +521,7 @@ void get_setting(char *name, char* rsp)
     if (name == NULL)
         return;
 
-    if (strcmp(name, "inner_border_width") == 0)
-        snprintf(rsp, BUFSIZ, "%u", inner_border_width);
-    else if (strcmp(name, "main_border_width") == 0)
-        snprintf(rsp, BUFSIZ, "%u", main_border_width);
-    else if (strcmp(name, "outer_border_width") == 0)
-        snprintf(rsp, BUFSIZ, "%u", outer_border_width);
-    else if (strcmp(name, "border_width") == 0)
+    if (strcmp(name, "border_width") == 0)
         snprintf(rsp, BUFSIZ, "%u", border_width);
     else if (strcmp(name, "fence_grip") == 0)
         snprintf(rsp, BUFSIZ, "%u", fence_grip);
@@ -560,10 +541,6 @@ void get_setting(char *name, char* rsp)
         snprintf(rsp, BUFSIZ, "%s (%06X)", active_border_color, active_border_color_pxl);
     else if (strcmp(name, "normal_border_color") == 0)
         snprintf(rsp, BUFSIZ, "%s (%06X)", normal_border_color, normal_border_color_pxl);
-    else if (strcmp(name, "inner_border_color") == 0)
-        snprintf(rsp, BUFSIZ, "%s (%06X)", inner_border_color, inner_border_color_pxl);
-    else if (strcmp(name, "outer_border_color") == 0)
-        snprintf(rsp, BUFSIZ, "%s (%06X)", outer_border_color, outer_border_color_pxl);
     else if (strcmp(name, "presel_border_color") == 0)
         snprintf(rsp, BUFSIZ, "%s (%06X)", presel_border_color, presel_border_color_pxl);
     else if (strcmp(name, "focused_locked_border_color") == 0)
index 658167605df47c896b9edb4f04a0dcca08bb1139..f222a79df81f1ecac34bc4bd485bb4b50ec8dc75 100644 (file)
@@ -35,8 +35,6 @@ void load_settings(void)
     strncpy(normal_border_color, NORMAL_BORDER_COLOR, sizeof(normal_border_color));
     strncpy(focused_border_color, FOCUSED_BORDER_COLOR, sizeof(focused_border_color));
     strncpy(active_border_color, ACTIVE_BORDER_COLOR, sizeof(active_border_color));
-    strncpy(inner_border_color, INNER_BORDER_COLOR, sizeof(inner_border_color));
-    strncpy(outer_border_color, OUTER_BORDER_COLOR, sizeof(outer_border_color));
     strncpy(presel_border_color, PRESEL_BORDER_COLOR, sizeof(presel_border_color));
     strncpy(focused_locked_border_color, FOCUSED_LOCKED_BORDER_COLOR, sizeof(focused_locked_border_color));
     strncpy(active_locked_border_color, ACTIVE_LOCKED_BORDER_COLOR, sizeof(active_locked_border_color));
@@ -46,8 +44,6 @@ void load_settings(void)
     normal_border_color_pxl = get_color(normal_border_color);
     focused_border_color_pxl = get_color(active_border_color);
     active_border_color_pxl = get_color(active_border_color);
-    inner_border_color_pxl = get_color(inner_border_color);
-    outer_border_color_pxl = get_color(outer_border_color);
     presel_border_color_pxl = get_color(presel_border_color);
     focused_locked_border_color_pxl = get_color(active_locked_border_color);
     active_locked_border_color_pxl = get_color(active_locked_border_color);
@@ -56,11 +52,7 @@ void load_settings(void)
 
     strncpy(wm_name, WM_NAME, sizeof(wm_name));
 
-    inner_border_width = INNER_BORDER_WIDTH;
-    main_border_width = MAIN_BORDER_WIDTH;
-    outer_border_width = OUTER_BORDER_WIDTH;
-
-    border_width = inner_border_width + main_border_width + outer_border_width;
+    border_width = BORDER_WIDTH;
     window_gap = WINDOW_GAP;
     fence_grip = FENCE_GRIP;
 
index 2b9f409baa121046a6171d38e16ffb3d826e8f82..ca0564b4a92fcec0cfc7cacab669694b35163620 100644 (file)
@@ -9,21 +9,16 @@
 #define FOCUSED_BORDER_COLOR        "#7D7F8A"
 #define ACTIVE_BORDER_COLOR         "#7D7F8A"
 #define NORMAL_BORDER_COLOR         "#3F3E3B"
-#define INNER_BORDER_COLOR          "#32312E"
-#define OUTER_BORDER_COLOR          "#32312E"
 #define PRESEL_BORDER_COLOR         "#97AE71"
 #define FOCUSED_LOCKED_BORDER_COLOR "#B6A56A"
 #define ACTIVE_LOCKED_BORDER_COLOR  "#B6A56A"
 #define NORMAL_LOCKED_BORDER_COLOR  "#8D7E45"
 #define URGENT_BORDER_COLOR         "#DE928B"
 
-#define INNER_BORDER_WIDTH  3
-#define MAIN_BORDER_WIDTH   1
-#define OUTER_BORDER_WIDTH  3
-
-#define WINDOW_GAP          6
-#define SPLIT_RATIO         0.5
-#define FENCE_GRIP          20
+#define BORDER_WIDTH   1
+#define WINDOW_GAP     6
+#define SPLIT_RATIO    0.5
+#define FENCE_GRIP     20
 
 #define BORDERLESS_MONOCLE     false
 #define GAPLESS_MONOCLE        false
@@ -34,8 +29,6 @@
 char focused_border_color[MAXLEN];
 char active_border_color[MAXLEN];
 char normal_border_color[MAXLEN];
-char inner_border_color[MAXLEN];
-char outer_border_color[MAXLEN];
 char presel_border_color[MAXLEN];
 char focused_locked_border_color[MAXLEN];
 char active_locked_border_color[MAXLEN];
@@ -45,19 +38,13 @@ char urgent_border_color[MAXLEN];
 uint32_t focused_border_color_pxl;
 uint32_t active_border_color_pxl;
 uint32_t normal_border_color_pxl;
-uint32_t inner_border_color_pxl;
-uint32_t outer_border_color_pxl;
 uint32_t presel_border_color_pxl;
 uint32_t focused_locked_border_color_pxl;
 uint32_t active_locked_border_color_pxl;
 uint32_t normal_locked_border_color_pxl;
 uint32_t urgent_border_color_pxl;
 
-unsigned int inner_border_width;
-unsigned int main_border_width;
-unsigned int outer_border_width;
 unsigned int border_width;
-
 int window_gap;
 unsigned int fence_grip;
 
index 312dbc432c143439bdfaedd467edc0f50458c051..31401fb2b92fd375219a0b981a03ee96ae2a1996 100644 (file)
--- a/window.c
+++ b/window.c
@@ -186,69 +186,40 @@ void adopt_orphans(void)
 
 void window_draw_border(node_t *n, bool focused_window, bool focused_monitor)
 {
-    if (n == NULL)
-        return;
-
-    if (border_width < 1 || n->client->border_width < 1)
+    if (n == NULL || border_width < 1 || n->client->border_width < 1)
         return;
 
     xcb_window_t win = n->client->window;
+    uint32_t border_color_pxl = get_border_color(n->client, focused_window, focused_monitor);
 
-    xcb_rectangle_t actual_rectangle = (is_tiled(n->client) ? n->client->tiled_rectangle : n->client->floating_rectangle);
-
-    uint16_t width = actual_rectangle.width;
-    uint16_t height = actual_rectangle.height;
-
-    uint16_t full_width = width + 2 * border_width;
-    uint16_t full_height = height + 2 * border_width;
-
-    xcb_rectangle_t inner_rectangles[] =
-    {
-        { width, 0, 2 * border_width, height + 2 * border_width },
-        { 0, height, width + 2 * border_width, 2 * border_width }
-    };
-
-    xcb_rectangle_t main_rectangles[] =
-    {
-        { width + inner_border_width, 0, 2 * (main_border_width + outer_border_width), height + 2 * border_width },
-        { 0, height + inner_border_width, width + 2 * border_width, 2 * (main_border_width + outer_border_width) }
-    };
-
-    xcb_rectangle_t outer_rectangles[] =
-    {
-        { width + inner_border_width + main_border_width, 0, 2 * outer_border_width, height + 2 * border_width },
-        { 0, height + inner_border_width + main_border_width, width + 2 * border_width, 2 * outer_border_width }
-    };
+    if (split_mode == MODE_AUTOMATIC || !focused_monitor || !focused_window) {
+        xcb_change_window_attributes(dpy, win, XCB_CW_BORDER_PIXEL, &border_color_pxl);
+    } else {
+        xcb_rectangle_t actual_rectangle = (is_tiled(n->client) ? n->client->tiled_rectangle : n->client->floating_rectangle);
 
-    xcb_rectangle_t *presel_rectangles;
+        uint16_t width = actual_rectangle.width;
+        uint16_t height = actual_rectangle.height;
 
-    xcb_pixmap_t pix = xcb_generate_id(dpy);
-    xcb_create_pixmap(dpy, root_depth, pix, win, full_width, full_height);
+        uint16_t full_width = width + 2 * border_width;
+        uint16_t full_height = height + 2 * border_width;
 
-    xcb_gcontext_t gc = xcb_generate_id(dpy);
-    xcb_create_gc(dpy, gc, pix, 0, NULL);
+        xcb_rectangle_t border_rectangles[] =
+        {
+            { width, 0, 2 * border_width, height + 2 * border_width },
+            { 0, height, width + 2 * border_width, 2 * border_width }
+        };
 
-    uint32_t main_border_color_pxl = get_main_border_color(n->client, focused_window, focused_monitor);
+        xcb_rectangle_t *presel_rectangles;
 
-    /* inner border */
-    if (inner_border_width > 0) {
-        xcb_change_gc(dpy, gc, XCB_GC_FOREGROUND, &inner_border_color_pxl);
-        xcb_poly_fill_rectangle(dpy, pix, gc, LENGTH(inner_rectangles), inner_rectangles);
-    }
+        xcb_pixmap_t pix = xcb_generate_id(dpy);
+        xcb_create_pixmap(dpy, root_depth, pix, win, full_width, full_height);
 
-    /* main border */
-    if (main_border_width > 0) {
-        xcb_change_gc(dpy, gc, XCB_GC_FOREGROUND, &main_border_color_pxl);
-        xcb_poly_fill_rectangle(dpy, pix, gc, LENGTH(main_rectangles), main_rectangles);
-    }
+        xcb_gcontext_t gc = xcb_generate_id(dpy);
+        xcb_create_gc(dpy, gc, pix, 0, NULL);
 
-    /* outer border */
-    if (outer_border_width > 0) {
-        xcb_change_gc(dpy, gc, XCB_GC_FOREGROUND, &outer_border_color_pxl);
-        xcb_poly_fill_rectangle(dpy, pix, gc, LENGTH(outer_rectangles), outer_rectangles);
-    }
+        xcb_change_gc(dpy, gc, XCB_GC_FOREGROUND, &border_color_pxl);
+        xcb_poly_fill_rectangle(dpy, pix, gc, LENGTH(border_rectangles), border_rectangles);
 
-    if (split_mode == MODE_MANUAL && focused_monitor && focused_window) {
         uint16_t fence = (int16_t) (n->split_ratio * ((split_dir == DIR_UP || split_dir == DIR_DOWN) ? height : width));
         presel_rectangles = malloc(2 * sizeof(xcb_rectangle_t));
         switch (split_dir) {
@@ -269,16 +240,14 @@ void window_draw_border(node_t *n, bool focused_window, bool focused_monitor)
                 presel_rectangles[1] = (xcb_rectangle_t) {width, 0, border_width, full_height};
                 break;
         }
+
         xcb_change_gc(dpy, gc, XCB_GC_FOREGROUND, &presel_border_color_pxl);
         xcb_poly_fill_rectangle(dpy, pix, gc, 2, presel_rectangles);
+        xcb_change_window_attributes(dpy, win, XCB_CW_BORDER_PIXMAP, &pix);
         free(presel_rectangles);
+        xcb_free_gc(dpy, gc);
+        xcb_free_pixmap(dpy, pix);
     }
-
-    /* apply border pixmap */
-    xcb_change_window_attributes(dpy, win, XCB_CW_BORDER_PIXMAP, &pix);
-
-    xcb_free_gc(dpy, gc);
-    xcb_free_pixmap(dpy, pix);
 }
 
 void window_close(node_t *n)
@@ -403,7 +372,7 @@ void list_windows(char *rsp)
             }
 }
 
-uint32_t get_main_border_color(client_t *c, bool focused_window, bool focused_monitor)
+uint32_t get_border_color(client_t *c, bool focused_window, bool focused_monitor)
 {
     if (c == NULL)
         return 0;
index dc8a2cb20abafaabf8bec95d475ba6c06983362d..d4aa963b503c55e6dbdc7e76210b9ceddaaff2aa 100644 (file)
--- a/window.h
+++ b/window.h
@@ -35,7 +35,7 @@ void window_set_visibility(xcb_window_t, bool);
 void window_hide(xcb_window_t);
 void window_show(xcb_window_t);
 void toggle_visibility(void);
-uint32_t get_main_border_color(client_t *, bool, bool);
+uint32_t get_border_color(client_t *, bool, bool);
 void update_floating_rectangle(client_t *);
 void save_pointer_position(xcb_point_t *);
 void list_windows(char *);