[pango/simple-fontmap: 1/23] font: Add pango_font_face_is_variable/monospace




commit 86ecdd0c57b4c8986f61660590792ae133fc23a7
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Dec 29 13:41:12 2021 -0500

    font: Add pango_font_face_is_variable/monospace
    
    These are really properties of the individual
    faces, not the family.
    
    The default implementations of these functions
    simply return the corresponding family value.
    
    Add some tests for the new api.

 pango/fonts.c      | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 pango/pango-font.h | 12 +++++++-----
 tests/test-font.c  | 13 ++++++++++---
 3 files changed, 73 insertions(+), 8 deletions(-)
---
diff --git a/pango/fonts.c b/pango/fonts.c
index 04c9b4b0..28363ecd 100644
--- a/pango/fonts.c
+++ b/pango/fonts.c
@@ -2553,9 +2553,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
@@ -2687,6 +2701,48 @@ pango_font_face_get_family (PangoFontFace *face)
   return PANGO_FONT_FACE_GET_CLASS (face)->get_family (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`
diff --git a/pango/pango-font.h b/pango/pango-font.h
index de638c4d..0a997f08 100644
--- a/pango/pango-font.h
+++ b/pango/pango-font.h
@@ -509,11 +509,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 */
@@ -535,6 +532,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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]