diff options
-rw-r--r-- | pango/fonts.c | 80 | ||||
-rw-r--r-- | pango/pango-font.h | 12 | ||||
-rw-r--r-- | tests/test-font.c | 13 |
3 files changed, 91 insertions, 14 deletions
diff --git a/pango/fonts.c b/pango/fonts.c index e502d2b3..3afc8f27 100644 --- a/pango/fonts.c +++ b/pango/fonts.c @@ -2520,18 +2520,24 @@ pango_font_family_get_face (PangoFontFamily *family, * A monospace font is a font designed for text display where the the * characters form a regular grid. * - * For Western languages this would - * mean that the advance width of all characters are the same, but - * this categorization also includes Asian fonts which include - * double-width characters: characters that occupy two grid cells. - * g_unichar_iswide() returns a result that indicates whether a - * character is typically double-width in a monospace font. + * For Western languages this would mean that the advance width of all + * characters are the same, but this categorization also includes Asian + * fonts which include double-width characters: characters that occupy + * two grid cells. [function@GLib.unichar_iswide] returns a result that + * indicates whether a character is typically double-width in a monospace + * font. * * The best way to find out the grid-cell size is to call * [method@Pango.FontMetrics.get_approximate_digit_width], since the * results of [method@Pango.FontMetrics.get_approximate_char_width] may * be affected by double-width characters. * + * Note that a font family can in principle contain a mixture of + * monospace and non-monospace faces (although well-behaved families + * won't). Use [method@Pango.FontFace.is_monospace] to examine individual + * faces. This function will return `TRUE` as long as the family contains + * any monospace faces. + * * Return value: %TRUE if the family is monospace. * * Since: 1.4 @@ -2554,6 +2560,12 @@ pango_font_family_is_monospace (PangoFontFamily *family) * Such axes are also known as _variations_; see * [method@Pango.FontDescription.set_variations] for more information. * + * Note that a font family can in principle contain a mixture of + * variable and non-variable faces, and even variable and non-variable + * versions of the same face. Use [method@Pango.FontFace.is_variable] + * to examine individual faces. This function will return `TRUE` as + * long as the family contains any variable faces. + * * Return value: %TRUE if the family is variable * * Since: 1.44 @@ -2572,9 +2584,23 @@ pango_font_family_is_variable (PangoFontFamily *family) G_DEFINE_ABSTRACT_TYPE (PangoFontFace, pango_font_face, G_TYPE_OBJECT) +static gboolean +pango_font_face_default_is_monospace (PangoFontFace *face) +{ + return pango_font_family_is_monospace (pango_font_face_get_family (face)); +} + +static gboolean +pango_font_face_default_is_variable (PangoFontFace *face) +{ + return pango_font_family_is_variable (pango_font_face_get_family (face)); +} + static void pango_font_face_class_init (PangoFontFaceClass *class G_GNUC_UNUSED) { + class->is_monospace = pango_font_face_default_is_monospace; + class->is_variable = pango_font_face_default_is_variable; } static void @@ -2707,6 +2733,48 @@ pango_font_face_get_family (PangoFontFace *face) } /** + * pango_font_face_is_monospace: + * @face: a `PangoFontFace` + * + * A monospace font is a font designed for text display where the the + * characters form a regular grid. + * + * See [method@Pango.FontFamily.is_monospace] for more details. + * + * Returns: `TRUE` if @face is monospace + * + * Since: 1.52 + */ +gboolean +pango_font_face_is_monospace (PangoFontFace *face) +{ + g_return_val_if_fail (PANGO_IS_FONT_FACE (face), FALSE); + + return PANGO_FONT_FACE_GET_CLASS (face)->is_monospace (face); +} + +/** + * pango_font_face_is_variable: + * @face: a `PangoFontFace` + * + * A variable font is a font which has axes that can be modified + * to produce variations. + * + * See [method@Pango.FontFamily.is_variable] for more details. + * + * Returns: `TRUE` if @face is variable + * + * Since: 1.52 + */ +gboolean +pango_font_face_is_variable (PangoFontFace *face) +{ + g_return_val_if_fail (PANGO_IS_FONT_FACE (face), FALSE); + + return PANGO_FONT_FACE_GET_CLASS (face)->is_variable (face); +} + +/** * pango_font_has_char: * @font: a `PangoFont` * @wc: a Unicode character diff --git a/pango/pango-font.h b/pango/pango-font.h index 350e4e29..d54dd820 100644 --- a/pango/pango-font.h +++ b/pango/pango-font.h @@ -506,11 +506,8 @@ struct _PangoFontFaceClass gboolean (*is_synthesized) (PangoFontFace *face); PangoFontFamily * (*get_family) (PangoFontFace *face); - /*< private >*/ - - /* Padding for future expansion */ - void (*_pango_reserved3) (void); - void (*_pango_reserved4) (void); + gboolean (*is_monospace) (PangoFontFace *face); + gboolean (*is_variable) (PangoFontFace *face); }; #endif /* PANGO_DISABLE_DEPRECATED */ @@ -532,6 +529,11 @@ gboolean pango_font_face_is_synthesized (PangoFontFace *face) G_GN PANGO_AVAILABLE_IN_1_46 PangoFontFamily * pango_font_face_get_family (PangoFontFace *face); +PANGO_AVAILABLE_IN_1_52 +gboolean pango_font_face_is_monospace (PangoFontFace *face); +PANGO_AVAILABLE_IN_1_52 +gboolean pango_font_face_is_variable (PangoFontFace *face); + /* * PangoFont diff --git a/tests/test-font.c b/tests/test-font.c index 2eef4396..2fa54cdf 100644 --- a/tests/test-font.c +++ b/tests/test-font.c @@ -455,6 +455,15 @@ test_font_models (void) g_assert_true (pango_font_face_get_family (PANGO_FONT_FACE (obj2)) == (PangoFontFamily *)obj); + if (g_ascii_strcasecmp (pango_font_family_get_name (PANGO_FONT_FAMILY (obj)), "monospace") == 0) + g_assert_true (pango_font_face_is_monospace (PANGO_FONT_FACE (obj2))); + + if (pango_font_face_is_monospace (PANGO_FONT_FACE (obj2))) + g_assert_true (pango_font_family_is_monospace (PANGO_FONT_FAMILY (obj))); + + if (pango_font_face_is_variable (PANGO_FONT_FACE (obj2))) + g_assert_true (pango_font_family_is_variable (PANGO_FONT_FAMILY (obj))); + pango_font_face_list_sizes (PANGO_FONT_FACE (obj2), &sizes, &n_sizes); g_assert_true ((sizes == NULL) == (n_sizes == 0)); g_free (sizes); @@ -462,9 +471,7 @@ test_font_models (void) if (pango_font_family_is_monospace (PANGO_FONT_FAMILY (obj))) { if (pango_font_face_is_synthesized (PANGO_FONT_FACE (obj2))) - { - monospace_found = TRUE; - } + monospace_found = TRUE; } g_object_unref (obj2); |