diff options
author | Simon McVittie <smcv@debian.org> | 2020-11-04 10:54:08 +0000 |
---|---|---|
committer | Simon McVittie <smcv@debian.org> | 2020-11-04 10:54:08 +0000 |
commit | 87d94eafbcc2bad0c47e5bb9bbcf8135516f1edb (patch) | |
tree | 83b3982512fa8ba702bd1bddcf2f4d6229bd08ae | |
parent | ed51d2b432ce8a7cab5875d6dafad5270bf71bc9 (diff) | |
parent | 43808377088ea3eecc1607b910dee1477508587b (diff) |
New upstream version 1.47.0
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | docs/pango-sections.txt | 6 | ||||
-rwxr-xr-x | make-release.sh | 2 | ||||
-rw-r--r-- | meson.build | 2 | ||||
-rw-r--r-- | pango/pango-language.c | 36 | ||||
-rw-r--r-- | pango/pango-language.h | 3 | ||||
-rw-r--r-- | pango/pango-version-macros.h | 24 | ||||
-rw-r--r-- | pango/pangocairo-fcfontmap.c | 2 | ||||
-rw-r--r-- | pango/pangofc-font.c | 48 | ||||
-rw-r--r-- | pango/pangofc-font.h | 8 | ||||
-rw-r--r-- | pango/pangofc-fontmap-private.h | 16 | ||||
-rw-r--r-- | pango/pangofc-fontmap.c | 109 | ||||
-rw-r--r-- | pango/pangofc-fontmap.h | 46 | ||||
-rw-r--r-- | pango/pangofc-private.h | 3 | ||||
-rw-r--r-- | pango/pangoft2-fontmap.c | 39 | ||||
-rw-r--r-- | pango/pangoft2.h | 10 | ||||
-rw-r--r-- | pango/pangoxft-fontmap.c | 39 | ||||
-rw-r--r-- | pango/pangoxft.h | 10 | ||||
-rw-r--r-- | utils/viewer-pangoft2.c | 2 | ||||
-rw-r--r-- | utils/viewer-pangoxft.c | 4 |
20 files changed, 337 insertions, 78 deletions
@@ -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; } |