[pango/macos-tests] macos: Implement pango_font_get_face



commit 8ccdeb37098a5cb4770cee35498483cf9d528e13
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.

 pango/pangocoretext-fontmap.c | 57 +++++++++++++++++++++++++++++++++++++++++++
 pango/pangocoretext-private.h |  3 +++
 pango/pangocoretext.c         |  2 +-
 3 files changed, 61 insertions(+), 1 deletion(-)
---
diff --git a/pango/pangocoretext-fontmap.c b/pango/pangocoretext-fontmap.c
index 5a81e388..3cfe3261 100644
--- a/pango/pangocoretext-fontmap.c
+++ b/pango/pangocoretext-fontmap.c
@@ -1859,3 +1859,60 @@ 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 *family;
+  PangoCoreTextFace *result = NULL;
+
+  desc = pango_core_text_font_key_get_cfontdescriptor (key);
+  synthetic_italic = pango_core_text_font_key_get_synthetic_italic (key);
+
+  family = 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_name = g_utf8_casefold (family, -1);
+
+  family = g_hash_table_lookup (ctfontmap->families, family_name);
+
+  if (family)
+    {
+      if (family->n_faces < 0)
+        {
+          PangoFace **faces;
+          int n_faces;
+          pango_core_text_font_family_list_faces (family, &faces, &n_faces);
+          g_free (faces);
+        }
+
+      for (int i = 0; i < family->n_faces; i++)
+        {
+          PangoCoreTextFace *face = (PangoCoreTextFace *)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..4d27cdf4 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 (priv->fontmap, priv->key);
 }
 
 gpointer


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