summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@debian.org>2020-11-04 10:54:08 +0000
committerSimon McVittie <smcv@debian.org>2020-11-04 10:54:08 +0000
commit87d94eafbcc2bad0c47e5bb9bbcf8135516f1edb (patch)
tree83b3982512fa8ba702bd1bddcf2f4d6229bd08ae
parented51d2b432ce8a7cab5875d6dafad5270bf71bc9 (diff)
parent43808377088ea3eecc1607b910dee1477508587b (diff)
New upstream version 1.47.0
-rw-r--r--NEWS6
-rw-r--r--docs/pango-sections.txt6
-rwxr-xr-xmake-release.sh2
-rw-r--r--meson.build2
-rw-r--r--pango/pango-language.c36
-rw-r--r--pango/pango-language.h3
-rw-r--r--pango/pango-version-macros.h24
-rw-r--r--pango/pangocairo-fcfontmap.c2
-rw-r--r--pango/pangofc-font.c48
-rw-r--r--pango/pangofc-font.h8
-rw-r--r--pango/pangofc-fontmap-private.h16
-rw-r--r--pango/pangofc-fontmap.c109
-rw-r--r--pango/pangofc-fontmap.h46
-rw-r--r--pango/pangofc-private.h3
-rw-r--r--pango/pangoft2-fontmap.c39
-rw-r--r--pango/pangoft2.h10
-rw-r--r--pango/pangoxft-fontmap.c39
-rw-r--r--pango/pangoxft.h10
-rw-r--r--utils/viewer-pangoft2.c2
-rw-r--r--utils/viewer-pangoxft.c4
20 files changed, 337 insertions, 78 deletions
diff --git a/NEWS b/NEWS
index 6ad03e12..8917cad2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,9 @@
+Overview of changes in 1.47.0
+=============================
+- Add pango_language_get_preferred
+- Add pango_fc_font_get_languages
+- Sort faces of a family by slant and weight
+
Overview of changes in 1.46.2
=============================
- Fix pango_win32_font_map_load_font with falback families
diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt
index 04b6b442..358f5bbf 100644
--- a/docs/pango-sections.txt
+++ b/docs/pango-sections.txt
@@ -644,6 +644,7 @@ pango_language_matches
pango_language_includes_script
pango_language_get_scripts
pango_language_get_default
+pango_language_get_preferred
pango_language_get_sample_string
<SUBSECTION Private>
@@ -979,6 +980,9 @@ pango_fc_font_map_config_changed
pango_fc_font_map_shutdown
pango_fc_font_map_set_config
pango_fc_font_map_get_config
+PangoFcSubstituteFunc
+pango_fc_font_map_set_default_substitute
+pango_fc_font_map_substitute_changed
pango_fc_font_description_from_pattern
PANGO_FC_FONT_FEATURES
PANGO_FC_GRAVITY
@@ -1010,6 +1014,8 @@ pango_fc_font_has_char
pango_fc_font_get_glyph
pango_fc_font_get_unknown_glyph
pango_fc_font_kern_glyphs
+pango_fc_font_get_languages
+pango_fc_font_get_pattern
<SUBSECTION Standard>
PANGO_FC_FONT
PANGO_IS_FC_FONT
diff --git a/make-release.sh b/make-release.sh
index 9d5a6607..d0b4b750 100755
--- a/make-release.sh
+++ b/make-release.sh
@@ -19,7 +19,7 @@ meson dist -C${release_build_dir} --include-subprojects || exit
meson configure -Dgtk_doc=true ${release_build_dir} || exit
ninja -C${release_build_dir} pango-doc || exit
-tar cf ${release_build_dir}/meson-dist/pango-docs-${version}.tar.xz ${release_build_dir}/docs/
+tar cf ${release_build_dir}/meson-dist/pango-docs-${version}.tar.xz -C${release_build_dir} docs/
echo -e "\n\nPango ${version} release on branch ${branch} in ./${release_build_dir}/:\n"
diff --git a/meson.build b/meson.build
index f4fbe1f5..36fc4112 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
project('pango', 'c', 'cpp',
- version: '1.46.2',
+ version: '1.47.0',
license: 'LGPLv2.1+',
default_options: [
'buildtype=debugoptimized',
diff --git a/pango/pango-language.c b/pango/pango-language.c
index 410ca0bf..04c3e0ca 100644
--- a/pango/pango-language.c
+++ b/pango/pango-language.c
@@ -791,13 +791,14 @@ parse_default_languages (void)
return (PangoLanguage **) g_array_free (langs, FALSE);
}
+G_LOCK_DEFINE_STATIC (languages);
+static gboolean initialized = FALSE; /* MT-safe */
+static PangoLanguage * const * languages = NULL; /* MT-safe */
+static GHashTable *hash = NULL; /* MT-safe */
+
static PangoLanguage *
_pango_script_get_default_language (PangoScript script)
{
- G_LOCK_DEFINE_STATIC (languages);
- static gboolean initialized = FALSE; /* MT-safe */
- static PangoLanguage * const * languages = NULL; /* MT-safe */
- static GHashTable *hash = NULL; /* MT-safe */
PangoLanguage *result, * const * p;
G_LOCK (languages);
@@ -835,6 +836,33 @@ out:
}
/**
+ * pango_language_get_preferred:
+ *
+ * Returns the list of languages that the user prefers, as specified
+ * by the PANGO_LANGUAGE or LANGUAGE environment variables, in order
+ * of preference. Note that this list does not necessarily include
+ * the language returned by pango_language_get_default().
+ *
+ * When choosing language-specific resources, such as the sample
+ * text returned by pango_language_get_sample_string(), you should
+ * first try the default language, followed by the languages returned
+ * by this function.
+ *
+ * Returns: (transfer none) (nullable): a %NULL-terminated array of
+ * PangoLanguage*
+ *
+ * Since: 1.48
+ */
+PangoLanguage **
+pango_language_get_preferred (void)
+{
+ /* We call this just for its side-effect of initializing languages */
+ _pango_script_get_default_language (PANGO_SCRIPT_COMMON);
+
+ return languages;
+}
+
+/**
* pango_script_get_sample_language:
* @script: a #PangoScript
*
diff --git a/pango/pango-language.h b/pango/pango-language.h
index 2ab07bc0..16e6512c 100644
--- a/pango/pango-language.h
+++ b/pango/pango-language.h
@@ -53,6 +53,9 @@ const char *pango_language_get_sample_string (PangoLanguage *language) G_GNUC
PANGO_AVAILABLE_IN_1_16
PangoLanguage *pango_language_get_default (void) G_GNUC_CONST;
+PANGO_AVAILABLE_IN_1_48
+PangoLanguage **pango_language_get_preferred (void) G_GNUC_CONST;
+
PANGO_AVAILABLE_IN_ALL
gboolean pango_language_matches (PangoLanguage *language,
const char *range_list) G_GNUC_PURE;
diff --git a/pango/pango-version-macros.h b/pango/pango-version-macros.h
index 52b37049..4008579c 100644
--- a/pango/pango-version-macros.h
+++ b/pango/pango-version-macros.h
@@ -262,6 +262,16 @@
*/
#define PANGO_VERSION_1_46 (G_ENCODE_VERSION (1, 46))
+/**
+ * PANGO_VERSION_1_48:
+ *
+ * A macro that evaluates to the 1.48 version of Pango, in a format
+ * that can be used by the C pre-processor.
+ *
+ * Since: 1.48
+ */
+#define PANGO_VERSION_1_48 (G_ENCODE_VERSION (1, 48))
+
/* evaluates to the current stable version; for development cycles,
* this means the next stable target
*/
@@ -681,4 +691,18 @@
# define PANGO_AVAILABLE_IN_1_46 _PANGO_EXTERN
#endif
+#if PANGO_VERSION_MIN_REQUIRED >= PANGO_VERSION_1_48
+# define PANGO_DEPRECATED_IN_1_48 PANGO_DEPRECATED
+# define PANGO_DEPRECATED_IN_1_48_FOR(f) PANGO_DEPRECATED_FOR(f)
+#else
+# define PANGO_DEPRECATED_IN_1_48 _PANGO_EXTERN
+# define PANGO_DEPRECATED_IN_1_48_FOR(f) _PANGO_EXTERN
+#endif
+
+#if PANGO_VERSION_MAX_ALLOWED < PANGO_VERSION_1_48
+# define PANGO_AVAILABLE_IN_1_48 PANGO_UNAVAILABLE(1, 48)
+#else
+# define PANGO_AVAILABLE_IN_1_48 _PANGO_EXTERN
+#endif
+
#endif /* __PANGO_VERSION_H__ */
diff --git a/pango/pangocairo-fcfontmap.c b/pango/pangocairo-fcfontmap.c
index 015b8170..dec59c8b 100644
--- a/pango/pangocairo-fcfontmap.c
+++ b/pango/pangocairo-fcfontmap.c
@@ -105,6 +105,8 @@ pango_cairo_fc_font_map_fontset_key_substitute (PangoFcFontMap *fcfontmap G_G
{
FcConfigSubstitute (pango_fc_font_map_get_config (fcfontmap), pattern, FcMatchPattern);
+ if (fcfontmap->substitute_func)
+ fcfontmap->substitute_func (pattern, fcfontmap->substitute_data);
if (fontkey)
cairo_ft_font_options_substitute (pango_fc_fontset_key_get_context_key (fontkey),
pattern);
diff --git a/pango/pangofc-font.c b/pango/pangofc-font.c
index 7456cd9e..01520cb4 100644
--- a/pango/pangofc-font.c
+++ b/pango/pangofc-font.c
@@ -1035,3 +1035,51 @@ pango_fc_font_create_hb_font (PangoFont *font)
done:
return hb_font;
}
+
+/**
+ * pango_fc_font_get_languages:
+ * @font: a #PangoFcFont
+ *
+ * Returns the languages that are supported by @font.
+ *
+ * This corresponds to the FC_LANG member of the FcPattern.
+ *
+ * The returned array is only valid as long as the font
+ * and its fontmap are valid.
+ *
+ * Returns: (transfer none) (nullable): a %NULL-terminated
+ * array of PangoLanguage*
+ *
+ * Since: 1.48
+ */
+PangoLanguage **
+pango_fc_font_get_languages (PangoFcFont *font)
+{
+ PangoFcFontMap *fontmap;
+ PangoLanguage **languages;
+
+ fontmap = g_weak_ref_get ((GWeakRef *) &font->fontmap);
+ if (!fontmap)
+ return NULL;
+
+ languages = _pango_fc_font_map_get_languages (fontmap, font);
+ g_object_unref (fontmap);
+
+ return languages;
+}
+
+/**
+ * pango_fc_font_get_pattern:
+ * @font: a #PangoFcFont
+ *
+ * Returns the FcPattern that @font is based on.
+ *
+ * Returns: the fontconfig pattern for this font
+ *
+ * Since: 1.48
+ */
+FcPattern *
+pango_fc_font_get_pattern (PangoFcFont *font)
+{
+ return font->font_pattern;
+}
diff --git a/pango/pangofc-font.h b/pango/pangofc-font.h
index 25a0277c..fbae5e10 100644
--- a/pango/pangofc-font.h
+++ b/pango/pangofc-font.h
@@ -94,6 +94,13 @@ gboolean pango_fc_font_has_char (PangoFcFont *font,
PANGO_AVAILABLE_IN_1_4
guint pango_fc_font_get_glyph (PangoFcFont *font,
gunichar wc);
+PANGO_AVAILABLE_IN_1_48
+PangoLanguage **
+ pango_fc_font_get_languages (PangoFcFont *font);
+
+PANGO_AVAILABLE_IN_1_48
+FcPattern *pango_fc_font_get_pattern (PangoFcFont *font);
+
PANGO_DEPRECATED_FOR(PANGO_GET_UNKNOWN_GLYPH)
PangoGlyph pango_fc_font_get_unknown_glyph (PangoFcFont *font,
gunichar wc);
@@ -106,5 +113,6 @@ FT_Face pango_fc_font_lock_face (PangoFcFont *font);
PANGO_DEPRECATED_IN_1_44_FOR(pango_font_get_hb_font)
void pango_fc_font_unlock_face (PangoFcFont *font);
+
G_END_DECLS
#endif /* __PANGO_FC_FONT_H__ */
diff --git a/pango/pangofc-fontmap-private.h b/pango/pangofc-fontmap-private.h
index 131f7266..b32982f2 100644
--- a/pango/pangofc-fontmap-private.h
+++ b/pango/pangofc-fontmap-private.h
@@ -94,14 +94,23 @@ struct _PangoFcFontMap
PangoFontMap parent_instance;
PangoFcFontMapPrivate *priv;
+
+ /* Function to call on prepared patterns to do final
+ * config tweaking.
+ */
+ PangoFcSubstituteFunc substitute_func;
+ gpointer substitute_data;
+ GDestroyNotify substitute_destroy;
};
/**
* PangoFcFontMapClass:
* @default_substitute: (nullable): Substitutes in default
* values for unspecified fields in a #FcPattern. This will
- * be called prior to creating a font for the pattern. May be
- * %NULL. Deprecated in favor of @font_key_substitute().
+ * be called prior to creating a font for the pattern.
+ * Implementations must call substitute_func if it is
+ * defined. May be %NULL. Deprecated in favor of
+ * @font_key_substitute().
* @new_font: Creates a new #PangoFcFont for the specified
* pattern of the appropriate type for this font map. The
* @pattern argument must be passed to the "pattern" property
@@ -127,7 +136,8 @@ struct _PangoFcFontMap
* @fontset_key_substitute: (nullable): Substitutes in
* default values for unspecified fields in a
* #FcPattern. This will be called prior to creating a font
- * for the pattern. May be %NULL. (Since: 1.24)
+ * for the pattern. Implementations must call substitute_func
+ * if it is defined. May be %NULL. (Since: 1.24)
* @create_font: (nullable): Creates a new #PangoFcFont for
* the specified pattern of the appropriate type for this
* font map using information from the font key that is
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c
index eed0960a..0f211c46 100644
--- a/pango/pangofc-fontmap.c
+++ b/pango/pangofc-fontmap.c
@@ -166,8 +166,9 @@ struct _PangoFcFontFaceData
int id; /* needed to handle TTC files with multiple faces */
/* Data */
- FcPattern *pattern; /* Referenced pattern that owns filename */
+ FcPattern *pattern; /* Referenced pattern that owns filename */
PangoCoverage *coverage;
+ PangoLanguage **languages;
hb_face_t *hb_face;
};
@@ -307,6 +308,8 @@ pango_fc_font_face_data_free (PangoFcFontFaceData *data)
if (data->coverage)
pango_coverage_unref (data->coverage);
+ g_free (data->languages);
+
hb_face_destroy (data->hb_face);
g_slice_free (PangoFcFontFaceData, data);
@@ -1337,6 +1340,9 @@ pango_fc_font_map_finalize (GObject *object)
pango_fc_font_map_shutdown (fcfontmap);
+ if (fcfontmap->substitute_destroy)
+ fcfontmap->substitute_destroy (fcfontmap->substitute_data);
+
G_OBJECT_CLASS (pango_fc_font_map_parent_class)->finalize (object);
}
@@ -1798,6 +1804,28 @@ pango_fc_default_substitute (PangoFcFontMap *fontmap,
PANGO_FC_FONT_MAP_GET_CLASS (fontmap)->default_substitute (fontmap, pattern);
}
+void
+pango_fc_font_map_set_default_substitute (PangoFcFontMap *fontmap,
+ PangoFcSubstituteFunc func,
+ gpointer data,
+ GDestroyNotify notify)
+{
+ if (fontmap->substitute_destroy)
+ fontmap->substitute_destroy (fontmap->substitute_data);
+
+ fontmap->substitute_func = func;
+ fontmap->substitute_data = data;
+ fontmap->substitute_destroy = notify;
+
+ pango_fc_font_map_substitute_changed (fontmap);
+}
+
+void
+pango_fc_font_map_substitute_changed (PangoFcFontMap *fontmap) {
+ pango_fc_font_map_cache_clear(fontmap);
+ pango_font_map_changed(PANGO_FONT_MAP (fontmap));
+}
+
static double
pango_fc_font_map_get_resolution (PangoFcFontMap *fcfontmap,
PangoContext *context)
@@ -2245,6 +2273,57 @@ _pango_fc_font_map_fc_to_coverage (FcCharSet *charset)
return (PangoCoverage *)coverage;
}
+static PangoLanguage **
+_pango_fc_font_map_fc_to_languages (FcLangSet *langset)
+{
+ FcStrSet *strset;
+ FcStrList *list;
+ FcChar8 *s;
+ GArray *langs;
+
+ langs = g_array_new (TRUE, FALSE, sizeof (PangoLanguage *));
+
+ strset = FcLangSetGetLangs (langset);
+ list = FcStrListCreate (strset);
+
+ FcStrListFirst (list);
+ while ((s = FcStrListNext (list)))
+ {
+ PangoLanguage *l = pango_language_from_string ((const char *)s);
+ g_array_append_val (langs, l);
+ }
+
+ FcStrListDone (list);
+ FcStrSetDestroy (strset);
+
+ return (PangoLanguage **) g_array_free (langs, FALSE);
+}
+
+PangoLanguage **
+_pango_fc_font_map_get_languages (PangoFcFontMap *fcfontmap,
+ PangoFcFont *fcfont)
+{
+ PangoFcFontFaceData *data;
+ FcLangSet *langset;
+
+ data = pango_fc_font_map_get_font_face_data (fcfontmap, fcfont->font_pattern);
+ if (G_UNLIKELY (!data))
+ return NULL;
+
+ if (G_UNLIKELY (data->languages == NULL))
+ {
+ /*
+ * Pull the languages out of the pattern, this
+ * doesn't require loading the font
+ */
+ if (FcPatternGetLangSet (fcfont->font_pattern, FC_LANG, 0, &langset) != FcResultMatch)
+ return NULL;
+
+ data->languages = _pango_fc_font_map_fc_to_languages (langset);
+ }
+
+ return data->languages;
+}
/**
* pango_fc_font_map_create_context:
* @fcfontmap: a #PangoFcFontMap
@@ -2726,6 +2805,32 @@ create_face (PangoFcFamily *fcfamily,
return face;
}
+static int
+compare_face (const void *p1, const void *p2)
+{
+ const PangoFcFace *f1 = *(const void **)p1;
+ const PangoFcFace *f2 = *(const void **)p2;
+ int w1, w2;
+ int s1, s2;
+
+ if (FcPatternGetInteger (f1->pattern, FC_WEIGHT, 0, &w1) != FcResultMatch)
+ w1 = FC_WEIGHT_MEDIUM;
+
+ if (FcPatternGetInteger (f1->pattern, FC_SLANT, 0, &s1) != FcResultMatch)
+ s1 = FC_SLANT_ROMAN;
+
+ if (FcPatternGetInteger (f2->pattern, FC_WEIGHT, 0, &w2) != FcResultMatch)
+ w2 = FC_WEIGHT_MEDIUM;
+
+ if (FcPatternGetInteger (f2->pattern, FC_SLANT, 0, &s2) != FcResultMatch)
+ s2 = FC_SLANT_ROMAN;
+
+ if (s1 != s2)
+ return s1 - s2; /* roman < italic < oblique */
+
+ return w1 - w2; /* from light to heavy */
+}
+
static void
ensure_faces (PangoFcFamily *fcfamily)
{
@@ -2835,6 +2940,8 @@ ensure_faces (PangoFcFamily *fcfamily)
faces = g_renew (PangoFcFace *, faces, num);
+ qsort (faces, num, sizeof (PangoFcFace *), compare_face);
+
fcfamily->n_faces = num;
fcfamily->faces = faces;
}
diff --git a/pango/pangofc-fontmap.h b/pango/pangofc-fontmap.h
index a41ae1d9..6fdf32d2 100644
--- a/pango/pangofc-fontmap.h
+++ b/pango/pangofc-fontmap.h
@@ -106,6 +106,52 @@ hb_face_t * pango_fc_font_map_get_hb_face (PangoFcFontMap *fcfontmap,
PangoFcFont *fcfont);
/**
+ * PangoFcSubstituteFunc:
+ * @pattern: the FcPattern to tweak.
+ * @data: user data.
+ *
+ * Function type for doing final config tweaking on prepared FcPatterns.
+ */
+typedef void (*PangoFcSubstituteFunc) (FcPattern *pattern,
+ gpointer data);
+
+/**
+ * pango_fc_font_map_set_default_substitute:
+ * @fontmap: a #PangoFcFontMap
+ * @func: function to call to to do final config tweaking
+ * on #FcPattern objects.
+ * @data: data to pass to @func
+ * @notify: function to call when @data is no longer used.
+ *
+ * Sets a function that will be called to do final configuration
+ * substitution on a #FcPattern before it is used to load
+ * the font. This function can be used to do things like set
+ * hinting and antialiasing options.
+ *
+ * Since: 1.48
+ */
+PANGO_AVAILABLE_IN_1_48
+void pango_fc_font_map_set_default_substitute (PangoFcFontMap *fontmap,
+ PangoFcSubstituteFunc func,
+ gpointer data,
+ GDestroyNotify notify);
+
+/**
+ * pango_fc_font_map_substitute_changed:
+ * @fontmap: a #PangoFcFontMap
+ *
+ * Call this function any time the results of the
+ * default substitution function set with
+ * pango_fc_font_map_set_default_substitute() change.
+ * That is, if your substitution function will return different
+ * results for the same input pattern, you must call this function.
+ *
+ * Since: 1.48
+ */
+PANGO_AVAILABLE_IN_1_48
+void pango_fc_font_map_substitute_changed (PangoFcFontMap *fontmap);
+
+/**
* PANGO_FC_GRAVITY:
*
* String representing a fontconfig property name that Pango sets on any
diff --git a/pango/pangofc-private.h b/pango/pangofc-private.h
index 27b96df4..7e216ed9 100644
--- a/pango/pangofc-private.h
+++ b/pango/pangofc-private.h
@@ -78,6 +78,9 @@ _PANGO_EXTERN
PangoFontMetrics *pango_fc_font_create_base_metrics_for_context (PangoFcFont *font,
PangoContext *context);
+PangoLanguage **_pango_fc_font_map_get_languages (PangoFcFontMap *fcfontmap,
+ PangoFcFont *fcfont);
+
G_END_DECLS
#endif /* __PANGOFC_PRIVATE_H__ */
diff --git a/pango/pangoft2-fontmap.c b/pango/pangoft2-fontmap.c
index 60ca3e79..4fb64616 100644
--- a/pango/pangoft2-fontmap.c
+++ b/pango/pangoft2-fontmap.c
@@ -52,13 +52,6 @@ struct _PangoFT2FontMap
double dpi_x;
double dpi_y;
- /* Function to call on prepared patterns to do final
- * config tweaking.
- */
- PangoFT2SubstituteFunc substitute_func;
- gpointer substitute_data;
- GDestroyNotify substitute_destroy;
-
PangoRenderer *renderer;
};
@@ -117,9 +110,6 @@ pango_ft2_font_map_finalize (GObject *object)
if (ft2fontmap->renderer)
g_object_unref (ft2fontmap->renderer);
- if (ft2fontmap->substitute_destroy)
- ft2fontmap->substitute_destroy (ft2fontmap->substitute_data);
-
G_OBJECT_CLASS (pango_ft2_font_map_parent_class)->finalize (object);
FT_Done_FreeType (ft2fontmap->library);
@@ -176,6 +166,9 @@ pango_ft2_font_map_changed (PangoFontMap *fontmap)
* the font. This function can be used to do things like set
* hinting and antialiasing options.
*
+ * Deprecated: 1.46: Use pango_fc_font_map_set_default_substitute()
+ * instead.
+ *
* Since: 1.2
**/
void
@@ -184,18 +177,8 @@ pango_ft2_font_map_set_default_substitute (PangoFT2FontMap *fontmap,
gpointer data,
GDestroyNotify notify)
{
- fontmap->serial++;
- if (fontmap->serial == 0)
- fontmap->serial++;
-
- if (fontmap->substitute_destroy)
- fontmap->substitute_destroy (fontmap->substitute_data);
-
- fontmap->substitute_func = func;
- fontmap->substitute_data = data;
- fontmap->substitute_destroy = notify;
-
- pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (fontmap));
+ PangoFcFontMap *fcfontmap = PANGO_FC_FONT_MAP (fontmap);
+ pango_fc_font_map_set_default_substitute(fcfontmap, func, data, notify);
}
/**
@@ -208,15 +191,15 @@ pango_ft2_font_map_set_default_substitute (PangoFT2FontMap *fontmap,
* That is, if your substitution function will return different
* results for the same input pattern, you must call this function.
*
+ * Deprecated: 1.46: Use pango_fc_font_map_substitute_changed()
+ * instead.
+ *
* Since: 1.2
**/
void
pango_ft2_font_map_substitute_changed (PangoFT2FontMap *fontmap)
{
- fontmap->serial++;
- if (fontmap->serial == 0)
- fontmap->serial++;
- pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (fontmap));
+ pango_fc_font_map_substitute_changed(PANGO_FC_FONT_MAP (fontmap));
}
/**
@@ -363,8 +346,8 @@ _pango_ft2_font_map_default_substitute (PangoFcFontMap *fcfontmap,
FcConfigSubstitute (NULL, pattern, FcMatchPattern);
- if (ft2fontmap->substitute_func)
- ft2fontmap->substitute_func (pattern, ft2fontmap->substitute_data);
+ if (fcfontmap->substitute_func)
+ fcfontmap->substitute_func (pattern, fcfontmap->substitute_data);
if (FcPatternGet (pattern, FC_DPI, 0, &v) == FcResultNoMatch)
FcPatternAddDouble (pattern, FC_DPI, ft2fontmap->dpi_y);
diff --git a/pango/pangoft2.h b/pango/pangoft2.h
index 483bc366..892aa039 100644
--- a/pango/pangoft2.h
+++ b/pango/pangoft2.h
@@ -28,6 +28,7 @@
#include <ft2build.h>
#include FT_FREETYPE_H
+#include <pango/pangofc-fontmap.h>
#include <pango/pango-layout.h>
#include <pango/pangofc-font.h>
@@ -66,8 +67,7 @@ typedef struct _PangoFT2FontMap PangoFT2FontMap;
*
* Function type for doing final config tweaking on prepared FcPatterns.
*/
-typedef void (*PangoFT2SubstituteFunc) (FcPattern *pattern,
- gpointer data);
+typedef PangoFcSubstituteFunc PangoFT2SubstituteFunc;
/* Calls for applications */
@@ -115,14 +115,14 @@ PANGO_AVAILABLE_IN_1_2
void pango_ft2_font_map_set_resolution (PangoFT2FontMap *fontmap,
double dpi_x,
double dpi_y);
-PANGO_AVAILABLE_IN_1_2
+#ifndef PANGO_DISABLE_DEPRECATED
+PANGO_DEPRECATED_IN_1_48_FOR(pango_fc_font_map_set_default_substitute)
void pango_ft2_font_map_set_default_substitute (PangoFT2FontMap *fontmap,
PangoFT2SubstituteFunc func,
gpointer data,
GDestroyNotify notify);
-PANGO_AVAILABLE_IN_1_2
+PANGO_DEPRECATED_IN_1_48_FOR(pango_fc_font_map_substitute_changed)
void pango_ft2_font_map_substitute_changed (PangoFT2FontMap *fontmap);
-#ifndef PANGO_DISABLE_DEPRECATED
PANGO_DEPRECATED_IN_1_22_FOR(pango_font_map_create_context)
PangoContext *pango_ft2_font_map_create_context (PangoFT2FontMap *fontmap);
#endif
diff --git a/pango/pangoxft-fontmap.c b/pango/pangoxft-fontmap.c
index fce8c665..82955165 100644
--- a/pango/pangoxft-fontmap.c
+++ b/pango/pangoxft-fontmap.c
@@ -46,13 +46,6 @@ struct _PangoXftFontMap
Display *display;
int screen;
- /* Function to call on prepared patterns to do final
- * config tweaking.
- */
- PangoXftSubstituteFunc substitute_func;
- gpointer substitute_data;
- GDestroyNotify substitute_destroy;
-
PangoRenderer *renderer;
};
@@ -108,9 +101,6 @@ pango_xft_font_map_finalize (GObject *object)
fontmaps = g_slist_remove (fontmaps, object);
G_UNLOCK (fontmaps);
- if (xftfontmap->substitute_destroy)
- xftfontmap->substitute_destroy (xftfontmap->substitute_data);
-
G_OBJECT_CLASS (pango_xft_font_map_parent_class)->finalize (object);
}
@@ -297,6 +287,9 @@ pango_xft_shutdown_display (Display *display,
* the font. This function can be used to do things like set
* hinting and antialiasing options.
*
+ * Deprecated: 1.46: Use pango_fc_font_map_set_default_substitute()
+ * instead.
+ *
* Since: 1.2
**/
void
@@ -308,18 +301,8 @@ pango_xft_set_default_substitute (Display *display,
{
PangoXftFontMap *xftfontmap = (PangoXftFontMap *)pango_xft_get_font_map (display, screen);
- xftfontmap->serial++;
- if (xftfontmap->serial == 0)
- xftfontmap->serial++;
-
- if (xftfontmap->substitute_destroy)
- xftfontmap->substitute_destroy (xftfontmap->substitute_data);
-
- xftfontmap->substitute_func = func;
- xftfontmap->substitute_data = data;
- xftfontmap->substitute_destroy = notify;
-
- pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (xftfontmap));
+ PangoFcFontMap *fcfontmap = PANGO_FC_FONT_MAP (xftfontmap);
+ pango_fc_font_map_set_default_substitute(fcfontmap, func, data, notify);
}
/**
@@ -333,6 +316,9 @@ pango_xft_set_default_substitute (Display *display,
* That is, if your substitution function will return different
* results for the same input pattern, you must call this function.
*
+ * Deprecated: 1.46: Use pango_fc_font_map_substitute_changed()
+ * instead.
+ *
* Since: 1.2
**/
void
@@ -341,10 +327,7 @@ pango_xft_substitute_changed (Display *display,
{
PangoXftFontMap *xftfontmap = (PangoXftFontMap *)pango_xft_get_font_map (display, screen);
- xftfontmap->serial++;
- if (xftfontmap->serial == 0)
- xftfontmap->serial++;
- pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (xftfontmap));
+ pango_fc_font_map_substitute_changed(PANGO_FC_FONT_MAP (xftfontmap));
}
void
@@ -408,8 +391,8 @@ pango_xft_font_map_default_substitute (PangoFcFontMap *fcfontmap,
double d;
FcConfigSubstitute (NULL, pattern, FcMatchPattern);
- if (xftfontmap->substitute_func)
- xftfontmap->substitute_func (pattern, xftfontmap->substitute_data);
+ if (fcfontmap->substitute_func)
+ fcfontmap->substitute_func (pattern, fcfontmap->substitute_data);
XftDefaultSubstitute (xftfontmap->display, xftfontmap->screen, pattern);
if (FcPatternGetDouble (pattern, FC_PIXEL_SIZE, 0, &d) == FcResultMatch && d == 0.0)
{
diff --git a/pango/pangoxft.h b/pango/pangoxft.h
index f14b89c9..eb17f97c 100644
--- a/pango/pangoxft.h
+++ b/pango/pangoxft.h
@@ -23,6 +23,7 @@
#ifndef __PANGOXFT_H__
#define __PANGOXFT_H__
+#include <pango/pangofc-fontmap.h>
#include <pango/pango-context.h>
#include <pango/pango-ot.h>
#include <pango/pangofc-font.h>
@@ -84,8 +85,7 @@ typedef struct _PangoXftFont PangoXftFont;
*
* Function type for doing final config tweaking on prepared FcPatterns.
*/
-typedef void (*PangoXftSubstituteFunc) (FcPattern *pattern,
- gpointer data);
+typedef PangoFcSubstituteFunc PangoXftSubstituteFunc;
/* Calls for applications
*/
@@ -101,15 +101,17 @@ PANGO_AVAILABLE_IN_1_2
void pango_xft_shutdown_display (Display *display,
int screen);
-PANGO_AVAILABLE_IN_1_2
+#ifndef PANGO_DISABLE_DEPRECATED
+PANGO_DEPRECATED_IN_1_48_FOR(pango_fc_font_map_set_default_substitute)
void pango_xft_set_default_substitute (Display *display,
int screen,
PangoXftSubstituteFunc func,
gpointer data,
GDestroyNotify notify);
-PANGO_AVAILABLE_IN_1_2
+PANGO_DEPRECATED_IN_1_48_FOR(pango_fc_font_map_substitute_changed)
void pango_xft_substitute_changed (Display *display,
int screen);
+#endif
PANGO_AVAILABLE_IN_ALL
GType pango_xft_font_map_get_type (void) G_GNUC_CONST;
diff --git a/utils/viewer-pangoft2.c b/utils/viewer-pangoft2.c
index 87973c80..3a698b8e 100644
--- a/utils/viewer-pangoft2.c
+++ b/utils/viewer-pangoft2.c
@@ -51,7 +51,7 @@ pangoft2_view_create (const PangoViewer *klass G_GNUC_UNUSED)
fontmap = pango_ft2_font_map_new ();
pango_ft2_font_map_set_resolution (PANGO_FT2_FONT_MAP (fontmap), opt_dpi, opt_dpi);
- pango_ft2_font_map_set_default_substitute (PANGO_FT2_FONT_MAP (fontmap), substitute_func, NULL, NULL);
+ pango_fc_font_map_set_default_substitute (PANGO_FC_FONT_MAP (fontmap), substitute_func, NULL, NULL);
return fontmap;
}
diff --git a/utils/viewer-pangoxft.c b/utils/viewer-pangoxft.c
index 948cd90e..95a4545e 100644
--- a/utils/viewer-pangoxft.c
+++ b/utils/viewer-pangoxft.c
@@ -51,8 +51,8 @@ pangoxft_view_create (const PangoViewer *klass)
XftInit (NULL);
- pango_xft_set_default_substitute (instance->display, instance->screen,
- default_substitute, NULL, NULL);
+ pango_fc_font_map_set_default_substitute (PANGO_FC_FONT_MAP (pango_xft_get_font_map (instance->display, instance->screen)),
+ default_substitute, NULL, NULL);
return instance;
}