summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Reiter <reiter.christoph@gmail.com>2022-04-11 22:10:30 +0200
committerChristoph Reiter <reiter.christoph@gmail.com>2022-04-11 22:14:28 +0200
commitcade006c9ef7cbbd1aefbf5c12a2c74151f031c8 (patch)
tree628f4ab1677ceb1f95d66c90845b6fd1231f6a4f
parentd152b1bae9153476cf057f816ae3ce96b7b538a8 (diff)
downloadpango-cade006c9ef7cbbd1aefbf5c12a2c74151f031c8.tar.gz
pangowin32: try harder to load a font
load_fontset() in pangowin32 has various fallback code in case no font is found, but load_font() doesn't and just returns NULL in more cases. I saw that the other backends like fc and coretext just call load_fontset() in load_font() and return the first one. This copies this strategy to the win32 backend.
-rw-r--r--pango/pangowin32-fontmap.c45
1 files changed, 44 insertions, 1 deletions
diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c
index 43cffc37..4e6342a5 100644
--- a/pango/pangowin32-fontmap.c
+++ b/pango/pangowin32-fontmap.c
@@ -83,6 +83,9 @@ static void pango_win32_font_map_finalize (GObject
static PangoFont *pango_win32_font_map_load_font (PangoFontMap *fontmap,
PangoContext *context,
const PangoFontDescription *description);
+static PangoFont *pango_win32_font_map_real_load_font (PangoFontMap *fontmap,
+ PangoContext *context,
+ const PangoFontDescription *description);
static PangoFontset *pango_win32_font_map_load_fontset (PangoFontMap *fontmap,
PangoContext *context,
const PangoFontDescription *desc,
@@ -794,7 +797,7 @@ _pango_win32_font_map_class_init (PangoWin32FontMapClass *class)
class->find_font = pango_win32_font_map_real_find_font;
object_class->finalize = pango_win32_font_map_finalize;
- fontmap_class->load_font = pango_win32_font_map_load_font;
+ fontmap_class->load_font = pango_win32_font_map_real_load_font;
/* we now need a load_fontset implementation for the Win32 backend */
fontmap_class->load_fontset = pango_win32_font_map_load_fontset;
fontmap_class->list_families = pango_win32_font_map_list_families;
@@ -1011,6 +1014,46 @@ pango_win32_get_font_family (PangoWin32FontMap *win32fontmap,
return win32family;
}
+static gboolean
+get_first_font (PangoFontset *fontset G_GNUC_UNUSED,
+ PangoFont *font,
+ gpointer data)
+{
+ *(PangoFont **)data = font;
+
+ return TRUE;
+}
+
+static PangoFont *
+pango_win32_font_map_real_load_font (PangoFontMap *fontmap,
+ PangoContext *context,
+ const PangoFontDescription *description)
+{
+ PangoLanguage *language;
+ PangoFontset *fontset;
+ PangoFont *font = NULL;
+
+ if (context)
+ language = pango_context_get_language (context);
+ else
+ language = NULL;
+
+ fontset = pango_font_map_load_fontset (fontmap, context,
+ description, language);
+
+ if (fontset)
+ {
+ pango_fontset_foreach (fontset, get_first_font, &font);
+
+ if (font)
+ g_object_ref (font);
+
+ g_object_unref (fontset);
+ }
+
+ return font;
+}
+
static PangoFont *
pango_win32_font_map_load_font (PangoFontMap *fontmap,
PangoContext *context,