diff options
Diffstat (limited to 'pango/fonts.c')
-rw-r--r-- | pango/fonts.c | 90 |
1 files changed, 75 insertions, 15 deletions
diff --git a/pango/fonts.c b/pango/fonts.c index 3afc8f27..0f566a79 100644 --- a/pango/fonts.c +++ b/pango/fonts.c @@ -1704,10 +1704,6 @@ typedef struct { hb_font_t *hb_font; } PangoFontPrivate; -#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))) @@ -1723,12 +1719,6 @@ 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 gboolean pango_font_default_is_hinted (PangoFont *font) { @@ -1791,7 +1781,6 @@ pango_font_class_init (PangoFontClass *class G_GNUC_UNUSED) pclass = g_type_class_get_private ((GTypeClass *) class, PANGO_TYPE_FONT); - pclass->get_languages = pango_font_default_get_languages; pclass->is_hinted = pango_font_default_is_hinted; pclass->get_scale_factors = pango_font_default_get_scale_factors; pclass->has_char = pango_font_default_has_char; @@ -2582,7 +2571,8 @@ pango_font_family_is_variable (PangoFontFamily *family) * PangoFontFace */ -G_DEFINE_ABSTRACT_TYPE (PangoFontFace, pango_font_face, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE_WITH_CODE (PangoFontFace, pango_font_face, G_TYPE_OBJECT, + g_type_add_class_private (g_define_type_id, sizeof (PangoFontFaceClassPrivate))) static gboolean pango_font_face_default_is_monospace (PangoFontFace *face) @@ -2596,11 +2586,31 @@ pango_font_face_default_is_variable (PangoFontFace *face) return pango_font_family_is_variable (pango_font_face_get_family (face)); } +static gboolean +pango_font_face_default_supports_language (PangoFontFace *face, + PangoLanguage *language) +{ + return TRUE; +} + +static PangoLanguage ** +pango_font_face_default_get_languages (PangoFontFace *face) +{ + return NULL; +} + static void pango_font_face_class_init (PangoFontFaceClass *class G_GNUC_UNUSED) { + PangoFontFaceClassPrivate *pclass; + class->is_monospace = pango_font_face_default_is_monospace; class->is_variable = pango_font_face_default_is_variable; + + pclass = g_type_class_get_private ((GTypeClass *) class, PANGO_TYPE_FONT_FACE); + + pclass->get_languages = pango_font_face_default_get_languages; + pclass->supports_language = pango_font_face_default_supports_language; } static void @@ -2775,6 +2785,56 @@ pango_font_face_is_variable (PangoFontFace *face) } /** + * pango_font_face_supports_language: + * @face: a `PangoFontFace` + * @language: a `PangoLanguage` + * + * Returns whether @face has all the glyphs necessary to write @language. + * + * Returns: `TRUE` if @face supports @language + * + * Since: 1.52 + */ +gboolean +pango_font_face_supports_language (PangoFontFace *face, + PangoLanguage *language) +{ + PangoFontFaceClassPrivate *pclass = PANGO_FONT_FACE_GET_CLASS_PRIVATE (face); + + g_return_val_if_fail (PANGO_IS_FONT_FACE (face), FALSE); + + return pclass->supports_language (face, language); +} + +/** + * pango_font_face_get_languages: + * @face: a `PangoFontFace` + * + * Returns the languages that are supported by @face. + * + * 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 face + * and its fontmap are valid. + * + * Returns: (transfer none) (nullable) (array zero-terminated=1) (element-type PangoLanguage): + * an array of `PangoLanguage` + * + * Since: 1.52 + */ +PangoLanguage ** +pango_font_face_get_languages (PangoFontFace *face) +{ + PangoFontFaceClassPrivate *pclass = PANGO_FONT_FACE_GET_CLASS_PRIVATE (face); + + g_return_val_if_fail (PANGO_IS_FONT_FACE (face), FALSE); + + return pclass->get_languages (face); +} + +/** * pango_font_has_char: * @font: a `PangoFont` * @wc: a Unicode character @@ -2791,6 +2851,8 @@ pango_font_has_char (PangoFont *font, { PangoFontClassPrivate *pclass = PANGO_FONT_GET_CLASS_PRIVATE (font); + g_return_val_if_fail (PANGO_IS_FONT (font), FALSE); + return pclass->has_char (font, wc); } @@ -2841,9 +2903,7 @@ pango_font_get_features (PangoFont *font, PangoLanguage ** pango_font_get_languages (PangoFont *font) { - PangoFontClassPrivate *pclass = PANGO_FONT_GET_CLASS_PRIVATE (font); - - return pclass->get_languages (font); + return pango_font_face_get_languages (pango_font_get_face (font)); } /*< private > |