diff options
author | Behdad Esfahbod <behdad@behdad.org> | 2015-04-30 18:00:14 -0400 |
---|---|---|
committer | Behdad Esfahbod <behdad@behdad.org> | 2015-04-30 18:00:14 -0400 |
commit | 4ad91ff6754f99d8c4f3ca1e09e2cc3005edb857 (patch) | |
tree | c111ed2f4bab45e42a0a6a626ede11acd55d6f60 /pango/pangofc-fontmap.c | |
parent | d4e0fb667815ad80bff60491a2125321ee88d1b7 (diff) | |
download | pango-4ad91ff6754f99d8c4f3ca1e09e2cc3005edb857.tar.gz |
Bug 547671 - Add pango_fc_font_map_[gs]et_fc_config()
Diffstat (limited to 'pango/pangofc-fontmap.c')
-rw-r--r-- | pango/pangofc-fontmap.c | 73 |
1 files changed, 68 insertions, 5 deletions
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c index 3fcc0c51..d4ff2dd6 100644 --- a/pango/pangofc-fontmap.c +++ b/pango/pangofc-fontmap.c @@ -150,6 +150,8 @@ struct _PangoFcFontMapPrivate GSList *findfuncs; guint closed : 1; + + FcConfig *fc_config; }; struct _PangoFcFontFaceData @@ -780,7 +782,7 @@ pango_fc_patterns_get_font_pattern (PangoFcPatterns *pats, int i, gboolean *prep FcResult result; if (!pats->match && !pats->fontset) { - pats->match = FcFontMatch (NULL, pats->pattern, &result); + pats->match = FcFontMatch (pats->fontmap->priv->fc_config, pats->pattern, &result); #ifdef FC_PATTERN /* The FC_PATTERN element, which points back to our the original * pattern defeats our hash tables. @@ -800,7 +802,7 @@ pango_fc_patterns_get_font_pattern (PangoFcPatterns *pats, int i, gboolean *prep if (!pats->fontset) { FcResult result; - pats->fontset = FcFontSort (NULL, pats->pattern, FcTrue, NULL, &result); + pats->fontset = FcFontSort (pats->fontmap->priv->fc_config, pats->pattern, FcTrue, NULL, &result); if (pats->match) { FcPatternDestroy (pats->match); @@ -1312,7 +1314,7 @@ pango_fc_font_map_list_families (PangoFontMap *fontmap, * the same family have different spacing values */ GHashTable *temp_family_hash; - fontset = FcFontList (NULL, pat, os); + fontset = FcFontList (priv->fc_config, pat, os); FcPatternDestroy (pat); FcObjectSetDestroy (os); @@ -1809,6 +1811,63 @@ pango_fc_font_map_cache_clear (PangoFcFontMap *fcfontmap) pango_font_map_changed (PANGO_FONT_MAP (fcfontmap)); } +/** + * pango_fc_font_map_set_fc_config: + * @fcfontmap: a #PangoFcFontMap + * @fcconfig: (nullable) a #FcConfig, or %NULL + * + * Set the FcConfig for this font map to use. The default value + * is %NULL, which causes Fontconfig to use its global "current config". + * You can create a new FcConfig object and use this API to attach it + * to a font map. + * + * This is particularly useful for example, if you want to use application + * fonts with Pango. For that, you would create a fresh FcConfig, add your + * app fonts to it, and attach it to a new Pango font map. + * + * This function acquires a reference to the FcConfig object; the caller + * does NOT need to retain a reference. + * + * Since: 1.38 + **/ +void +pango_fc_font_map_set_fc_config (PangoFcFontMap *fcfontmap, + FcConfig *fcconfig) +{ + FcConfig *oldconfig; + + g_return_if_fail (PANGO_IS_FC_FONT_MAP (fcfontmap)); + + oldconfig = fcfontmap->priv->fc_config; + + if (fcconfig) + FcConfigReference (fcconfig); + + fcfontmap->priv->fc_config = fcconfig; + + if (oldconfig) + FcConfigDestroy (oldconfig); +} + +/** + * pango_fc_font_map_get_fc_config: + * @fcfontmap: a #PangoFcFontMap + * + * Fetches FcConfig attached to a font map. See pango_fc_font_map_set_fc_config(). + * + * Returns: (nullable): the #FcConfig object attached to @fcfontmap, which + * might be %NULL. + * + * Since: 1.38 + **/ +FcConfig * +pango_fc_font_map_get_fc_config (PangoFcFontMap *fcfontmap) +{ + g_return_val_if_fail (PANGO_IS_FC_FONT_MAP (fcfontmap), NULL); + + return fcfontmap->priv->fc_config; +} + static PangoFcFontFaceData * pango_fc_font_map_get_font_face_data (PangoFcFontMap *fcfontmap, FcPattern *font_pattern) @@ -2238,6 +2297,7 @@ pango_fc_face_describe (PangoFontFace *face) FcResult res; FcPattern *match_pattern; FcPattern *result_pattern; + FcConfig *fc_config = NULL; if (G_UNLIKELY (!fcfamily)) return pango_font_description_new (); @@ -2264,7 +2324,10 @@ pango_fc_face_describe (PangoFontFace *face) FcConfigSubstitute (NULL, match_pattern, FcMatchPattern); FcDefaultSubstitute (match_pattern); - result_pattern = FcFontMatch (NULL, match_pattern, &res); + if (fcface->family && fcface->family->fontmap) + fc_config = fcface->family->fontmap->priv->fc_config; + + result_pattern = FcFontMatch (fc_config, match_pattern, &res); if (result_pattern) { desc = pango_fc_font_description_from_pattern (result_pattern, FALSE); @@ -2484,7 +2547,7 @@ pango_fc_family_list_faces (PangoFontFamily *family, PangoFcFace **faces; gint num = 0; - fontset = FcFontList (NULL, pat, os); + fontset = FcFontList (priv->fc_config, pat, os); FcPatternDestroy (pat); FcObjectSetDestroy (os); |