+#ifdef USE_PANGO
+ out->pango_font_description = pango_font_description_new();
+
+ if (FcPatternGetString(match, "family", 0, &tmp_string) !=
+ FcResultTypeMismatch) {
+ pango_font_description_set_family(out->pango_font_description,
+ (gchar *)tmp_string);
+ tmp_string = NULL;
+ }
+ if (FcPatternGetString(match, "style", 0, &tmp_string) !=
+ FcResultTypeMismatch) {
+ /* Bold ? */
+ if (!strcasecmp("bold", (gchar *)tmp_string)) {
+ pango_font_description_set_weight(out->pango_font_description,
+ PANGO_WEIGHT_BOLD);
+ }
+ /* Italic ? */
+ else if (!strcasecmp("italic", (gchar *)tmp_string)) {
+ pango_font_description_set_style(out->pango_font_description,
+ PANGO_STYLE_ITALIC);
+ }
+ tmp_string = NULL;
+ }
+
+ if (FcPatternGetInteger(match, "pixelsize", 0, &tmp_int) !=
+ FcResultTypeMismatch) {
+ pango_font_description_set_absolute_size(out->pango_font_description,
+ tmp_int*PANGO_SCALE);
+ }
+
+ /* based on gtkmain.c gtk_get_default_language() */
+ gchar *locale, *p;
+ locale = g_strdup(setlocale(LC_CTYPE, NULL));
+ if ((p = strchr(locale, '.')))
+ *p = '\0';
+ if ((p = strchr(locale, '@')))
+ *p = '\0';
+ PangoFontMetrics *metrics =
+ pango_context_get_metrics(context, out->pango_font_description,
+ pango_language_from_string(locale));
+ out->pango_ascent = pango_font_metrics_get_ascent(metrics);
+ out->pango_descent = pango_font_metrics_get_descent(metrics);
+ g_free(locale);
+ pango_font_metrics_unref(metrics);
+#endif /* USE_PANGO */