summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-11-16 13:30:46 -0600
committerFederico Mena Quintero <federico@gnome.org>2021-11-16 13:31:59 -0600
commit81f8a47df61f1df9ca82a08813c022150e7d96aa (patch)
tree3ffe966a47537d26995b07a7398f80cb8c87229a
parentdc5bde2a20cbb025c9d0ed29ed687740a4d027da (diff)
downloadpango-81f8a47df61f1df9ca82a08813c022150e7d96aa.tar.gz
Fix advance widths with transforms
The hb_font_t we were passing to Harfbuzz for shaping was not taking context transforms into account, and therefore was not scaling advance widths as necessary. Always go through pangos glyph extents to fix this. Fixes: #620 This is a backport of commit ccb651dd2a876a4f4a4cb9351f05332173e709ba
-rw-r--r--pango/pangofc-shape.c42
1 files changed, 13 insertions, 29 deletions
diff --git a/pango/pangofc-shape.c b/pango/pangofc-shape.c
index 0a5ce7f9..460635e8 100644
--- a/pango/pangofc-shape.c
+++ b/pango/pangofc-shape.c
@@ -207,16 +207,11 @@ pango_hb_font_get_glyph_h_advance (hb_font_t *font,
void *user_data G_GNUC_UNUSED)
{
PangoHbShapeContext *context = (PangoHbShapeContext *) font_data;
+ PangoRectangle logical;
- if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
- {
- PangoRectangle logical;
-
- pango_font_get_glyph_extents (context->font, glyph, NULL, &logical);
- return logical.width;
- }
+ pango_font_get_glyph_extents (context->font, glyph, NULL, &logical);
- return hb_font_get_glyph_h_advance (context->parent, glyph);
+ return logical.width;
}
static hb_position_t
@@ -226,16 +221,11 @@ pango_hb_font_get_glyph_v_advance (hb_font_t *font,
void *user_data G_GNUC_UNUSED)
{
PangoHbShapeContext *context = (PangoHbShapeContext *) font_data;
+ PangoRectangle logical;
- if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
- {
- PangoRectangle logical;
-
- pango_font_get_glyph_extents (context->font, glyph, NULL, &logical);
- return logical.height;
- }
+ pango_font_get_glyph_extents (context->font, glyph, NULL, &logical);
- return hb_font_get_glyph_v_advance (context->parent, glyph);
+ return logical.height;
}
static hb_bool_t
@@ -246,22 +236,16 @@ pango_hb_font_get_glyph_extents (hb_font_t *font,
void *user_data G_GNUC_UNUSED)
{
PangoHbShapeContext *context = (PangoHbShapeContext *) font_data;
+ PangoRectangle ink;
- if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
- {
- PangoRectangle ink;
-
- pango_font_get_glyph_extents (context->font, glyph, &ink, NULL);
+ pango_font_get_glyph_extents (context->font, glyph, &ink, NULL);
- extents->x_bearing = ink.x;
- extents->y_bearing = ink.y;
- extents->width = ink.width;
- extents->height = ink.height;
-
- return TRUE;
- }
+ extents->x_bearing = ink.x;
+ extents->y_bearing = ink.y;
+ extents->width = ink.width;
+ extents->height = ink.height;
- return hb_font_get_glyph_extents (context->parent, glyph, extents);
+ return TRUE;
}
static hb_font_t *