aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/pango.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/common/pango.c b/common/pango.c
index dbc369dc..88932203 100644
--- a/common/pango.c
+++ b/common/pango.c
@@ -109,6 +109,24 @@ void get_text_size(cairo_t *cairo, const char *font, int *width, int *height,
free(buf);
}
+void get_text_metrics(const char *font, int *height, int *baseline) {
+ cairo_t *cairo = cairo_create(NULL);
+ PangoContext *pango = pango_cairo_create_context(cairo);
+ PangoFontDescription *description = pango_font_description_from_string(font);
+ PangoFontMetrics *metrics;
+
+ // When passing NULL as a language, pango uses the current locale.
+ metrics = pango_context_get_metrics(pango, description, NULL);
+
+ *baseline = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE;
+ *height = *baseline + pango_font_metrics_get_descent(metrics) / PANGO_SCALE;
+
+ pango_font_metrics_unref(metrics);
+ pango_font_description_free(description);
+ g_object_unref(pango);
+ cairo_destroy(cairo);
+}
+
void pango_printf(cairo_t *cairo, const char *font,
double scale, bool markup, const char *fmt, ...) {
va_list args;