From 60a4f2e6f5fd8896cd09a1274a4e772c987d695d Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 12 Jan 2023 19:12:46 -0700 Subject: [PATCH] [test-paint] Detect FreeType COLRv1 from struct size --- test/api/test-paint.c | 55 ++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/test/api/test-paint.c b/test/api/test-paint.c index 93607059f..22a851259 100644 --- a/test/api/test-paint.c +++ b/test/api/test-paint.c @@ -29,9 +29,20 @@ #ifdef HB_HAS_FREETYPE #include + #if (FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) >= 21101 -#define HAVE_FT_COLRv1 +#include FT_COLOR_H #endif + +static inline hb_bool_t +have_ft_colrv1 (void) +{ +#if (FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) >= 21101 + // https://github.com/harfbuzz/harfbuzz/issues/4013 + return sizeof (FT_ColorStop) == 8; +#endif + return FALSE; +} #endif /* Unit tests for hb-paint.h */ @@ -366,7 +377,7 @@ test_hb_paint (gconstpointer d, hb_font_set_synthetic_slant (font, test->slant); -#ifdef HAVE_FT_COLRv1 +#ifdef HB_HAS_FREETYPE if (use_ft) hb_ft_font_set_funcs (font); #endif @@ -479,7 +490,7 @@ test_compare_ot_ft (const char *file, hb_codepoint_t glyph) ot_str = data.string; -#ifdef HAVE_FT_COLRv1 +#ifdef HB_HAS_FREETYPE hb_ft_font_set_funcs (font); #endif @@ -508,31 +519,28 @@ test_hb_paint_ot (gconstpointer data) static void test_hb_paint_ft (gconstpointer data) { -#ifdef HAVE_FT_COLRv1 - test_hb_paint (data, 1); -#else - g_test_skip ("FreeType COLRv1 support not present"); -#endif + if (have_ft_colrv1 ()) + test_hb_paint (data, 1); + else + g_test_skip ("FreeType COLRv1 support not present"); } static void test_compare_ot_ft_novf (gconstpointer d) { -#ifdef HAVE_FT_COLRv1 - test_compare_ot_ft (TEST_GLYPHS, GPOINTER_TO_UINT (d)); -#else - g_test_skip ("FreeType COLRv1 support not present"); -#endif + if (have_ft_colrv1 ()) + test_compare_ot_ft (TEST_GLYPHS, GPOINTER_TO_UINT (d)); + else + g_test_skip ("FreeType COLRv1 support not present"); } static void test_compare_ot_ft_vf (gconstpointer d) { -#ifdef HAVE_FT_COLRv1 - test_compare_ot_ft (TEST_GLYPHS_VF, GPOINTER_TO_UINT (d)); -#else - g_test_skip ("FreeType COLRv1 support not present"); -#endif + if (have_ft_colrv1 ()) + test_compare_ot_ft (TEST_GLYPHS_VF, GPOINTER_TO_UINT (d)); + else + g_test_skip ("FreeType COLRv1 support not present"); } static void @@ -597,7 +605,7 @@ test_color_stops (hb_bool_t use_ft) face = hb_test_open_font_file (NOTO_HAND); font = hb_font_create (face); -#ifdef HAVE_FT_COLRv1 +#ifdef HB_HAS_FREETYPE if (use_ft) hb_ft_font_set_funcs (font); #endif @@ -623,11 +631,10 @@ test_color_stops_ot (void) static void test_color_stops_ft (void) { -#ifdef HAVE_FT_COLRv1 - test_color_stops (1); -#else - g_test_skip ("FreeType COLRv1 support not present"); -#endif + if (have_ft_colrv1 ()) + test_color_stops (1); + else + g_test_skip ("FreeType COLRv1 support not present"); } int