[pango/userfont: 4/15] add font extents




commit 7da87f668c8aceec85cbb28caefd6e9a0d14a72a
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Jan 27 21:09:26 2022 -0500

    add font extents

 pango/pango-hbface-private.h |  3 ++-
 pango/pango-hbface.c         | 11 +++++++----
 pango/pango-hbface.h         | 10 ++++++++--
 pango/pango-hbfont.c         | 17 ++++++++++++++++-
 pango/pangocairo-font.c      |  8 ++++----
 5 files changed, 37 insertions(+), 12 deletions(-)
---
diff --git a/pango/pango-hbface-private.h b/pango/pango-hbface-private.h
index db016fdc..7899d264 100644
--- a/pango/pango-hbface-private.h
+++ b/pango/pango-hbface-private.h
@@ -28,9 +28,10 @@
 typedef struct _PangoUserFontFuncs PangoUserFontFuncs;
 struct _PangoUserFontFuncs
 {
+  PangoHbFaceGetFontExtentsFunc font_extents_func;
   PangoHbFaceGetNominalGlyphFunc glyph_func;
   PangoHbFaceGetGlyphAdvanceFunc advance_func;
-  PangoHbFaceGetGlyphExtentsFunc extents_func;
+  PangoHbFaceGetGlyphExtentsFunc glyph_extents_func;
   PangoHbFaceRenderGlyphFunc render_func;
   gpointer user_data;
   GDestroyNotify destroy;
diff --git a/pango/pango-hbface.c b/pango/pango-hbface.c
index e5194fc5..ed433129 100644
--- a/pango/pango-hbface.c
+++ b/pango/pango-hbface.c
@@ -895,9 +895,10 @@ pango_hb_face_new_instance (PangoHbFace                *face,
 
 /**
  * pango_hb_face_new_user:
+ * @font_extents_func: the `PangoHbFaceGetFontExtentsFunc`
  * @glyph_func: the `PangoHbFaceGetNominalGlyphFunc`
  * @advance_func: the `PangoHbFaceGetGlyphAdvanceFunc`
- * @extents_func: the `PangoHbFaceGetGlyphExtentsFunc`
+ * @glyph_extents_func: the `PangoHbFaceGetGlyphExtentsFunc`
  * @render_func: the `PangoHbFaceRenderGlyphFunc`
  * @user_data: user data that will be assed to the callbacks
  * @destroy: destroy notify for @user_data
@@ -915,9 +916,10 @@ pango_hb_face_new_instance (PangoHbFace                *face,
  * Since: 1.52
  */
 PangoHbFace *
-pango_hb_face_new_user (PangoHbFaceGetNominalGlyphFunc   glyph_func,
+pango_hb_face_new_user (PangoHbFaceGetFontExtentsFunc    font_extents_func,
+                        PangoHbFaceGetNominalGlyphFunc   glyph_func,
                         PangoHbFaceGetGlyphAdvanceFunc   advance_func,
-                        PangoHbFaceGetGlyphExtentsFunc   extents_func,
+                        PangoHbFaceGetGlyphExtentsFunc   glyph_extents_func,
                         PangoHbFaceRenderGlyphFunc       render_func,
                         gpointer                         user_data,
                         GDestroyNotify                   destroy,
@@ -930,9 +932,10 @@ pango_hb_face_new_user (PangoHbFaceGetNominalGlyphFunc   glyph_func,
 
   self->user_font = g_new0 (PangoUserFontFuncs, 1);
 
+  self->user_font->font_extents_func = font_extents_func;
   self->user_font->glyph_func = glyph_func;
   self->user_font->advance_func = advance_func;
-  self->user_font->extents_func = extents_func,
+  self->user_font->glyph_extents_func = glyph_extents_func,
   self->user_font->render_func = render_func;
   self->user_font->user_data = user_data;
   self->user_font->destroy = destroy;
diff --git a/pango/pango-hbface.h b/pango/pango-hbface.h
index f1303cd6..9d428f8c 100644
--- a/pango/pango-hbface.h
+++ b/pango/pango-hbface.h
@@ -59,6 +59,11 @@ PangoHbFace *   pango_hb_face_new_instance      (PangoHbFace                *fac
                                                  const char                 *name,
                                                  const PangoFontDescription *description);
 
+typedef void          (* PangoHbFaceGetFontExtentsFunc)  (PangoHbFace       *face,
+                                                          int                size,
+                                                          hb_font_extents_t *extents,
+                                                          gpointer           user_data);
+
 typedef gboolean      (* PangoHbFaceGetNominalGlyphFunc) (PangoHbFace    *face,
                                                           hb_codepoint_t  unicode,
                                                           hb_codepoint_t *glyph,
@@ -82,9 +87,10 @@ typedef void          (* PangoHbFaceRenderGlyphFunc)     (PangoHbFace    *face,
                                                           gpointer        backend_data);
 
 PANGO_AVAILABLE_IN_1_52
-PangoHbFace *   pango_hb_face_new_user          (PangoHbFaceGetNominalGlyphFunc   glyph_func,
+PangoHbFace *   pango_hb_face_new_user          (PangoHbFaceGetFontExtentsFunc    font_extents_func,
+                                                 PangoHbFaceGetNominalGlyphFunc   glyph_func,
                                                  PangoHbFaceGetGlyphAdvanceFunc   advance_func,
-                                                 PangoHbFaceGetGlyphExtentsFunc   extents,
+                                                 PangoHbFaceGetGlyphExtentsFunc   glyph_extents_func,
                                                  PangoHbFaceRenderGlyphFunc       render_glyph,
                                                  gpointer                         user_data,
                                                  GDestroyNotify                   destroy,
diff --git a/pango/pango-hbfont.c b/pango/pango-hbfont.c
index 87a62f7e..cb6f7d9b 100644
--- a/pango/pango-hbfont.c
+++ b/pango/pango-hbfont.c
@@ -846,7 +846,21 @@ glyph_extents_func (hb_font_t *font, void *font_data,
   PangoUserFontFuncs *user_font = self->face->user_font;
   int size = self->size * self->dpi / 72.;
 
-  return user_font->extents_func (self->face, size, glyph, extents, user_font->user_data);
+  return user_font->glyph_extents_func (self->face, size, glyph, extents, user_font->user_data);
+}
+
+static hb_bool_t
+font_extents_func (hb_font_t *font, void *font_data,
+                   hb_font_extents_t *extents,
+                   void *user_data)
+{
+  PangoHbFont *self = font_data;
+  PangoUserFontFuncs *user_font = self->face->user_font;
+  int size = self->size * self->dpi / 72.;
+
+  user_font->font_extents_func (self->face, size, extents, user_font->user_data);
+
+  return TRUE;
 }
 
 static hb_font_t *
@@ -875,6 +889,7 @@ pango_hb_font_create_hb_font (PangoFont *font)
       hb_font_funcs_set_nominal_glyph_func (funcs, nominal_glyph_func, NULL, NULL);
       hb_font_funcs_set_glyph_h_advance_func (funcs, glyph_h_advance_func, NULL, NULL);
       hb_font_funcs_set_glyph_extents_func (funcs, glyph_extents_func, NULL, NULL);
+      hb_font_funcs_set_font_h_extents_func (funcs, font_extents_func, NULL, NULL);
 
       hb_font_set_funcs (hb_font, funcs, self, NULL);
 
diff --git a/pango/pangocairo-font.c b/pango/pangocairo-font.c
index 84cb8364..4e256640 100644
--- a/pango/pangocairo-font.c
+++ b/pango/pangocairo-font.c
@@ -100,10 +100,10 @@ render_func (cairo_scaled_font_t  *scaled_font,
                                             (hb_codepoint_t)glyph,
                                             user_font->user_data);
 
-  user_font->extents_func (font->face, 1024,
-                           (hb_codepoint_t)glyph,
-                           &glyph_extents,
-                           user_font->user_data);
+  user_font->glyph_extents_func (font->face, 1024,
+                                 (hb_codepoint_t)glyph,
+                                 &glyph_extents,
+                                 user_font->user_data);
 
   extents->x_bearing = glyph_extents.x_bearing / (double) 1024;
   extents->y_bearing = glyph_extents.y_bearing / (double) 1024;


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