From c9796d15e1ec5f8939f8b1ae368cb3352b6a9cb9 Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Mon, 22 Jul 2019 03:57:24 +0200 Subject: [PATCH] Fix sbix glyph extents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * The ‘height’ needs to be negated since the API returns “distance from top to bottom side”. * Similarly, the ‘y_offset‘ needs to be added to the height to get the ‘y_bearing’, since sbix’s offset is “the point in the glyph relative to its lower-left corner which corresponds to the origin” while ‘y_bearing’ is the “top side of glyph from origin”. With these changes the sbix glyph metrics return values similar to other tables, as they were otherwise unusable. --- src/hb-ot-color-sbix-table.hh | 4 ++-- test/api/test-ot-color.c | 4 ++-- .../fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf | Bin 0 -> 3128 bytes .../data/in-house/tests/color-fonts.tests | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 test/shaping/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf diff --git a/src/hb-ot-color-sbix-table.hh b/src/hb-ot-color-sbix-table.hh index 9b725c46e..8a915a661 100644 --- a/src/hb-ot-color-sbix-table.hh +++ b/src/hb-ot-color-sbix-table.hh @@ -235,9 +235,9 @@ struct sbix const PNGHeader &png = *blob->as(); extents->x_bearing = x_offset; - extents->y_bearing = y_offset; + extents->y_bearing = png.IHDR.height + y_offset; extents->width = png.IHDR.width; - extents->height = png.IHDR.height; + extents->height = -png.IHDR.height; /* Convert to font units. */ if (strike_ppem) diff --git a/test/api/test-ot-color.c b/test/api/test-ot-color.c index c0cbd77b9..d646f7371 100644 --- a/test/api/test-ot-color.c +++ b/test/api/test-ot-color.c @@ -426,9 +426,9 @@ test_hb_ot_color_png (void) g_assert (strncmp (data + 1, "PNG", 3) == 0); hb_font_get_glyph_extents (sbix_font, 1, &extents); g_assert_cmpint (extents.x_bearing, ==, 0); - g_assert_cmpint (extents.y_bearing, ==, 0); + g_assert_cmpint (extents.y_bearing, ==, 800); g_assert_cmpint (extents.width, ==, 800); - g_assert_cmpint (extents.height, ==, 800); + g_assert_cmpint (extents.height, ==, -800); hb_blob_destroy (blob); hb_font_destroy (sbix_font); diff --git a/test/shaping/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf b/test/shaping/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b1a8a33e93d3fd36dc72ff16fe09fbe4ce56bf37 GIT binary patch literal 3128 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] +../fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf:--font-funcs=ot --show-extents:U+1F600:[gid4=0+2550<0,1898,2555,-2405>]