3 commits - meson.build meson-cc-tests/ft_has_color.c src/cairo-ft-font.c test/font-variations.c

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sat May 25 00:37:29 UTC 2024


 meson-cc-tests/ft_has_color.c |    7 --
 meson.build                   |   22 -------
 src/cairo-ft-font.c           |  124 +++++++-----------------------------------
 test/font-variations.c        |    4 -
 4 files changed, 25 insertions(+), 132 deletions(-)

New commits:
commit 24d00b6309b489b9319407ef08c89539a2b13807
Merge: 212f45894 7f88aea15
Author: Adrian Johnson <ajohnson at redneon.com>
Date:   Sat May 25 00:37:27 2024 +0000

    Merge branch 'update-freetype' into 'master'
    
    Update minimum FreeType to 2.10
    
    See merge request cairo/cairo!557

commit 7f88aea155215c6fdbdbcf4169df128c6b40dedb
Author: Adrian Johnson <ajohnson at redneon.com>
Date:   Thu May 23 21:15:18 2024 +0930

    ft: replace deprecated  FT_Get_X11_Font_Format()

diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c
index 67c83736f..fd573bf35 100644
--- a/src/cairo-ft-font.c
+++ b/src/cairo-ft-font.c
@@ -60,10 +60,9 @@
 #include FT_IMAGE_H
 #include FT_BITMAP_H
 #include FT_TRUETYPE_TABLES_H
-#include FT_XFREE86_H
+#include FT_FONT_FORMATS_H
 #include FT_MULTIPLE_MASTERS_H
 #include FT_SYNTHESIS_H
-
 #include FT_LCD_FILTER_H
 
 #if HAVE_FT_SVG_DOCUMENT
@@ -3746,7 +3745,7 @@ _cairo_index_to_glyph_name (void	         *abstract_font,
 static cairo_bool_t
 _ft_is_type1 (FT_Face face)
 {
-    const char *font_format = FT_Get_X11_Font_Format (face);
+    const char *font_format = FT_Get_Font_Format (face);
     if (font_format &&
 	(strcmp (font_format, "Type 1") == 0 ||
 	 strcmp (font_format, "CFF") == 0))
commit 94e3c5ce8189a1ab2c34bf4b181da70952fedc86
Author: Adrian Johnson <ajohnson at redneon.com>
Date:   Thu May 23 19:56:52 2024 +0930

    Update minimum FreeType to 2.10
    
    and remove feature guards for FT functions that are in 2.10 or later.

diff --git a/meson-cc-tests/ft_has_color.c b/meson-cc-tests/ft_has_color.c
deleted file mode 100644
index daeed7f35..000000000
--- a/meson-cc-tests/ft_has_color.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-int main(void) {
-  FT_Long has_color = FT_HAS_COLOR(((FT_Face)NULL));
-  return 0;
-}
diff --git a/meson.build b/meson.build
index b2337bca9..3a5820640 100644
--- a/meson.build
+++ b/meson.build
@@ -5,8 +5,8 @@ project('cairo', 'c', 'cpp',
                     'warning_level=2'],
 )
 
-freetype_required_version = '>= 9.7.3'
-freetype_colrv1_required_version = '>= 25.0.19'
+freetype_required_version = '>= 23.0.17' # Release version 2.10
+freetype_colrv1_required_version = '>= 25.0.19' # Release version 2.13
 fontconfig_required_version = '>= 2.2.95'
 xrender_required_version = '>= 0.6'
 xcb_required_version = '>= 1.6'
@@ -315,21 +315,7 @@ if freetype_dep.found()
     'compile-deps': [fontconfig_dep.partial_dependency(compile_args: true, includes: true)],
   }]
 
-  ft_check_funcs = [
-    'FT_Get_X11_Font_Format',
-    'FT_GlyphSlot_Embolden',
-    'FT_GlyphSlot_Oblique',
-    'FT_Load_Sfnt_Table',
-    'FT_Library_SetLcdFilter',
-    'FT_Get_Var_Design_Coordinates',
-    'FT_Done_MM_Var',
-    'FT_Palette_Select',
-  ]
-
   if freetype_dep.type_name() == 'internal'
-    foreach func : ft_check_funcs
-      conf.set('HAVE_ at 0@'.format(func.to_upper()), 1)
-    endforeach
     if freetype_dep.version().version_compare(freetype_colrv1_required_version)
       conf.set('HAVE_FT_SVG_DOCUMENT', 1)
       conf.set('HAVE_FT_LOAD_NO_SVG', 1)
@@ -337,9 +323,6 @@ if freetype_dep.found()
     endif
     internal_deps += [freetype_dep]
   else
-    if not cc.links(files('meson-cc-tests/ft_has_color.c'), dependencies: freetype_dep, name: 'FT has color')
-      conf.set('FT_HAS_COLOR', '(0)')
-    endif
     if png_dep.found() and \
         cc.has_type('FT_SVG_Document', dependencies: freetype_dep, prefix: '#include <freetype/otsvg.h>')
       conf.set('HAVE_FT_SVG_DOCUMENT', 1)
@@ -354,7 +337,6 @@ if freetype_dep.found()
        cc.has_function('FT_Get_Color_Glyph_Paint', dependencies: freetype_dep)
       conf.set('HAVE_FT_COLR_V1', 1)
     endif
-    check_funcs += ft_check_funcs
     deps += [freetype_dep]
   endif
 endif
diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c
index 7d9da2f96..67c83736f 100644
--- a/src/cairo-ft-font.c
+++ b/src/cairo-ft-font.c
@@ -62,13 +62,9 @@
 #include FT_TRUETYPE_TABLES_H
 #include FT_XFREE86_H
 #include FT_MULTIPLE_MASTERS_H
-#if HAVE_FT_GLYPHSLOT_EMBOLDEN
 #include FT_SYNTHESIS_H
-#endif
 
-#if HAVE_FT_LIBRARY_SETLCDFILTER
 #include FT_LCD_FILTER_H
-#endif
 
 #if HAVE_FT_SVG_DOCUMENT
 #include FT_OTSVG_H
@@ -92,14 +88,6 @@
 #define FC_LCD_LEGACY	3
 #endif
 
-/* FreeType version older than 2.3.5(?) didn't have these options */
-#ifndef FT_LCD_FILTER_NONE
-#define FT_LCD_FILTER_NONE	0
-#define FT_LCD_FILTER_DEFAULT	1
-#define FT_LCD_FILTER_LIGHT	2
-#define FT_LCD_FILTER_LEGACY	16
-#endif
-
 /*  FreeType version older than 2.11 does not have the FT_RENDER_MODE_SDF enum value in FT_Render_Mode */
 #if FREETYPE_MAJOR > 2 || (FREETYPE_MAJOR == 2 && FREETYPE_MINOR >= 11)
 #define HAVE_FT_RENDER_MODE_SDF 1
@@ -487,29 +475,19 @@ _cairo_ft_unscaled_font_init (cairo_ft_unscaled_font_t *unscaled,
     unscaled->variations = NULL;
 
     if (from_face) {
+	FT_MM_Var *ft_mm_var;
 	unscaled->from_face = TRUE;
 	_cairo_ft_unscaled_font_init_key (unscaled, TRUE, NULL, id, face);
 
 
         unscaled->have_color = FT_HAS_COLOR (face) != 0;
         unscaled->have_color_set = TRUE;
-
-#ifdef HAVE_FT_GET_VAR_DESIGN_COORDINATES
-	{
-	    FT_MM_Var *ft_mm_var;
-	    if (0 == FT_Get_MM_Var (face, &ft_mm_var))
-	    {
-		unscaled->variations = _cairo_calloc (ft_mm_var->num_axis, sizeof (FT_Fixed));
-		if (unscaled->variations)
-		    FT_Get_Var_Design_Coordinates (face, ft_mm_var->num_axis, unscaled->variations);
-#if HAVE_FT_DONE_MM_VAR
-		FT_Done_MM_Var (face->glyph->library, ft_mm_var);
-#else
-		free (ft_mm_var);
-#endif
-	    }
+	if (FT_Get_MM_Var (face, &ft_mm_var) == 0) {
+	    unscaled->variations = _cairo_calloc (ft_mm_var->num_axis, sizeof (FT_Fixed));
+	    if (unscaled->variations)
+		FT_Get_Var_Design_Coordinates (face, ft_mm_var->num_axis, unscaled->variations);
+	    FT_Done_MM_Var (face->glyph->library, ft_mm_var);
 	}
-#endif
     } else {
 	char *filename_copy;
 
@@ -1024,12 +1002,10 @@ _compute_xrender_bitmap_size(FT_Bitmap      *target,
 	pitch = width * 4;
 	break;
 
-#ifdef FT_LOAD_COLOR
     case FT_PIXEL_MODE_BGRA:
 	/* each pixel is replicated into a 32-bit ARGB value */
 	pitch = width * 4;
 	break;
-#endif
 
     default:  /* unsupported source format */
 	return -1;
@@ -1227,12 +1203,10 @@ _fill_xrender_bitmap(FT_Bitmap      *target,
 	}
 	break;
 
-#ifdef FT_LOAD_COLOR
     case FT_PIXEL_MODE_BGRA:
 	for (h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch)
 	    memcpy (dstLine, srcLine, (size_t)width * 4);
 	break;
-#endif
 
     default:
 	assert (0);
@@ -1341,7 +1315,6 @@ _get_bitmap_surface (FT_Bitmap		     *bitmap,
 	    component_alpha = TRUE;
 	}
 	break;
-#ifdef FT_LOAD_COLOR
     case FT_PIXEL_MODE_BGRA:
 	stride = width * 4;
 	if (own_buffer) {
@@ -1364,7 +1337,6 @@ _get_bitmap_surface (FT_Bitmap		     *bitmap,
 	}
 	format = CAIRO_FORMAT_ARGB32;
 	break;
-#endif
     case FT_PIXEL_MODE_GRAY2:
     case FT_PIXEL_MODE_GRAY4:
     convert:
@@ -1582,16 +1554,10 @@ _render_glyph_outline (FT_Face                    face,
 	    break;
 	}
 
-#if HAVE_FT_LIBRARY_SETLCDFILTER
 	FT_Library_SetLcdFilter (library, lcd_filter);
-#endif
-
 	error = FT_Render_Glyph (face->glyph, render_mode);
 
-#if HAVE_FT_LIBRARY_SETLCDFILTER
 	FT_Library_SetLcdFilter (library, FT_LCD_FILTER_NONE);
-#endif
-
 	if (error)
 	    return _cairo_error (_cairo_ft_to_cairo_error (error));
 
@@ -2425,7 +2391,6 @@ skip:
         }
 
         current_coords = malloc (sizeof (FT_Fixed) * ft_mm_var->num_axis);
-#ifdef HAVE_FT_GET_VAR_DESIGN_COORDINATES
         ret = FT_Get_Var_Design_Coordinates (face, ft_mm_var->num_axis, current_coords);
         if (ret == 0) {
             for (i = 0; i < ft_mm_var->num_axis; i++) {
@@ -2435,17 +2400,12 @@ skip:
             if (i == ft_mm_var->num_axis)
               goto done;
         }
-#endif
 
         FT_Set_Var_Design_Coordinates (face, ft_mm_var->num_axis, coords);
 done:
         free (coords);
         free (current_coords);
-#if HAVE_FT_DONE_MM_VAR
         FT_Done_MM_Var (face->glyph->library, ft_mm_var);
-#else
-        free (ft_mm_var);
-#endif
     }
 }
 
@@ -2494,7 +2454,7 @@ _cairo_ft_scaled_glyph_load_glyph (cairo_ft_scaled_font_t *scaled_font,
 
     cairo_ft_apply_variations (face, scaled_font);
 
-#if defined(FT_LOAD_COLOR) && defined(HAVE_FT_LOAD_NO_SVG)
+#if defined(HAVE_FT_LOAD_NO_SVG)
     if (load_flags & FT_LOAD_COLOR && glyph_priv->format == CAIRO_FT_GLYPH_TYPE_COLR_V1)
         load_flags |= FT_LOAD_NO_SVG;
 #endif
@@ -2510,15 +2470,11 @@ _cairo_ft_scaled_glyph_load_glyph (cairo_ft_scaled_font_t *scaled_font,
     /*
      * synthesize glyphs if requested
      */
-#if HAVE_FT_GLYPHSLOT_EMBOLDEN
     if (scaled_font->ft_options.synth_flags & CAIRO_FT_SYNTHESIZE_BOLD)
 	FT_GlyphSlot_Embolden (face->glyph);
-#endif
 
-#if HAVE_FT_GLYPHSLOT_OBLIQUE
     if (scaled_font->ft_options.synth_flags & CAIRO_FT_SYNTHESIZE_OBLIQUE)
 	FT_GlyphSlot_Oblique (face->glyph);
-#endif
 
     if (vertical_layout)
 	_cairo_ft_scaled_glyph_vertical_layout_bearing_fix (scaled_font, face->glyph);
@@ -2554,7 +2510,6 @@ _cairo_ft_scaled_glyph_set_palette (cairo_ft_scaled_font_t  *scaled_font,
     unsigned int num_entries = 0;
     FT_Color *entries = NULL;
 
-#ifdef HAVE_FT_PALETTE_SELECT
     FT_Palette_Data palette_data;
 
     if (FT_Palette_Data_Get (face, &palette_data) == 0 && palette_data.num_palettes > 0) {
@@ -2577,7 +2532,6 @@ _cairo_ft_scaled_glyph_set_palette (cairo_ft_scaled_font_t  *scaled_font,
             }
         }
     }
-#endif
 
     if (num_entries_ret)
 	*num_entries_ret = num_entries;
@@ -2594,7 +2548,6 @@ _cairo_ft_scaled_glyph_set_foreground_color (cairo_ft_scaled_font_t *scaled_font
 					     const cairo_color_t    *foreground_color)
 {
     cairo_bool_t uses_foreground_color = FALSE;
-#ifdef HAVE_FT_PALETTE_SELECT
     FT_LayerIterator  iterator;
     FT_UInt layer_glyph_index;
     FT_UInt layer_color_index;
@@ -2620,7 +2573,7 @@ _cairo_ft_scaled_glyph_set_foreground_color (cairo_ft_scaled_font_t *scaled_font
 	color.alpha = (FT_Byte)(foreground_color->alpha * 0xFF);
 	FT_Palette_Set_Foreground_Color (face, color);
     }
-#endif
+
     return uses_foreground_color;
 }
 
@@ -2660,13 +2613,9 @@ _cairo_ft_scaled_glyph_init_surface (cairo_ft_scaled_font_t     *scaled_font,
 	/* clear load target mode */
 	load_flags &= ~(FT_LOAD_TARGET_(FT_LOAD_TARGET_MODE(load_flags)));
 	load_flags |= FT_LOAD_TARGET_NORMAL;
-#ifdef FT_LOAD_COLOR
 	load_flags |= FT_LOAD_COLOR;
-#endif
     } else { /* info == CAIRO_SCALED_GLYPH_INFO_SURFACE */
-#ifdef FT_LOAD_COLOR
         load_flags &= ~FT_LOAD_COLOR;
-#endif
     }
 
     status = _cairo_ft_scaled_glyph_load_glyph (scaled_font,
@@ -2737,7 +2686,6 @@ _cairo_ft_scaled_glyph_init_record_colr_v0_glyph (cairo_ft_scaled_font_t *scaled
 						  cairo_bool_t            vertical_layout,
 						  int                     load_flags)
 {
-#ifdef HAVE_FT_PALETTE_SELECT
     cairo_surface_t *recording_surface;
     cairo_t *cr;
     cairo_status_t status;
@@ -2822,9 +2770,6 @@ _cairo_ft_scaled_glyph_init_record_colr_v0_glyph (cairo_ft_scaled_font_t *scaled
 					       recording_surface,
 					       NULL);
     return status;
-#else
-    return CAIRO_INT_STATUS_UNSUPPORTED;
-#endif
 }
 
 static cairo_int_status_t
@@ -3252,7 +3197,6 @@ _cairo_ft_scaled_glyph_is_colr_v0 (cairo_ft_scaled_font_t *scaled_font,
 				   cairo_scaled_glyph_t   *scaled_glyph,
 				   FT_Face                 face)
 {
-#ifdef HAVE_FT_PALETTE_SELECT
     FT_LayerIterator  iterator;
     FT_UInt layer_glyph_index;
     FT_UInt layer_color_index;
@@ -3266,7 +3210,7 @@ _cairo_ft_scaled_glyph_is_colr_v0 (cairo_ft_scaled_font_t *scaled_font,
     {
 	return TRUE;
     }
-#endif
+
     return FALSE;
 }
 
@@ -3319,10 +3263,9 @@ _cairo_ft_scaled_glyph_init_metrics (cairo_ft_scaled_font_t  *scaled_font,
     /* We need to load color to determine if this is a color format. */
     int color_flag = 0;
 
-#ifdef FT_LOAD_COLOR
     if (scaled_font->unscaled->have_color && scaled_font->base.options.color_mode != CAIRO_COLOR_MODE_NO_COLOR)
 	color_flag = FT_LOAD_COLOR;
-#endif
+
     /* Ensure use_em_size = FALSE as the format (bitmap or outline)
      * may change with the size. */
     status = _cairo_ft_scaled_glyph_load_glyph (scaled_font,
@@ -3441,11 +3384,6 @@ _cairo_ft_scaled_glyph_init (void			*abstract_font,
     cairo_bool_t vertical_layout = FALSE;
     cairo_status_t status = CAIRO_STATUS_SUCCESS;
     cairo_ft_glyph_private_t *glyph_priv;
-    int color_flag = 0;
-
-#ifdef FT_LOAD_COLOR
-    color_flag = FT_LOAD_COLOR;
-#endif
 
     face = _cairo_ft_unscaled_font_lock_face (unscaled);
     if (!face)
@@ -3494,7 +3432,7 @@ _cairo_ft_scaled_glyph_init (void			*abstract_font,
 	    status = _cairo_ft_scaled_glyph_load_glyph (scaled_font,
 							scaled_glyph,
 							face,
-							load_flags | color_flag,
+							load_flags | FT_LOAD_COLOR,
 							FALSE,
 							vertical_layout);
 	    if (unlikely (status))
@@ -3632,7 +3570,6 @@ _cairo_ft_load_truetype_table (void	       *abstract_font,
     if (_cairo_ft_scaled_font_is_vertical (&scaled_font->base))
         return CAIRO_INT_STATUS_UNSUPPORTED;
 
-#if HAVE_FT_LOAD_SFNT_TABLE
     face = _cairo_ft_unscaled_font_lock_face (unscaled);
     if (!face)
 	return _cairo_error (CAIRO_STATUS_NO_MEMORY);
@@ -3646,7 +3583,6 @@ _cairo_ft_load_truetype_table (void	       *abstract_font,
     }
 
     _cairo_ft_unscaled_font_unlock_face (unscaled);
-#endif
 
     return status;
 }
@@ -3705,6 +3641,7 @@ _cairo_ft_is_synthetic (void	        *abstract_font,
 	FT_MM_Var *mm_var = NULL;
 	FT_Fixed *coords = NULL;
 	int num_axis;
+	int i;
 
 	/* If this is an MM or variable font we can't assume the current outlines
 	 * are the same as the font tables */
@@ -3723,32 +3660,22 @@ _cairo_ft_is_synthetic (void	        *abstract_font,
 	    goto cleanup;
 	}
 
-#if FREETYPE_MAJOR > 2 || ( FREETYPE_MAJOR == 2 &&  FREETYPE_MINOR >= 8)
-	/* If FT_Get_Var_Blend_Coordinates() is available, we can check if the
-	 * current design coordinates are the default coordinates. In this case
-	 * the current outlines match the font tables.
+	/* Check if the current design coordinates are the default
+	 * coordinates. In this case the current outlines match the
+	 * font tables.
 	 */
-	{
-	    int i;
-
-	    FT_Get_Var_Blend_Coordinates (face, num_axis, coords);
-	    *is_synthetic = FALSE;
-	    for (i = 0; i < num_axis; i++) {
-		if (coords[i]) {
-		    *is_synthetic = TRUE;
-		    break;
-		}
+	FT_Get_Var_Blend_Coordinates (face, num_axis, coords);
+	*is_synthetic = FALSE;
+	for (i = 0; i < num_axis; i++) {
+	    if (coords[i]) {
+		*is_synthetic = TRUE;
+		break;
 	    }
 	}
-#endif
 
       cleanup:
 	free (coords);
-#if HAVE_FT_DONE_MM_VAR
 	FT_Done_MM_Var (face->glyph->library, mm_var);
-#else
-	free (mm_var);
-#endif
     }
 
     _cairo_ft_unscaled_font_unlock_face (unscaled);
@@ -3819,7 +3746,6 @@ _cairo_index_to_glyph_name (void	         *abstract_font,
 static cairo_bool_t
 _ft_is_type1 (FT_Face face)
 {
-#if HAVE_FT_GET_X11_FONT_FORMAT
     const char *font_format = FT_Get_X11_Font_Format (face);
     if (font_format &&
 	(strcmp (font_format, "Type 1") == 0 ||
@@ -3827,7 +3753,6 @@ _ft_is_type1 (FT_Face face)
     {
 	return TRUE;
     }
-#endif
 
     return FALSE;
 }
@@ -3854,12 +3779,10 @@ _cairo_ft_load_type1_data (void	            *abstract_font,
     if (!face)
 	return _cairo_error (CAIRO_STATUS_NO_MEMORY);
 
-#if HAVE_FT_LOAD_SFNT_TABLE
     if (FT_IS_SFNT (face)) {
 	status = CAIRO_INT_STATUS_UNSUPPORTED;
 	goto unlock;
     }
-#endif
 
     if (! _ft_is_type1 (face)) {
         status = CAIRO_INT_STATUS_UNSUPPORTED;
diff --git a/test/font-variations.c b/test/font-variations.c
index f278fdf2e..a1794aa57 100644
--- a/test/font-variations.c
+++ b/test/font-variations.c
@@ -117,15 +117,11 @@ test_variation (cairo_test_context_t *ctx,
         return CAIRO_TEST_FAILURE;
     }
 
-#ifdef HAVE_FT_GET_VAR_DESIGN_COORDINATES
     ret = FT_Get_Var_Design_Coordinates (ft_face, 20, coords);
     if (ret != 0) {
         cairo_test_log (ctx, "Failed to get coords");
         return CAIRO_TEST_FAILURE;
     }
-#else
-    return CAIRO_TEST_UNTESTED;
-#endif
 
     for (i = 0; i < ft_mm_var->num_axis; i++) {
         FT_Var_Axis *axis = &ft_mm_var->axis[i];


More information about the cairo-commit mailing list