diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-07-31 13:05:31 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-07-31 14:53:09 -0400 |
commit | 3555527ce39359e19594fc23c825e17f483f824e (patch) | |
tree | a566f37307ffc4ae0763c92372a8990f706fa0a7 | |
parent | dce36bab102d2630c4406f134556afb59b5d04a2 (diff) | |
download | pango-3555527ce39359e19594fc23c825e17f483f824e.tar.gz |
Add pango_font_get_languages
Start using private vfuncs for PangoFont, and use it
to replace the recently introduced pango_fc_font_get_languages
with a frontend api.
-rw-r--r-- | pango/fonts.c | 44 | ||||
-rw-r--r-- | pango/pango-font-private.h | 4 | ||||
-rw-r--r-- | pango/pango-font.h | 3 | ||||
-rw-r--r-- | pango/pangofc-font.c | 19 | ||||
-rw-r--r-- | pango/pangofc-font.h | 3 |
5 files changed, 69 insertions, 4 deletions
diff --git a/pango/fonts.c b/pango/fonts.c index 79cf1251..27a973f8 100644 --- a/pango/fonts.c +++ b/pango/fonts.c @@ -1688,7 +1688,13 @@ typedef struct { hb_font_t *hb_font; } PangoFontPrivate; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (PangoFont, pango_font, G_TYPE_OBJECT) +#define PANGO_FONT_GET_CLASS_PRIVATE(font) ((PangoFontClassPrivate *) \ + g_type_class_get_private ((GTypeClass *) PANGO_FONT_GET_CLASS (font), \ + PANGO_TYPE_FONT)) + +G_DEFINE_ABSTRACT_TYPE_WITH_CODE (PangoFont, pango_font, G_TYPE_OBJECT, + G_ADD_PRIVATE (PangoFont) + g_type_add_class_private (g_define_type_id, sizeof (PangoFontClassPrivate))) static void pango_font_finalize (GObject *object) @@ -1701,12 +1707,22 @@ pango_font_finalize (GObject *object) G_OBJECT_CLASS (pango_font_parent_class)->finalize (object); } +static PangoLanguage ** +pango_font_default_get_languages (PangoFont *font) +{ + return NULL; +} + static void pango_font_class_init (PangoFontClass *class G_GNUC_UNUSED) { GObjectClass *object_class = G_OBJECT_CLASS (class); object_class->finalize = pango_font_finalize; + + pclass = g_type_class_get_private ((GTypeClass *) class, PANGO_TYPE_FONT); + + pclass->get_languages = pango_font_default_get_languages; } static void @@ -2625,3 +2641,29 @@ pango_font_get_features (PangoFont *font, if (PANGO_FONT_GET_CLASS (font)->get_features) PANGO_FONT_GET_CLASS (font)->get_features (font, features, len, num_features); } + +/** + * pango_font_get_languages: + * @font: a `PangoFont` + * + * Returns the languages that are supported by @font. + * + * If the font backend does not provide this information, + * %NULL is returned. For the fontconfig backend, 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.50 + */ +PangoLanguage ** +pango_font_get_languages (PangoFont *font) +{ + PangoFontClassPrivate *pclass = PANGO_FONT_GET_CLASS_PRIVATE (font); + + return pclass->get_languages (font); +} diff --git a/pango/pango-font-private.h b/pango/pango-font-private.h index befa1b94..54de2c01 100644 --- a/pango/pango-font-private.h +++ b/pango/pango-font-private.h @@ -33,6 +33,10 @@ G_BEGIN_DECLS PANGO_AVAILABLE_IN_ALL PangoFontMetrics *pango_font_metrics_new (void); +typedef struct { + PangoLanguage ** (* get_languages) (PangoFont *font); +} PangoFontClassPrivate; + G_END_DECLS #endif /* __PANGO_FONT_PRIVATE_H__ */ diff --git a/pango/pango-font.h b/pango/pango-font.h index 13f8a222..498338b2 100644 --- a/pango/pango-font.h +++ b/pango/pango-font.h @@ -601,6 +601,9 @@ void pango_font_get_features (PangoFont *font, PANGO_AVAILABLE_IN_1_44 hb_font_t * pango_font_get_hb_font (PangoFont *font); +PANGO_AVAILABLE_IN_1_50 +PangoLanguage ** pango_font_get_languages (PangoFont *font); + /** * PANGO_GLYPH_EMPTY: * diff --git a/pango/pangofc-font.c b/pango/pangofc-font.c index cd063854..2546e663 100644 --- a/pango/pangofc-font.c +++ b/pango/pangofc-font.c @@ -21,6 +21,7 @@ #include "config.h" +#include "pango-font-private.h" #include "pangofc-font-private.h" #include "pangofc-fontmap.h" #include "pangofc-private.h" @@ -69,6 +70,7 @@ static void pango_fc_font_get_features (PangoFont *font, guint len, guint *num_features); static hb_font_t * pango_fc_font_create_hb_font (PangoFont *font); +static PangoLanguage ** _pango_fc_font_get_languages (PangoFont *font); #define PANGO_FC_FONT_LOCK_FACE(font) (PANGO_FC_FONT_GET_CLASS (font)->lock_face (font)) #define PANGO_FC_FONT_UNLOCK_FACE(font) (PANGO_FC_FONT_GET_CLASS (font)->unlock_face (font)) @@ -81,6 +83,7 @@ pango_fc_font_class_init (PangoFcFontClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); PangoFontClass *font_class = PANGO_FONT_CLASS (class); + PangoFontClassPrivate *pclass; class->has_char = pango_fc_font_real_has_char; class->get_glyph = pango_fc_font_real_get_glyph; @@ -98,6 +101,10 @@ pango_fc_font_class_init (PangoFcFontClass *class) font_class->create_hb_font = pango_fc_font_create_hb_font; font_class->get_features = pango_fc_font_get_features; + pclass = g_type_class_get_private ((GTypeClass *) class, PANGO_TYPE_FONT); + + pclass->get_languages = _pango_fc_font_get_languages; + /** * PangoFcFont:pattern: * @@ -1046,18 +1053,26 @@ done: * array of `PangoLanguage`* * * Since: 1.48 + * Deprecated: 1.50: Use pango_font_get_language() */ PangoLanguage ** pango_fc_font_get_languages (PangoFcFont *font) { + return pango_font_get_languages (PANGO_FONT (font)); +} + +static PangoLanguage ** +_pango_fc_font_get_languages (PangoFont *font) +{ + PangoFcFont * fcfont = PANGO_FC_FONT (font); PangoFcFontMap *fontmap; PangoLanguage **languages; - fontmap = g_weak_ref_get ((GWeakRef *) &font->fontmap); + fontmap = g_weak_ref_get ((GWeakRef *) &fcfont->fontmap); if (!fontmap) return NULL; - languages = _pango_fc_font_map_get_languages (fontmap, font); + languages = _pango_fc_font_map_get_languages (fontmap, fcfont); g_object_unref (fontmap); return languages; diff --git a/pango/pangofc-font.h b/pango/pangofc-font.h index b4aa399e..89b0cc79 100644 --- a/pango/pangofc-font.h +++ b/pango/pangofc-font.h @@ -95,7 +95,8 @@ 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 + +PANGO_DEPRECATED_IN_1_50_FOR(pango_font_get_language) PangoLanguage ** pango_fc_font_get_languages (PangoFcFont *font); |