summaryrefslogtreecommitdiff
path: root/pango/pangocoretext-fontmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/pangocoretext-fontmap.c')
-rw-r--r--pango/pangocoretext-fontmap.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/pango/pangocoretext-fontmap.c b/pango/pangocoretext-fontmap.c
index 5a81e388..78003e6c 100644
--- a/pango/pangocoretext-fontmap.c
+++ b/pango/pangocoretext-fontmap.c
@@ -1859,3 +1859,54 @@ pango_core_text_fontset_foreach (PangoFontset *fontset,
}
}
+PangoCoreTextFace *
+pango_core_text_font_map_find_face (PangoCoreTextFontMap *map,
+ const PangoCoreTextFontKey *key)
+{
+ CTFontDescriptorRef desc;
+ gboolean synthetic_italic;
+ char *family;
+ char *family_name;
+ char *style_name;
+ PangoWeight weight;
+ CTFontSymbolicTraits traits;
+ PangoCoreTextFamily *font_family;
+ PangoCoreTextFace *result = NULL;
+
+ desc = pango_core_text_font_key_get_ctfontdescriptor (key);
+ synthetic_italic = pango_core_text_font_key_get_synthetic_italic (key);
+
+ family_name = ct_font_descriptor_get_family_name (desc, FALSE);
+ style_name = ct_font_descriptor_get_style_name (desc);
+ weight = ct_font_descriptor_get_weight (desc);
+ traits = ct_font_descriptor_get_traits (desc);
+
+ family = g_utf8_casefold (family_name, -1);
+
+ font_family = g_hash_table_lookup (map->families, family);
+
+ if (font_family)
+ {
+ pango_font_family_list_faces ((PangoFontFamily *)font_family, NULL, NULL);
+
+ for (int i = 0; i < font_family->n_faces; i++)
+ {
+ PangoCoreTextFace *face = (PangoCoreTextFace *)font_family->faces[i];
+
+ if (face->weight == weight &&
+ face->traits == traits &&
+ face->synthetic_italic == synthetic_italic &&
+ strcmp (face->style_name, style_name) == 0)
+ {
+ result = face;
+ break;
+ }
+ }
+ }
+
+ g_free (family);
+ g_free (family_name);
+ g_free (style_name);
+
+ return result;
+}