From 26119af7a6bcac01cbd3999daf0e32eba2148b4d Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 21 Dec 2020 13:08:34 -0500 Subject: [PATCH] gsk: Improve glyph serialization The special case for ASCII glyphs is unfortunately not working very well, because of an oversight in pango: When I added subpixel positioning, I made pango_shape() default to not rounding, and make PangoLayout call pango_shape_with_flags() and pass the rounding information down. The upshot is that we need to use the _with_flags variant here and tell it to round position, so it matches what the text node contains. --- gsk/gskrendernodeparser.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/gsk/gskrendernodeparser.c b/gsk/gskrendernodeparser.c index a77e8a5a9a..45b500dc42 100644 --- a/gsk/gskrendernodeparser.c +++ b/gsk/gskrendernodeparser.c @@ -688,10 +688,16 @@ create_ascii_glyphs (PangoFont *font) glyph_string = pango_glyph_string_new (); for (i = MIN_ASCII_GLYPH; i < MAX_ASCII_GLYPH; i++) { - pango_shape ((char[2]) { i, 0 }, - 1, - ¬_a_hack, - glyph_string); + const char text[2] = { i, 0 }; + + pango_shape_with_flags (text, + 1, + text, + 1, + ¬_a_hack, + glyph_string, + PANGO_SHAPE_ROUND_POSITIONS); + if (glyph_string->num_glyphs != 1) { pango_glyph_string_free (glyph_string);