Create pixmaps using the real bar height, rather than screen height.
Patch status: merged
Patch by Deiz
To apply this patch, use:
curl http://cr.i3wm.org/patch/209/raw.patch | git am
b/i3bar/src/xcb.c
| 14 |
@@ -59,6 +59,9 @@ xcb_connection_t *conn; |
| 15 |
/* The font we'll use */ |
| 16 |
static i3Font font; |
| 17 |
|
| 18 |
+/* Overall height of the bar (based on font size) */ |
| 19 |
+int bar_height; |
| 20 |
+ |
| 21 |
/* These are only relevant for XKB, which we only need for grabbing modifiers */ |
| 22 |
Display *xkb_dpy; |
| 23 |
int xkb_event_base; |
| 24 |
@@ -240,9 +243,9 @@ void unhide_bars(void) {
|
| 25 |
values[0] = walk->rect.x; |
| 26 |
if (config.position == POS_TOP) |
| 27 |
values[1] = walk->rect.y; |
| 28 |
- else values[1] = walk->rect.y + walk->rect.h - font.height - 6; |
| 29 |
+ else values[1] = walk->rect.y + walk->rect.h - bar_height; |
| 30 |
values[2] = walk->rect.w; |
| 31 |
- values[3] = font.height + 6; |
| 32 |
+ values[3] = bar_height; |
| 33 |
values[4] = XCB_STACK_MODE_ABOVE; |
| 34 |
DLOG("Reconfiguring Window for output %s to %d,%d\n", walk->name, values[0], values[1]);
|
| 35 |
cookie = xcb_configure_window_checked(xcb_connection, |
| 36 |
@@ -1061,6 +1064,7 @@ void init_xcb_late(char *fontname) {
|
| 37 |
font = load_font(fontname, true); |
| 38 |
set_font(&font); |
| 39 |
DLOG("Calculated Font-height: %d\n", font.height);
|
| 40 |
+ bar_height = font.height + 6; |
| 41 |
|
| 42 |
xcb_flush(xcb_connection); |
| 43 |
|
| 44 |
@@ -1334,7 +1338,7 @@ void realloc_sl_buffer(void) {
|
| 45 |
statusline_pm, |
| 46 |
xcb_root, |
| 47 |
MAX(root_screen->width_in_pixels, statusline_width), |
| 48 |
- root_screen->height_in_pixels); |
| 49 |
+ bar_height); |
| 50 |
|
| 51 |
uint32_t mask = XCB_GC_FOREGROUND; |
| 52 |
uint32_t vals[2] = { colors.bar_bg, colors.bar_bg };
|
| 53 |
@@ -1407,8 +1411,8 @@ void reconfig_windows(bool redraw_bars) {
|
| 54 |
root_screen->root_depth, |
| 55 |
walk->bar, |
| 56 |
xcb_root, |
| 57 |
- walk->rect.x, walk->rect.y + walk->rect.h - font.height - 6, |
| 58 |
- walk->rect.w, font.height + 6, |
| 59 |
+ walk->rect.x, walk->rect.y + walk->rect.h - bar_height, |
| 60 |
+ walk->rect.w, bar_height, |
| 61 |
0, |
| 62 |
XCB_WINDOW_CLASS_INPUT_OUTPUT, |
| 63 |
root_screen->root_visual, |
| 64 |
@@ -1421,7 +1425,7 @@ void reconfig_windows(bool redraw_bars) {
|
| 65 |
walk->buffer, |
| 66 |
walk->bar, |
| 67 |
walk->rect.w, |
| 68 |
- walk->rect.h); |
| 69 |
+ bar_height); |
| 70 |
|
| 71 |
/* Set the WM_CLASS and WM_NAME (we don't need UTF-8) atoms */ |
| 72 |
xcb_void_cookie_t class_cookie; |
| 73 |
@@ -1482,12 +1486,12 @@ void reconfig_windows(bool redraw_bars) {
|
| 74 |
case POS_NONE: |
| 75 |
break; |
| 76 |
case POS_TOP: |
| 77 |
- strut_partial.top = font.height + 6; |
| 78 |
+ strut_partial.top = bar_height; |
| 79 |
strut_partial.top_start_x = walk->rect.x; |
| 80 |
strut_partial.top_end_x = walk->rect.x + walk->rect.w; |
| 81 |
break; |
| 82 |
case POS_BOT: |
| 83 |
- strut_partial.bottom = font.height + 6; |
| 84 |
+ strut_partial.bottom = bar_height; |
| 85 |
strut_partial.bottom_start_x = walk->rect.x; |
| 86 |
strut_partial.bottom_end_x = walk->rect.x + walk->rect.w; |
| 87 |
break; |
| 88 |
@@ -1541,9 +1545,9 @@ void reconfig_windows(bool redraw_bars) {
|
| 89 |
XCB_CONFIG_WINDOW_HEIGHT | |
| 90 |
XCB_CONFIG_WINDOW_STACK_MODE; |
| 91 |
values[0] = walk->rect.x; |
| 92 |
- values[1] = walk->rect.y + walk->rect.h - font.height - 6; |
| 93 |
+ values[1] = walk->rect.y + walk->rect.h - bar_height; |
| 94 |
values[2] = walk->rect.w; |
| 95 |
- values[3] = font.height + 6; |
| 96 |
+ values[3] = bar_height; |
| 97 |
values[4] = XCB_STACK_MODE_ABOVE; |
| 98 |
|
| 99 |
DLOG("Destroying buffer for output %s\n", walk->name);
|
| 100 |
@@ -1569,7 +1573,7 @@ void reconfig_windows(bool redraw_bars) {
|
| 101 |
walk->buffer, |
| 102 |
walk->bar, |
| 103 |
walk->rect.w, |
| 104 |
- walk->rect.h); |
| 105 |
+ bar_height); |
| 106 |
|
| 107 |
xcb_void_cookie_t map_cookie, umap_cookie; |
| 108 |
if (redraw_bars) {
|
| 109 |
@@ -1631,7 +1635,7 @@ void draw_bars(bool unhide) {
|
| 110 |
outputs_walk->bargc, |
| 111 |
XCB_GC_FOREGROUND, |
| 112 |
&color); |
| 113 |
- xcb_rectangle_t rect = { 0, 0, outputs_walk->rect.w, font.height + 6 };
|
| 114 |
+ xcb_rectangle_t rect = { 0, 0, outputs_walk->rect.w, bar_height };
|
| 115 |
xcb_poly_fill_rectangle(xcb_connection, |
| 116 |
outputs_walk->buffer, |
| 117 |
outputs_walk->bargc, |