[pango/macos-tests] macos: Implement pango_font_get_face




commit d0e16e0cf433e454e7a7a496dbfb1db8d96b2f6c
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Jan 3 23:53:36 2021 -0500

    macos: Implement pango_font_get_face
    
    This was returning NULL for coretext fonts.
    Good that we have tests for this.
    
    Fixes: #524

 pango/pangocoretext-fontmap.c | 51 +++++++++++++++++++++++++++++++++++++++++++
 pango/pangocoretext-private.h |  3 +++
 pango/pangocoretext.c         |  2 +-
 3 files changed, 55 insertions(+), 1 deletion(-)
---
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;
+}
diff --git a/pango/pangocoretext-private.h b/pango/pangocoretext-private.h
index 9cade31a..d95ec642 100644
--- a/pango/pangocoretext-private.h
+++ b/pango/pangocoretext-private.h
@@ -152,6 +152,9 @@ PangoGravity          pango_core_text_font_key_get_gravity          (const Pango
 _PANGO_EXTERN
 CTFontDescriptorRef   pango_core_text_font_key_get_ctfontdescriptor (const PangoCoreTextFontKey *key);
 
+PangoCoreTextFace *   pango_core_text_font_map_find_face (PangoCoreTextFontMap       *map,
+                                                          const PangoCoreTextFontKey *key);
+
 G_END_DECLS
 
 #endif /* __PANGOCORETEXT_PRIVATE_H__ */
diff --git a/pango/pangocoretext.c b/pango/pangocoretext.c
index 44d2805a..e14ab16c 100644
--- a/pango/pangocoretext.c
+++ b/pango/pangocoretext.c
@@ -238,7 +238,7 @@ _pango_core_text_font_get_face (PangoCoreTextFont *font)
 {
   PangoCoreTextFontPrivate *priv = font->priv;
 
-  return priv->face;
+  return pango_core_text_font_map_find_face (PANGO_CORE_TEXT_FONT_MAP (priv->fontmap), priv->key);
 }
 
 gpointer


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]