};
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) {
}
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);
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)}});
}
}
}
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()) {
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) {
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);
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,
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,
&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;
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,
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,
&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)) {
}
/* 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);
}