From 013cf61ffbd58f5f706ae6688aea56a14fce6622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 29 Aug 2019 20:39:22 +0200 Subject: [PATCH] render: add font_baseline() - calculates the y-coordinate for the baseline The old baseline calculation was copy-pasted to a couple of places, and also assumed that the font's height was equal to ascent+descent. While this is typically true, it isn't necessarily so. Now, we assume that height >= ascent+descent, and then position the baseline in "center" (but adjusted for the descent). --- render.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/render.c b/render.c index 566db615..88d747b6 100644 --- a/render.c +++ b/render.c @@ -80,6 +80,25 @@ pixman_color_dim_for_search(pixman_color_t *color) color->blue /= 3; } +static inline int +font_baseline(const struct terminal *term) +{ + assert(term->fextents.ascent >= 0); + assert(term->fextents.descent >= 0); + + int diff = term->fextents.height - (term->fextents.ascent + term->fextents.descent); + assert(diff >= 0); + +#if 0 + LOG_INFO("height=%d, ascent=%d, descent=%d, diff=%d", + term->fextents.height, + term->fextents.ascent, term->fextents.descent, + diff); +#endif + + return term->fextents.height - diff / 2 - term->fextents.descent; +} + static void draw_bar(const struct terminal *term, pixman_image_t *pix, const pixman_color_t *color, int x, int y)