From dd64266ea444baa4507ce29d88f63d81132d9577 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 24 Jan 2023 19:26:20 -0500 Subject: [PATCH] Add a test for glyph extents This verifies a recent fix for COLRv1 returning 0,0,-1,1 for extents of non-painting glyphs. --- test/api/Makefile.am | 1 + test/api/fonts/adwaita.ttf | Bin 0 -> 1332 bytes test/api/meson.build | 1 + test/api/test-extents.c | 104 +++++++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 test/api/fonts/adwaita.ttf create mode 100644 test/api/test-extents.c diff --git a/test/api/Makefile.am b/test/api/Makefile.am index 7d738c6bd..c021eca6c 100644 --- a/test/api/Makefile.am +++ b/test/api/Makefile.am @@ -42,6 +42,7 @@ TEST_PROGS = \ test-cplusplus \ test-common \ test-draw \ + test-extents \ test-font \ test-font-scale \ test-instance-cff2 \ diff --git a/test/api/fonts/adwaita.ttf b/test/api/fonts/adwaita.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6415611ce901af5073cb296eb30c5596aaa2f340 GIT binary patch literal 1332 zcmZuxO=ufO7=1Il+N4gplCXCbV%3r?TPfI;rCm!->R>E~KQ@B4lG zjXpsDIF3)DVfI}0!o|V;g%g1OCAB-}YLyEwgXtfDNRrsDUYc+gs|%Zec!&7Idc)tq z7OoI~Pki>;>L<(g6=xfeI(3&xE~P;vCB{w8g-V`QbVwR5y2ek6WK zY_6`?eKCyBiT4$5_&Xcu!`sA+L3+(^EXCeG^$no0CiXYhH@6atzuhI@8u2BlZ{e<= zFmEkJ&;A8Xl>vVF^FZZmpKf62FSI>E15#1qyWyT;N4$t7%;A!YZ1(y{*J{tInNP=Av&skZ+5g-xI z#78snj4ST7z7UhGX9xP%hc#D!SFw7`{>{?!G=We86^H zD?6OaoyyB%e6n1gnvq4fRG5*{ZQ4T#FI7w?OC!zkRBI+ZHkNKSo!XRX9uwJ8GFeP} z(j3zEwAWKfPaZSPsjAa#rpCup|2#~MH?!rzq?3}DovMnEUgC`esfgX+cj>}W_cO}c zVwX8RX!54IZ?S+V1~Ep*jAN6ZL7ur1nI$Z;cU`AkE|xS>w-j}!TvDGR{}9^~b8{1| zI}?@411;L`^+)xOVwM&2VzwO<3v+pz=peT9bKawVu1Bq(>}Y89qBc8gU|!vh{u(=H z61QbZ+3d&~CXwvOI)+f|$Pt{xT1Pghzl{p6VjDiLbLM@c7w(J(R9sK26Dzj&ZewC7WG8i;WZa_9QgO=vO*X8C`j o286yHF(M&m!wM<`^~VLiYyGYNtUX~QjY_BPZrXhrU`I{VzhjZr7ytkO literal 0 HcmV?d00001 diff --git a/test/api/meson.build b/test/api/meson.build index a128e648a..dd23fc7c4 100644 --- a/test/api/meson.build +++ b/test/api/meson.build @@ -15,6 +15,7 @@ tests = [ 'test-cplusplus.cc', 'test-common.c', 'test-draw.c', + 'test-extents.c', 'test-font.c', 'test-font-scale.c', 'test-instance-cff2.c', diff --git a/test/api/test-extents.c b/test/api/test-extents.c new file mode 100644 index 000000000..860075176 --- /dev/null +++ b/test/api/test-extents.c @@ -0,0 +1,104 @@ +/* + * Copyright © 2023 Red Hat, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Author(s): Matthias Clasen + */ + +#include "hb-test.h" + + +static void +test_glyph_extents (void) +{ + hb_face_t *face; + hb_font_t *font; + hb_glyph_extents_t extents; + hb_bool_t ret; + + /* This font contains a COLRv1 glyph with a ClipBox, + * and various components without. The main thing + * we test here is that glyphs with no paint return + * 0,0,0,0 and not meaningless numbers. + */ + + face = hb_test_open_font_file ("fonts/adwaita.ttf"); + font = hb_font_create (face); + + ret = hb_font_get_glyph_extents (font, 0, &extents); + g_assert_true (ret); + g_assert_true (extents.x_bearing == 0 && + extents.y_bearing == 0 && + extents.width == 0 && + extents.height == 0); + + ret = hb_font_get_glyph_extents (font, 1, &extents); + g_assert_true (ret); + g_assert_true (extents.x_bearing == 0 && + extents.y_bearing == 0 && + extents.width == 0 && + extents.height == 0); + + ret = hb_font_get_glyph_extents (font, 2, &extents); + g_assert_true (ret); + g_assert_true (extents.x_bearing == 180 && + extents.y_bearing == 960 && + extents.width == 1060 && + extents.height == -1220); + + ret = hb_font_get_glyph_extents (font, 3, &extents); + g_assert_true (ret); + g_assert_true (extents.x_bearing == 188 && + extents.y_bearing == 950 && + extents.width == 900 && + extents.height == -1200); + + ret = hb_font_get_glyph_extents (font, 4, &extents); + g_assert_true (ret); + g_assert_true (extents.x_bearing == 413 && + extents.y_bearing == 50 && + extents.width == 150 && + extents.height == -75); + + ret = hb_font_get_glyph_extents (font, 5, &extents); + g_assert_true (ret); + g_assert_true (extents.x_bearing == 638 && + extents.y_bearing == 350 && + extents.width == 600 && + extents.height == -600); + + ret = hb_font_get_glyph_extents (font, 1000, &extents); + g_assert_false (ret); + + hb_font_destroy (font); + hb_face_destroy (face); +} + +int +main (int argc, char **argv) +{ + hb_test_init (&argc, &argv); + + hb_test_add (test_glyph_extents); + + return hb_test_run(); +}