summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-11-05 06:57:44 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-11-05 07:00:12 -0400
commitccb651dd2a876a4f4a4cb9351f05332173e709ba (patch)
tree9f27180291126979f533764ad88d5bb79bb9f190
parent5fa29cedbd1a39ee4eb9b6bf63fab579cebad602 (diff)
downloadpango-advance-transform.tar.gz
Fix advance widths with transformsadvance-transform
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
-rw-r--r--pango/shape.c42
1 files changed, 13 insertions, 29 deletions
diff --git a/pango/shape.c b/pango/shape.c
index 79489105..52a7aabb 100644
--- a/pango/shape.c
+++ b/pango/shape.c
@@ -148,16 +148,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
@@ -167,16 +162,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
@@ -187,22 +177,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 *