Align titles to baseline

This does the following:

* Adds a baseline argument to get_text_size (the baseline is the
distance from the top of the texture to the baseline).
* Stores the baseline in the container when calculating the title
height.
* Takes the baseline into account when calculating the config's max font
height.
* When rendering, pads the textures according to the baseline so they
line up.
This commit is contained in:
Ryan Dwyer 2018-09-08 16:19:31 +10:00
parent 9226aad58c
commit 9215ca0f01
11 changed files with 49 additions and 32 deletions

View file

@ -103,7 +103,7 @@ PangoLayout *get_pango_layout(cairo_t *cairo, const char *font,
}
void get_text_size(cairo_t *cairo, const char *font, int *width, int *height,
double scale, bool markup, const char *fmt, ...) {
int *baseline, double scale, bool markup, const char *fmt, ...) {
static char buf[2048];
va_list args;
@ -116,6 +116,9 @@ void get_text_size(cairo_t *cairo, const char *font, int *width, int *height,
PangoLayout *layout = get_pango_layout(cairo, font, buf, scale, markup);
pango_cairo_update_layout(cairo, layout);
pango_layout_get_pixel_size(layout, width, height);
if (baseline) {
*baseline = pango_layout_get_baseline(layout) / PANGO_SCALE;
}
g_object_unref(layout);
}