X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=render%2Ffont.c;h=48321aec63a24dd0abd7fef90925850085b2c952;hb=a76ac8205cbfe484a5fee7749daa20ed2b7e8a2b;hp=85aac3c405015ff3e0f52c7a06eb3dffa2bb3f5f;hpb=c6eabf1880cbbea292bcc3d70729588994c320b0;p=chaz%2Fopenbox diff --git a/render/font.c b/render/font.c index 85aac3c4..48321aec 100644 --- a/render/font.c +++ b/render/font.c @@ -34,22 +34,30 @@ static void measure_font(const RrInstance *inst, RrFont *f) { PangoFontMetrics *metrics; - gchar *locale, *p; - - /* get the default language from the locale - (based on gtk_get_default_language in gtkmain.c) */ - locale = g_strdup(setlocale(LC_CTYPE, NULL)); - if ((p = strchr(locale, '.'))) *p = '\0'; /* strip off the . */ - if ((p = strchr(locale, '@'))) *p = '\0'; /* strip off the @ */ + static PangoLanguage *lang = NULL; + + if (lang == NULL) { +#if PANGO_VERSION_MAJOR > 1 || \ + (PANGO_VERSION_MAJOR == 1 && PANGO_VERSION_MINOR >= 16) + lang = pango_language_get_default(); +#else + gchar *locale, *p; + /* get the default language from the locale + (based on gtk_get_default_language in gtkmain.c) */ + locale = g_strdup(setlocale(LC_CTYPE, NULL)); + if ((p = strchr(locale, '.'))) *p = '\0'; /* strip off the . */ + if ((p = strchr(locale, '@'))) *p = '\0'; /* strip off the @ */ + lang = pango_language_from_string(locale); + g_free(locale); +#endif + } /* measure the ascent and descent */ - metrics = pango_context_get_metrics(inst->pango, f->font_desc, - pango_language_from_string(locale)); + metrics = pango_context_get_metrics(inst->pango, f->font_desc, lang); f->ascent = pango_font_metrics_get_ascent(metrics); f->descent = pango_font_metrics_get_descent(metrics); pango_font_metrics_unref(metrics); - g_free(locale); } RrFont *RrFontOpen(const RrInstance *inst, const gchar *name, gint size, @@ -138,7 +146,19 @@ static void font_measure_full(const RrFont *f, const gchar *str, pango_layout_set_text(f->layout, str, -1); pango_layout_set_width(f->layout, -1); - pango_layout_get_pixel_extents(f->layout, NULL, &rect); + + /* pango_layout_get_pixel_extents lies! this is the right way to get the + size of the text's area */ + pango_layout_get_extents(f->layout, NULL, &rect); +#if PANGO_VERSION_MAJOR > 1 || \ + (PANGO_VERSION_MAJOR == 1 && PANGO_VERSION_MINOR >= 16) + /* pass the logical rect as the ink rect, this is on purpose so we get the + full area for the text */ + pango_extents_to_pixels(&rect, NULL); +#else + rect.width = (rect.width + PANGO_SCALE - 1) / PANGO_SCALE; + rect.height = (rect.height + PANGO_SCALE - 1) / PANGO_SCALE; +#endif *x = rect.width + ABS(shadow_x) + 4 /* we put a 2 px edge on each side */; *y = rect.height + ABS(shadow_y); }