]> git.sur5r.net Git - i3/i3/commitdiff
i3bar: refactor magic numbers to *_px constants
authorshdown <shdownnine@gmail.com>
Sat, 21 Mar 2015 17:46:36 +0000 (20:46 +0300)
committershdown <shdownnine@gmail.com>
Sun, 22 Mar 2015 10:28:00 +0000 (13:28 +0300)
i3bar/src/xcb.c

index e1ad03e8edc4e67b362b3d81dd022444ed706dd7..ce697dc19c6015e4a8649672aedbb1477279aa92 100644 (file)
@@ -106,6 +106,14 @@ struct xcb_colors_t {
 };
 struct xcb_colors_t colors;
 
+const static int ws_hoff_px = 4,    /* Horizontal offset between a workspace label and button borders */
+                 ws_voff_px = 3,    /* Vertical offset between a workspace label and button borders */
+                 ws_spacing_px = 1, /* Offset between two workspace buttons */
+                 sb_hoff_px = 4,    /* Offset between the statusline and 1) workspace buttons on the left
+                                     *                                   2) the tray or screen edge on the right */
+                 tray_loff_px = 2,  /* Additional offset between the tray and the statusline, if the tray is not empty */
+                 sep_voff_px = 4;   /* Vertical offset between the bar and a separator */
+
 /* We define xcb_request_failed as a macro to include the relevant line-number */
 #define xcb_request_failed(cookie, err_msg) _xcb_request_failed(cookie, err_msg, __LINE__)
 int _xcb_request_failed(xcb_void_cookie_t cookie, char *err_msg, int line) {
@@ -204,7 +212,7 @@ void refresh_statusline(void) {
         }
 
         set_font_colors(statusline_ctx, fg_color, colors.bar_bg);
-        draw_text(block->full_text, statusline_pm, statusline_ctx, x + block->x_offset, 3, block->width);
+        draw_text(block->full_text, statusline_pm, statusline_ctx, x + block->x_offset, logical_px(ws_voff_px), block->width);
         x += block->width + block->sep_block_width + block->x_offset + block->x_append;
 
         uint32_t sep_offset = get_sep_offset(block);
@@ -215,8 +223,8 @@ void refresh_statusline(void) {
             xcb_change_gc(xcb_connection, statusline_ctx, mask, values);
             xcb_poly_line(xcb_connection, XCB_COORD_MODE_ORIGIN, statusline_pm,
                           statusline_ctx, 2,
-                          (xcb_point_t[]){{x - sep_offset, logical_px(4)},
-                                          {x - sep_offset, bar_height - logical_px(4)}});
+                          (xcb_point_t[]){{x - sep_offset, logical_px(sep_voff_px)},
+                                          {x - sep_offset, bar_height - logical_px(sep_voff_px)}});
         }
     }
 }
@@ -346,12 +354,14 @@ void handle_button(xcb_button_press_event_t *event) {
     i3_ws *cur_ws = NULL, *clicked_ws = NULL, *ws_walk;
 
     TAILQ_FOREACH(ws_walk, walk->workspaces, tailq) {
-        int w = logical_px(10) + ws_walk->name_width;
+        int w = 2*logical_px(ws_hoff_px) + 2*logical_px(1) + ws_walk->name_width;
         if (x >= workspace_width && x <= workspace_width + w)
             clicked_ws = ws_walk;
         if (ws_walk->visible)
             cur_ws = ws_walk;
-        workspace_width += w + logical_px(1);
+        workspace_width += w;
+        if (TAILQ_NEXT(ws_walk, tailq) != NULL)
+            workspace_width += logical_px(ws_spacing_px);
     }
 
     if (x > workspace_width && child_want_click_events()) {
@@ -367,10 +377,10 @@ void handle_button(xcb_button_press_event_t *event) {
             tray_width += (font.height + logical_px(2));
         }
         if (tray_width > 0)
-            tray_width += logical_px(2);
+            tray_width += logical_px(tray_loff_px);
 
         int block_x = 0, last_block_x;
-        int offset = walk->rect.w - statusline_width - tray_width - logical_px(4);
+        int offset = walk->rect.w - statusline_width - tray_width - logical_px(sb_hoff_px);
 
         x = original_x - offset;
         if (x >= 0) {
@@ -1167,7 +1177,7 @@ void init_xcb_late(char *fontname) {
     font = load_font(fontname, true);
     set_font(&font);
     DLOG("Calculated font height: %d\n", font.height);
-    bar_height = font.height + logical_px(6);
+    bar_height = font.height + 2*logical_px(ws_voff_px);
 
     xcb_flush(xcb_connection);
 
@@ -1793,8 +1803,8 @@ void draw_bars(bool unhide) {
                               vals_border);
                 xcb_rectangle_t rect_border = {workspace_width,
                                                logical_px(1),
-                                               ws_walk->name_width + logical_px(10),
-                                               font.height + logical_px(4)};
+                                               ws_walk->name_width + 2*logical_px(ws_hoff_px) + 2*logical_px(1),
+                                               font.height + 2*logical_px(ws_voff_px) - 2*logical_px(1)};
                 xcb_poly_fill_rectangle(xcb_connection,
                                         outputs_walk->buffer,
                                         outputs_walk->bargc,
@@ -1807,8 +1817,8 @@ void draw_bars(bool unhide) {
                               vals);
                 xcb_rectangle_t rect = {workspace_width + logical_px(1),
                                         2 * logical_px(1),
-                                        ws_walk->name_width + logical_px(8),
-                                        font.height + logical_px(2)};
+                                        ws_walk->name_width + 2*logical_px(ws_hoff_px),
+                                        font.height + 2*logical_px(ws_voff_px) - 4*logical_px(1)};
                 xcb_poly_fill_rectangle(xcb_connection,
                                         outputs_walk->buffer,
                                         outputs_walk->bargc,
@@ -1816,12 +1826,19 @@ void draw_bars(bool unhide) {
                                         &rect);
                 set_font_colors(outputs_walk->bargc, fg_color, bg_color);
                 draw_text(ws_walk->name, outputs_walk->buffer, outputs_walk->bargc,
-                          workspace_width + logical_px(5), 3 * logical_px(1), ws_walk->name_width);
-                workspace_width += logical_px(10) + ws_walk->name_width + logical_px(1);
+                          workspace_width + logical_px(ws_hoff_px) + logical_px(1),
+                          logical_px(ws_voff_px),
+                          ws_walk->name_width);
+
+                workspace_width += 2*logical_px(ws_hoff_px) + 2*logical_px(1) + ws_walk->name_width;
+                if (TAILQ_NEXT(ws_walk, tailq) != NULL)
+                    workspace_width += logical_px(ws_spacing_px);
             }
         }
 
         if (binding.name && !config.disable_binding_mode_indicator) {
+            workspace_width += logical_px(ws_spacing_px);
+
             uint32_t fg_color = colors.urgent_ws_fg;
             uint32_t bg_color = colors.urgent_ws_bg;
             uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND;
@@ -1831,7 +1848,10 @@ void draw_bars(bool unhide) {
                           outputs_walk->bargc,
                           mask,
                           vals_border);
-            xcb_rectangle_t rect_border = {workspace_width, 1, binding.width + 10, font.height + 4};
+            xcb_rectangle_t rect_border = {workspace_width,
+                                           logical_px(1),
+                                           binding.width + 2*logical_px(ws_hoff_px) + 2*logical_px(1),
+                                           font.height + 2*logical_px(ws_voff_px) - 2*logical_px(1)};
             xcb_poly_fill_rectangle(xcb_connection,
                                     outputs_walk->buffer,
                                     outputs_walk->bargc,
@@ -1843,7 +1863,10 @@ void draw_bars(bool unhide) {
                           outputs_walk->bargc,
                           mask,
                           vals);
-            xcb_rectangle_t rect = {workspace_width + 1, 2, binding.width + 8, font.height + 2};
+            xcb_rectangle_t rect = {workspace_width + logical_px(1),
+                                    2*logical_px(1),
+                                    binding.width + 2*logical_px(ws_hoff_px),
+                                    font.height + 2*logical_px(ws_voff_px) - 4*logical_px(1)};
             xcb_poly_fill_rectangle(xcb_connection,
                                     outputs_walk->buffer,
                                     outputs_walk->bargc,
@@ -1851,10 +1874,15 @@ void draw_bars(bool unhide) {
                                     &rect);
 
             set_font_colors(outputs_walk->bargc, fg_color, bg_color);
-            draw_text(binding.name, outputs_walk->buffer, outputs_walk->bargc, workspace_width + 5, 3, binding.width);
+            draw_text(binding.name,
+                      outputs_walk->buffer,
+                      outputs_walk->bargc,
+                      workspace_width + logical_px(ws_hoff_px) + logical_px(1),
+                      logical_px(ws_voff_px),
+                      binding.width);
 
             unhide = true;
-            workspace_width += logical_px(10) + binding.width + logical_px(1);
+            workspace_width += 2*logical_px(ws_hoff_px) + 2*logical_px(1) + binding.width;
         }
 
         if (!TAILQ_EMPTY(&statusline_head)) {
@@ -1875,18 +1903,17 @@ void draw_bars(bool unhide) {
             }
             /* Add 2px of padding if there are any tray icons */
             if (traypx > 0)
-                traypx += logical_px(2);
+                traypx += logical_px(tray_loff_px);
 
-            int edge_offset = logical_px(4);
             int visible_statusline_width = MIN(statusline_width,
-                                               outputs_walk->rect.w - workspace_width - traypx - 2*edge_offset);
+                                               outputs_walk->rect.w - workspace_width - traypx - 2*logical_px(sb_hoff_px));
 
             xcb_copy_area(xcb_connection,
                           statusline_pm,
                           outputs_walk->buffer,
                           outputs_walk->bargc,
                           (int16_t)(statusline_width - visible_statusline_width), 0,
-                          (int16_t)(outputs_walk->rect.w - traypx - edge_offset - visible_statusline_width), 0,
+                          (int16_t)(outputs_walk->rect.w - traypx - logical_px(sb_hoff_px) - visible_statusline_width), 0,
                           (int16_t)visible_statusline_width, (int16_t)bar_height);
         }