diff options
Diffstat (limited to 'pango/pangofc-fontmap.c')
-rw-r--r-- | pango/pangofc-fontmap.c | 63 |
1 files changed, 32 insertions, 31 deletions
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c index d4a8fa96..5be2b815 100644 --- a/pango/pangofc-fontmap.c +++ b/pango/pangofc-fontmap.c @@ -30,6 +30,7 @@ #include "pango-impl-utils.h" #include "modules.h" #include "pango-enum-types.h" +#include "pango-threadsafe.h" /* Overview: @@ -106,19 +107,19 @@ typedef struct _PangoFcFontset PangoFcFontset; struct _PangoFcFontMapPrivate { - GHashTable *fontset_hash; /* Maps PangoFcFontsetKey -> PangoFcFontset */ + PHashTable *fontset_hash; /* Maps PangoFcFontsetKey -> PangoFcFontset */ GQueue *fontset_cache; /* Recently used fontsets */ - GHashTable *font_hash; /* Maps PangoFcFontKey -> PangoFcFont */ + PHashTable *font_hash; /* Maps PangoFcFontKey -> PangoFcFont */ - GHashTable *patterns_hash; /* Maps FcPattern -> PangoFcPatterns */ + PHashTable *patterns_hash; /* Maps FcPattern -> PangoFcPatterns */ /* pattern_hash is used to make sure we only store one copy of * each identical pattern. (Speeds up lookup). */ - GHashTable *pattern_hash; + PHashTable *pattern_hash; - GHashTable *font_face_data_hash; /* Maps font file name/id -> data */ + PHashTable *font_face_data_hash; /* Maps font file name/id -> data */ /* List of all families availible */ PangoFcFamily **families; @@ -687,7 +688,7 @@ pango_fc_patterns_new (FcPattern *pat, PangoFcFontMap *fontmap) PangoFcPatterns *pats; pat = uniquify_pattern (fontmap, pat); - pats = g_hash_table_lookup (fontmap->priv->patterns_hash, pat); + pats = p_hash_table_lookup (fontmap->priv->patterns_hash, pat); if (pats) return pango_fc_patterns_ref (pats); @@ -699,7 +700,7 @@ pango_fc_patterns_new (FcPattern *pat, PangoFcFontMap *fontmap) FcPatternReference (pat); pats->pattern = pat; - g_hash_table_insert (fontmap->priv->patterns_hash, + p_hash_table_insert (fontmap->priv->patterns_hash, pats->pattern, pats); return pats; @@ -728,8 +729,8 @@ pango_fc_patterns_unref (PangoFcPatterns *pats) /* Only remove from fontmap hash if we are in it. This is not necessarily * the case after a cache_clear() call. */ if (pats->fontmap->priv->patterns_hash && - pats == g_hash_table_lookup (pats->fontmap->priv->patterns_hash, pats->pattern)) - g_hash_table_remove (pats->fontmap->priv->patterns_hash, + pats == p_hash_table_lookup (pats->fontmap->priv->patterns_hash, pats->pattern)) + p_hash_table_remove (pats->fontmap->priv->patterns_hash, pats->pattern); if (pats->pattern) @@ -1034,23 +1035,23 @@ pango_fc_font_map_init (PangoFcFontMap *fcfontmap) priv->n_families = -1; - priv->font_hash = g_hash_table_new ((GHashFunc)pango_fc_font_key_hash, + priv->font_hash = p_hash_table_new ((GHashFunc)pango_fc_font_key_hash, (GEqualFunc)pango_fc_font_key_equal); - priv->fontset_hash = g_hash_table_new_full ((GHashFunc)pango_fc_fontset_key_hash, + priv->fontset_hash = p_hash_table_new_full ((GHashFunc)pango_fc_fontset_key_hash, (GEqualFunc)pango_fc_fontset_key_equal, NULL, (GDestroyNotify)g_object_unref); priv->fontset_cache = g_queue_new (); - priv->patterns_hash = g_hash_table_new (NULL, NULL); + priv->patterns_hash = p_hash_table_new (NULL, NULL); - priv->pattern_hash = g_hash_table_new_full ((GHashFunc) FcPatternHash, + priv->pattern_hash = p_hash_table_new_full ((GHashFunc) FcPatternHash, (GEqualFunc) FcPatternEqual, (GDestroyNotify) FcPatternDestroy, NULL); - priv->font_face_data_hash = g_hash_table_new_full ((GHashFunc)pango_fc_font_face_data_hash, + priv->font_face_data_hash = p_hash_table_new_full ((GHashFunc)pango_fc_font_face_data_hash, (GEqualFunc)pango_fc_font_face_data_equal, (GDestroyNotify)pango_fc_font_face_data_free, NULL); @@ -1066,19 +1067,19 @@ pango_fc_font_map_fini (PangoFcFontMap *fcfontmap) g_queue_free (priv->fontset_cache); priv->fontset_cache = NULL; - g_hash_table_destroy (priv->fontset_hash); + p_hash_table_destroy (priv->fontset_hash); priv->fontset_hash = NULL; - g_hash_table_destroy (priv->patterns_hash); + p_hash_table_destroy (priv->patterns_hash); priv->patterns_hash = NULL; - g_hash_table_destroy (priv->font_hash); + p_hash_table_destroy (priv->font_hash); priv->font_hash = NULL; - g_hash_table_destroy (priv->font_face_data_hash); + p_hash_table_destroy (priv->font_face_data_hash); priv->font_face_data_hash = NULL; - g_hash_table_destroy (priv->pattern_hash); + p_hash_table_destroy (priv->pattern_hash); priv->pattern_hash = NULL; for (i = 0; i < priv->n_families; i++) @@ -1199,7 +1200,7 @@ pango_fc_font_map_add (PangoFcFontMap *fcfontmap, key_copy = pango_fc_font_key_copy (key); _pango_fc_font_set_font_key (fcfont, key_copy); - g_hash_table_insert (priv->font_hash, key_copy, fcfont); + p_hash_table_insert (priv->font_hash, key_copy, fcfont); } /* Remove mapping from fcfont->key to fcfont */ @@ -1217,9 +1218,9 @@ _pango_fc_font_map_remove (PangoFcFontMap *fcfontmap, /* Only remove from fontmap hash if we are in it. This is not necessarily * the case after a cache_clear() call. */ if (priv->font_hash && - fcfont == g_hash_table_lookup (priv->font_hash, key)) + fcfont == p_hash_table_lookup (priv->font_hash, key)) { - g_hash_table_remove (priv->font_hash, key); + p_hash_table_remove (priv->font_hash, key); } _pango_fc_font_set_font_key (fcfont, NULL); pango_fc_font_key_free (key); @@ -1489,7 +1490,7 @@ uniquify_pattern (PangoFcFontMap *fcfontmap, PangoFcFontMapPrivate *priv = fcfontmap->priv; FcPattern *old_pattern; - old_pattern = g_hash_table_lookup (priv->pattern_hash, pattern); + old_pattern = p_hash_table_lookup (priv->pattern_hash, pattern); if (old_pattern) { return old_pattern; @@ -1497,7 +1498,7 @@ uniquify_pattern (PangoFcFontMap *fcfontmap, else { FcPatternReference (pattern); - g_hash_table_insert (priv->pattern_hash, pattern, pattern); + p_hash_table_insert (priv->pattern_hash, pattern, pattern); return pattern; } } @@ -1520,7 +1521,7 @@ pango_fc_font_map_new_font (PangoFcFontMap *fcfontmap, pango_fc_font_key_init (&key, fcfontmap, fontset_key, match); - fcfont = g_hash_table_lookup (priv->font_hash, &key); + fcfont = p_hash_table_lookup (priv->font_hash, &key); if (fcfont) return g_object_ref (fcfont); @@ -1708,7 +1709,7 @@ pango_fc_fontset_cache (PangoFcFontset *fontset, { PangoFcFontset *tmp_fontset = g_queue_pop_tail (cache); tmp_fontset->cache_link = NULL; - g_hash_table_remove (priv->fontset_hash, tmp_fontset->key); + p_hash_table_remove (priv->fontset_hash, tmp_fontset->key); } fontset->cache_link = g_list_prepend (NULL, fontset); @@ -1730,7 +1731,7 @@ pango_fc_font_map_load_fontset (PangoFontMap *fontmap, pango_fc_fontset_key_init (&key, fcfontmap, context, desc, language); - fontset = g_hash_table_lookup (priv->fontset_hash, &key); + fontset = p_hash_table_lookup (priv->fontset_hash, &key); if (G_UNLIKELY (!fontset)) { @@ -1740,7 +1741,7 @@ pango_fc_font_map_load_fontset (PangoFontMap *fontmap, return NULL; fontset = pango_fc_fontset_new (&key, patterns); - g_hash_table_insert (priv->fontset_hash, pango_fc_fontset_get_key (fontset), fontset); + p_hash_table_insert (priv->fontset_hash, pango_fc_fontset_get_key (fontset), fontset); pango_fc_patterns_unref (patterns); } @@ -1788,7 +1789,7 @@ pango_fc_font_map_get_font_face_data (PangoFcFontMap *fcfontmap, if (FcPatternGetInteger (font_pattern, FC_INDEX, 0, &key.id) != FcResultMatch) return NULL; - data = g_hash_table_lookup (priv->font_face_data_hash, &key); + data = p_hash_table_lookup (priv->font_face_data_hash, &key); if (G_LIKELY (data)) return data; @@ -1799,7 +1800,7 @@ pango_fc_font_map_get_font_face_data (PangoFcFontMap *fcfontmap, data->pattern = font_pattern; FcPatternReference (data->pattern); - g_hash_table_insert (priv->font_face_data_hash, data, data); + p_hash_table_insert (priv->font_face_data_hash, data, data); return data; } @@ -1995,7 +1996,7 @@ pango_fc_font_map_shutdown (PangoFcFontMap *fcfontmap) if (priv->closed) return; - g_hash_table_foreach (priv->font_hash, (GHFunc) shutdown_font, fcfontmap); + p_hash_table_foreach (priv->font_hash, (GHFunc) shutdown_font, fcfontmap); for (i = 0; i < priv->n_families; i++) priv->families[i]->fontmap = NULL; |