Create pixmaps using the real bar height, rather than screen height.

This commit is contained in:
Deiz 2013-08-29 18:15:20 -04:00 committed by Michael Stapelberg
parent a52b5212ea
commit a7c005848a
1 changed files with 16 additions and 12 deletions

View File

@ -59,6 +59,9 @@ xcb_connection_t *conn;
/* The font we'll use */ /* The font we'll use */
static i3Font font; static i3Font font;
/* Overall height of the bar (based on font size) */
int bar_height;
/* These are only relevant for XKB, which we only need for grabbing modifiers */ /* These are only relevant for XKB, which we only need for grabbing modifiers */
Display *xkb_dpy; Display *xkb_dpy;
int xkb_event_base; int xkb_event_base;
@ -240,9 +243,9 @@ void unhide_bars(void) {
values[0] = walk->rect.x; values[0] = walk->rect.x;
if (config.position == POS_TOP) if (config.position == POS_TOP)
values[1] = walk->rect.y; values[1] = walk->rect.y;
else values[1] = walk->rect.y + walk->rect.h - font.height - 6; else values[1] = walk->rect.y + walk->rect.h - bar_height;
values[2] = walk->rect.w; values[2] = walk->rect.w;
values[3] = font.height + 6; values[3] = bar_height;
values[4] = XCB_STACK_MODE_ABOVE; values[4] = XCB_STACK_MODE_ABOVE;
DLOG("Reconfiguring Window for output %s to %d,%d\n", walk->name, values[0], values[1]); DLOG("Reconfiguring Window for output %s to %d,%d\n", walk->name, values[0], values[1]);
cookie = xcb_configure_window_checked(xcb_connection, cookie = xcb_configure_window_checked(xcb_connection,
@ -1061,6 +1064,7 @@ void init_xcb_late(char *fontname) {
font = load_font(fontname, true); font = load_font(fontname, true);
set_font(&font); set_font(&font);
DLOG("Calculated Font-height: %d\n", font.height); DLOG("Calculated Font-height: %d\n", font.height);
bar_height = font.height + 6;
xcb_flush(xcb_connection); xcb_flush(xcb_connection);
@ -1334,7 +1338,7 @@ void realloc_sl_buffer(void) {
statusline_pm, statusline_pm,
xcb_root, xcb_root,
MAX(root_screen->width_in_pixels, statusline_width), MAX(root_screen->width_in_pixels, statusline_width),
root_screen->height_in_pixels); bar_height);
uint32_t mask = XCB_GC_FOREGROUND; uint32_t mask = XCB_GC_FOREGROUND;
uint32_t vals[2] = { colors.bar_bg, colors.bar_bg }; uint32_t vals[2] = { colors.bar_bg, colors.bar_bg };
@ -1407,8 +1411,8 @@ void reconfig_windows(bool redraw_bars) {
root_screen->root_depth, root_screen->root_depth,
walk->bar, walk->bar,
xcb_root, xcb_root,
walk->rect.x, walk->rect.y + walk->rect.h - font.height - 6, walk->rect.x, walk->rect.y + walk->rect.h - bar_height,
walk->rect.w, font.height + 6, walk->rect.w, bar_height,
0, 0,
XCB_WINDOW_CLASS_INPUT_OUTPUT, XCB_WINDOW_CLASS_INPUT_OUTPUT,
root_screen->root_visual, root_screen->root_visual,
@ -1421,7 +1425,7 @@ void reconfig_windows(bool redraw_bars) {
walk->buffer, walk->buffer,
walk->bar, walk->bar,
walk->rect.w, walk->rect.w,
walk->rect.h); bar_height);
/* Set the WM_CLASS and WM_NAME (we don't need UTF-8) atoms */ /* Set the WM_CLASS and WM_NAME (we don't need UTF-8) atoms */
xcb_void_cookie_t class_cookie; xcb_void_cookie_t class_cookie;
@ -1482,12 +1486,12 @@ void reconfig_windows(bool redraw_bars) {
case POS_NONE: case POS_NONE:
break; break;
case POS_TOP: case POS_TOP:
strut_partial.top = font.height + 6; strut_partial.top = bar_height;
strut_partial.top_start_x = walk->rect.x; strut_partial.top_start_x = walk->rect.x;
strut_partial.top_end_x = walk->rect.x + walk->rect.w; strut_partial.top_end_x = walk->rect.x + walk->rect.w;
break; break;
case POS_BOT: case POS_BOT:
strut_partial.bottom = font.height + 6; strut_partial.bottom = bar_height;
strut_partial.bottom_start_x = walk->rect.x; strut_partial.bottom_start_x = walk->rect.x;
strut_partial.bottom_end_x = walk->rect.x + walk->rect.w; strut_partial.bottom_end_x = walk->rect.x + walk->rect.w;
break; break;
@ -1541,9 +1545,9 @@ void reconfig_windows(bool redraw_bars) {
XCB_CONFIG_WINDOW_HEIGHT | XCB_CONFIG_WINDOW_HEIGHT |
XCB_CONFIG_WINDOW_STACK_MODE; XCB_CONFIG_WINDOW_STACK_MODE;
values[0] = walk->rect.x; values[0] = walk->rect.x;
values[1] = walk->rect.y + walk->rect.h - font.height - 6; values[1] = walk->rect.y + walk->rect.h - bar_height;
values[2] = walk->rect.w; values[2] = walk->rect.w;
values[3] = font.height + 6; values[3] = bar_height;
values[4] = XCB_STACK_MODE_ABOVE; values[4] = XCB_STACK_MODE_ABOVE;
DLOG("Destroying buffer for output %s\n", walk->name); DLOG("Destroying buffer for output %s\n", walk->name);
@ -1569,7 +1573,7 @@ void reconfig_windows(bool redraw_bars) {
walk->buffer, walk->buffer,
walk->bar, walk->bar,
walk->rect.w, walk->rect.w,
walk->rect.h); bar_height);
xcb_void_cookie_t map_cookie, umap_cookie; xcb_void_cookie_t map_cookie, umap_cookie;
if (redraw_bars) { if (redraw_bars) {
@ -1631,7 +1635,7 @@ void draw_bars(bool unhide) {
outputs_walk->bargc, outputs_walk->bargc,
XCB_GC_FOREGROUND, XCB_GC_FOREGROUND,
&color); &color);
xcb_rectangle_t rect = { 0, 0, outputs_walk->rect.w, font.height + 6 }; xcb_rectangle_t rect = { 0, 0, outputs_walk->rect.w, bar_height };
xcb_poly_fill_rectangle(xcb_connection, xcb_poly_fill_rectangle(xcb_connection,
outputs_walk->buffer, outputs_walk->buffer,
outputs_walk->bargc, outputs_walk->bargc,