aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorLibravatar Hugo Osvaldo Barrera <hugo@barrera.io>2021-08-18 23:27:01 +0200
committerLibravatar Simon Ser <contact@emersion.fr>2021-08-26 20:16:14 +0200
commit62d90a8e959c6edcc752e124a9928cfa2399fbd1 (patch)
treed7f26db04a7a57b3b304768631348e8450197ba4 /common
parentUpdate Pango font description URL in sway.5.scd (diff)
downloadsway-62d90a8e959c6edcc752e124a9928cfa2399fbd1.tar.gz
sway-62d90a8e959c6edcc752e124a9928cfa2399fbd1.tar.zst
sway-62d90a8e959c6edcc752e124a9928cfa2399fbd1.zip
Use fixed titlebar heights
Use fixed titlebar heights. The default height is calculated based on font metrics for the configured font and current locale. Some testing with titles with emoji and CJK characters (which are substantially higher in my setup) shows that the titlebars retain their initial value, text does shift up or down, and all titlebars always remain aligned. Also drop some also now-unecessary title_height calculations. Makes also needed to be updated, since they should be positioned with the same rules.
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,
109 free(buf); 109 free(buf);
110} 110}
111 111
112void get_text_metrics(const char *font, int *height, int *baseline) {
113 cairo_t *cairo = cairo_create(NULL);
114 PangoContext *pango = pango_cairo_create_context(cairo);
115 PangoFontDescription *description = pango_font_description_from_string(font);
116 PangoFontMetrics *metrics;
117
118 // When passing NULL as a language, pango uses the current locale.
119 metrics = pango_context_get_metrics(pango, description, NULL);
120
121 *baseline = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE;
122 *height = *baseline + pango_font_metrics_get_descent(metrics) / PANGO_SCALE;
123
124 pango_font_metrics_unref(metrics);
125 pango_font_description_free(description);
126 g_object_unref(pango);
127 cairo_destroy(cairo);
128}
129
112void pango_printf(cairo_t *cairo, const char *font, 130void pango_printf(cairo_t *cairo, const char *font,
113 double scale, bool markup, const char *fmt, ...) { 131 double scale, bool markup, const char *fmt, ...) {
114 va_list args; 132 va_list args;