[pango/pango1-dwrite] pangowin32: Split out function to use DirectWrite for querying description



commit 61a52ac7f5894fb47dce77daec6cd4971f8f1472
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Mon Jul 11 17:01:39 2022 +0800

    pangowin32: Split out function to use DirectWrite for querying description
    
    This way, we only need to set up DirectWrite if necessary.

 pango/pangowin32-dwrite-fontmap.cpp | 50 +++++++++++++++++++++++--------------
 pango/pangowin32-fontmap.c          |  8 ++++--
 pango/pangowin32-private.h          |  5 +++-
 3 files changed, 41 insertions(+), 22 deletions(-)
---
diff --git a/pango/pangowin32-dwrite-fontmap.cpp b/pango/pangowin32-dwrite-fontmap.cpp
index 84d44d44a..8d50667e9 100644
--- a/pango/pangowin32-dwrite-fontmap.cpp
+++ b/pango/pangowin32-dwrite-fontmap.cpp
@@ -344,17 +344,35 @@ util_dwrite_get_font_family_name (IDWriteFontFamily *family)
   return util_free_to_string (strings);
 }
 
+PangoFontDescription *
+pango_win32_font_description_from_dwrite_font (gpointer dwrite_font)
+{
+  IDWriteFont *font = static_cast<IDWriteFont *>(dwrite_font);
+  PangoFontDescription *desc = NULL;
+  HRESULT hr;
+  IDWriteFontFamily *family = NULL;
+
+  hr = font->GetFontFamily (&family);
+
+  if (SUCCEEDED (hr) && family != NULL)
+    {
+      char *family_name = util_dwrite_get_font_family_name (family);
+
+      if (family_name != NULL)
+        desc = util_get_pango_font_description (font, family_name);
+
+      family->Release ();
+    }
+
+  return desc;
+}
+
 PangoFontDescription *
 pango_win32_font_description_from_logfontw_dwrite (LOGFONTW *logfontw)
 {
   PangoFontDescription *desc = NULL;
   IDWriteFont *font = NULL;
   HRESULT hr;
-  gchar *family;
-  PangoStyle style;
-  PangoVariant variant;
-  PangoWeight weight;
-  PangoStretch stretch;
   PangoWin32DWriteItems *dwrite_items;
 
   dwrite_items = init_direct_write ();
@@ -365,20 +383,7 @@ pango_win32_font_description_from_logfontw_dwrite (LOGFONTW *logfontw)
 
   if (SUCCEEDED (hr) && font != NULL)
     {
-      IDWriteFontFamily *family = NULL;
-
-      hr = font->GetFontFamily (&family);
-
-      if (SUCCEEDED (hr) && family != NULL)
-        {
-          char *family_name = util_dwrite_get_font_family_name (family);
-
-          if (family_name != NULL)
-            desc = util_get_pango_font_description (font, family_name);
-
-          family->Release ();
-        }
-
+      desc = pango_win32_font_description_from_dwrite_font (font);
       font->Release ();
     }
 
@@ -415,6 +420,13 @@ pango_win32_dwrite_font_release (gpointer dwrite_font)
 {
 }
 
+pango_win32_font_description_from_dwrite_font (gpointer dwrite_font)
+{
+  g_return_val_if_fail (dwrite_font == NULL, NULL);
+
+  return NULL;
+}
+
 gpointer
 pango_win32_font_map_logfontw_get_dwrite_font (PangoWin32FontMap *map,
                                                LOGFONTW          *logfontw)
diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c
index 62b026305..88ab343c3 100644
--- a/pango/pangowin32-fontmap.c
+++ b/pango/pangowin32-fontmap.c
@@ -1707,9 +1707,13 @@ pango_win32_insert_font (PangoWin32FontMap *win32fontmap,
   g_hash_table_insert (win32fontmap->fonts, lfp2, lfp2);
 
   if (dwrite_font != NULL)
-    g_hash_table_insert (win32fontmap->dwrite_fonts, lfp2, dwrite_font);
+    {
+      g_hash_table_insert (win32fontmap->dwrite_fonts, lfp2, dwrite_font);
+      description = pango_win32_font_description_from_dwrite_font (dwrite_font);
+    }
+  else
+    description = pango_win32_font_description_from_logfontw (lfp2);
 
-  description = pango_win32_font_description_from_logfontw (lfp2);
 
   /* In some cases, extracting a name for a font can fail; such fonts
    * aren't usable for us
diff --git a/pango/pangowin32-private.h b/pango/pangowin32-private.h
index 99f8a596c..52d7e8f41 100644
--- a/pango/pangowin32-private.h
+++ b/pango/pangowin32-private.h
@@ -310,7 +310,10 @@ gpointer        pango_win32_font_map_logfontw_get_dwrite_font (PangoWin32FontMap
 PangoFontDescription *
 pango_win32_font_description_from_logfontw_dwrite             (LOGFONTW *logfontw);
 
-void            pango_win32_dwrite_font_release      (gpointer dwrite_font);
+PangoFontDescription *
+pango_win32_font_description_from_dwrite_font                 (gpointer  dwrite_font);
+
+void            pango_win32_dwrite_font_release               (gpointer  dwrite_font);
 
 G_END_DECLS
 


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