summaryrefslogtreecommitdiff
path: root/pango/pangofc-fontmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/pangofc-fontmap.c')
-rw-r--r--pango/pangofc-fontmap.c73
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);