[pango/pango1-dwrite] pangowin32: Split out function to use DirectWrite for querying description
- From: Chun-wei Fan <fanchunwei src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango/pango1-dwrite] pangowin32: Split out function to use DirectWrite for querying description
- Date: Tue, 12 Jul 2022 08:24:07 +0000 (UTC)
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]