From 475e2d7cc399241441d06a36542bdcb577276ea3 Mon Sep 17 00:00:00 2001 From: Aaron Boxer Date: Thu, 28 May 2020 15:56:40 -0600 Subject: pangowin32-fontmap: load windows fallbacks and aliases in class init Currently, because of the g_once_init*, only the very first font map that is created will get the correct list of aliases. With these changes the fontmap class loads the aliases once, and this hash table is used by all fontmap objects. --- pango/pangowin32-fontmap.c | 27 ++++++++++----------------- pango/pangowin32-private.h | 2 +- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c index ff7a6e94..09de5fa0 100644 --- a/pango/pangowin32-fontmap.c +++ b/pango/pangowin32-fontmap.c @@ -611,19 +611,6 @@ read_windows_fallbacks (GHashTable *ht_aliases) #endif - -static gboolean -load_aliases (GHashTable *ht_aliases) -{ - -#ifdef HAVE_CAIRO_WIN32 - read_windows_fallbacks (ht_aliases); - read_builtin_aliases (ht_aliases); -#endif - - return TRUE; -} - static void lookup_aliases (GHashTable *aliases_ht, const char *fontname, @@ -634,9 +621,6 @@ lookup_aliases (GHashTable *aliases_ht, struct PangoAlias *alias; static gsize aliases_inited = 0; - if (g_once_init_enter (&aliases_inited)) - g_once_init_leave (&aliases_inited, load_aliases (aliases_ht)); - alias_key.alias = g_ascii_strdown (fontname, -1); alias = g_hash_table_lookup (aliases_ht, &alias_key); g_free (alias_key.alias); @@ -775,8 +759,9 @@ pango_win32_font_map_fontset_add_fonts (PangoFontMap *fontmap, int n_aliases; int j; PangoWin32FontMap *win32fontmap = PANGO_WIN32_FONT_MAP (fontmap); + PangoWin32FontMapClass *class = (PangoWin32FontMapClass*)G_OBJECT_GET_CLASS(win32fontmap); - lookup_aliases (win32fontmap->aliases, family, &aliases, &n_aliases); + lookup_aliases (class->aliases, family, &aliases, &n_aliases); if (n_aliases) { for (j = 0; j < n_aliases; j++) @@ -819,6 +804,14 @@ _pango_win32_font_map_class_init (PangoWin32FontMapClass *class) fontmap_class->list_families = pango_win32_font_map_list_families; fontmap_class->shape_engine_type = PANGO_RENDER_TYPE_WIN32; fontmap_class->get_face = pango_win32_font_map_get_face; + class->aliases = g_hash_table_new_full ((GHashFunc)alias_hash, + (GEqualFunc)alias_equal, + (GDestroyNotify)alias_free, + NULL); +#ifdef HAVE_CAIRO_WIN32 + read_windows_fallbacks (class->aliases); + read_builtin_aliases (class->aliases); +#endif _pango_win32_get_display_dc (); } diff --git a/pango/pangowin32-private.h b/pango/pangowin32-private.h index f5620b87..1c9c1c09 100644 --- a/pango/pangowin32-private.h +++ b/pango/pangowin32-private.h @@ -113,7 +113,7 @@ struct _PangoWin32FontMapClass PangoContext *context, PangoWin32Face *face, const PangoFontDescription *desc); - + GHashTable *aliases; }; struct _PangoWin32Font -- cgit v1.2.1