From 123de9a25f341bc66beed0189f70132a4f589960 Mon Sep 17 00:00:00 2001 From: shdown Date: Sun, 15 Mar 2015 10:32:17 +0300 Subject: [PATCH 1/1] Fix incorrect y-offset for text in i3bar (2) 014aa7ff7441a8a2bb53bd0956aff61faaf6f37f fixed incorrect align of small symbols, but also introduced a problem with texts with mixed large and normal symbols. Fix it by centering the text vertically only if its height is smaller that the saved font height. Fixes #1543. --- libi3/font.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libi3/font.c b/libi3/font.c index df478fb4..b6d9d42e 100644 --- a/libi3/font.c +++ b/libi3/font.c @@ -126,7 +126,10 @@ static void draw_text_pango(const char *text, size_t text_len, cairo_set_source_rgb(cr, pango_font_red, pango_font_green, pango_font_blue); pango_cairo_update_layout(cr, layout); pango_layout_get_pixel_size(layout, NULL, &height); - cairo_move_to(cr, x, y - 0.5 * (height - savedFont->height)); + /* Center the piece of text vertically if its height is smaller than the + * cached font height, and just let "high" symbols fall out otherwise. */ + int yoffset = (height < savedFont->height ? 0.5 : 1) * (height - savedFont->height); + cairo_move_to(cr, x, y - yoffset); pango_cairo_show_layout(cr, layout); /* Free resources */ -- 2.39.2