1
0
forked from ports/opt

[notify] freetype: switched to meson/ninja, included a bunch of patches for prettier font rendering, compatibility with chromium/electron and more. Checking revdep after updating is a must

This commit is contained in:
Tim Biermann 2021-10-31 17:54:08 +01:00
parent f1b5638500
commit 0a0506972c
13 changed files with 814 additions and 28 deletions

View File

@ -1,6 +1,7 @@
drwxr-xr-x root/root etc/
drwxr-xr-x root/root etc/profile.d/
-rw-r--r-- root/root etc/profile.d/freetype2.sh
drwxr-xr-x root/root usr/
drwxr-xr-x root/root usr/bin/
-rwxr-xr-x root/root usr/bin/freetype-config
drwxr-xr-x root/root usr/include/
drwxr-xr-x root/root usr/include/freetype2/
drwxr-xr-x root/root usr/include/freetype2/freetype/
@ -35,7 +36,6 @@ drwxr-xr-x root/root usr/include/freetype2/freetype/config/
-rw-r--r-- root/root usr/include/freetype2/freetype/ftincrem.h
-rw-r--r-- root/root usr/include/freetype2/freetype/ftlcdfil.h
-rw-r--r-- root/root usr/include/freetype2/freetype/ftlist.h
-rw-r--r-- root/root usr/include/freetype2/freetype/ftlogging.h
-rw-r--r-- root/root usr/include/freetype2/freetype/ftlzw.h
-rw-r--r-- root/root usr/include/freetype2/freetype/ftmac.h
-rw-r--r-- root/root usr/include/freetype2/freetype/ftmm.h
@ -60,16 +60,8 @@ drwxr-xr-x root/root usr/include/freetype2/freetype/config/
-rw-r--r-- root/root usr/include/freetype2/freetype/tttags.h
-rw-r--r-- root/root usr/include/freetype2/ft2build.h
drwxr-xr-x root/root usr/lib/
-rw-r--r-- root/root usr/lib/libfreetype.a
-rwxr-xr-x root/root usr/lib/libfreetype.la
lrwxrwxrwx root/root usr/lib/libfreetype.so -> libfreetype.so.6.18.0
lrwxrwxrwx root/root usr/lib/libfreetype.so -> libfreetype.so.6
lrwxrwxrwx root/root usr/lib/libfreetype.so.6 -> libfreetype.so.6.18.0
-rwxr-xr-x root/root usr/lib/libfreetype.so.6.18.0
drwxr-xr-x root/root usr/lib/pkgconfig/
-rw-r--r-- root/root usr/lib/pkgconfig/freetype2.pc
drwxr-xr-x root/root usr/share/
drwxr-xr-x root/root usr/share/aclocal/
-rw-r--r-- root/root usr/share/aclocal/freetype2.m4
drwxr-xr-x root/root usr/share/man/
drwxr-xr-x root/root usr/share/man/man1/
-rw-r--r-- root/root usr/share/man/man1/freetype-config.1.gz

View File

@ -1,5 +1,16 @@
untrusted comment: verify with /etc/ports/opt.pub
RWSE3ohX2g5d/deo7ySSG5FBZa4ZBQyHVHRPYMlAd7XR6EwrVfKKt6S1XUqwd46mJFxwE0Jbcq9UBPHEFXv793pVNtfbShfzPQE=
SHA256 (Pkgfile) = ec010edf50e1fd4181247cdcda18a61b1216f7170c4f6ac85509b41dbe5fe0f8
SHA256 (.footprint) = 9bcef8a8c4324e32878ae3cd3d28da10201c6b7ae851470269648b6364defbdf
RWSE3ohX2g5d/THnwN6vnoNdeaXWGZRyk/xeSc7NImmauDAqIdjDsVTjJ9rEC4SO3QnpXnQKNXrS2f9Z5POJfjuIxBNXyq9vBw0=
SHA256 (Pkgfile) = 38f3d951de81beb295f3691810a3bfdb3ccc9508606d04d28f64eeecc47e9356
SHA256 (.footprint) = a8bec42616674a83ffa67823566f97ea9753f385af12a02157efb4a865c10e56
SHA256 (freetype-2.11.0.tar.xz) = 8bee39bd3968c4804b70614a0a3ad597299ad0e824bc8aad5ce8aaf48067bde7
SHA256 (freetype2.sh) = f7f8e09c44f7552c883846e9a6a1efc50377c4932234e74adc4a8ff750606467
SHA256 (dlg-0cc0d3eaed28483fc8036d90ac18878ebd83ed87.tar.gz) = 768b226c285698fe8d371b435c99165697c1bebff6463681cff11c4e91c1c557
SHA256 (0001-Enable-table-validation-modules.patch) = f41df4f336d5e82e58733c7a4594476c9216cfc85c096327745a7e1b559e17e1
SHA256 (0002-Enable-subpixel-rendering.patch) = dc77c1cfee4bf8e7e0690628c95d211df09e0d0750e4c8f075b78b5f105514f7
SHA256 (0003-Enable-infinality-subpixel-hinting.patch) = 21a62bc12b848320c686d602d8d4e3bcd51294a9def4dc9c301736e077b59f3f
SHA256 (0004-Enable-long-PCF-family-names.patch) = 266384222f87a02fb02b2179828f6c26fe6d7b1fd09d1f7e3734e7fcb09cda2e
SHA256 (0006-Return_FT_Err_Ok_while_trying_to_render_bitmap.patch) = 2b13b8cc9acc3e56be6b0f8102d648864227bf93637bc956d5052c77c8509782
SHA256 (0007-Restore_quiet_no-op_rendering_of_bitmap_glyphs.patch) = 21a2d243bc6b44d1cdb88ef29af2bd5ceda8d0faaf928bdc2c078a474ddc61f1
SHA256 (0008-sfnt-Add-API-for-retrieving-a-COLR-v1-ClipBox-table.patch) = 13aba5006db13522ff0f3ffc85f81058b6cfcc48671285b1a90ac041a6a51952
SHA256 (0009-src-sfnt-ttcolr.c-tt_face_get_color_glyph_clipbox-Mi.patch) = 09a01b99839fc864db7a2c0748b4703ac5b04897cbd35e0d8969024b4ba89649
SHA256 (0010-sfnt-Add-missing-blend-mode-plus-to-COLR-v1.patch) = fbabfb745db32e1d90f9798e1018da26578f3bce9714dac8e64c15b691e76f69

View File

@ -0,0 +1,42 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Tue, 23 Jun 2015 08:40:29 +0200
Subject: [PATCH] Enable table validation modules
---
modules.cfg | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules.cfg b/modules.cfg
index d6cdbe523..181f91541 100644
--- a/modules.cfg
+++ b/modules.cfg
@@ -111,26 +111,26 @@ AUX_MODULES += cache
# TrueType GX/AAT table validation. Needs `ftgxval.c' below.
#
-# AUX_MODULES += gxvalid
+AUX_MODULES += gxvalid
# Support for streams compressed with gzip (files with suffix .gz).
#
# See include/freetype/ftgzip.h for the API.
AUX_MODULES += gzip
# Support for streams compressed with LZW (files with suffix .Z).
#
# See include/freetype/ftlzw.h for the API.
AUX_MODULES += lzw
# Support for streams compressed with bzip2 (files with suffix .bz2).
#
# See include/freetype/ftbzip2.h for the API.
AUX_MODULES += bzip2
# OpenType table validation. Needs `ftotval.c' below.
#
-# AUX_MODULES += otvalid
+AUX_MODULES += otvalid
# Auxiliary PostScript driver component to share common code.
#

View File

@ -0,0 +1,22 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Tue, 23 Jun 2015 08:43:07 +0200
Subject: [PATCH] Enable subpixel rendering
---
include/freetype/config/ftoption.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
index 097f19b8a..e5de62e35 100644
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -124,7 +124,7 @@ FT_BEGIN_HEADER
* When this macro is not defined, FreeType offers alternative LCD
* rendering technology that produces excellent output.
*/
-/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
+#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING
/**************************************************************************

View File

@ -0,0 +1,24 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Mon, 29 Aug 2016 08:43:10 +0200
Subject: [PATCH] Enable infinality subpixel hinting
---
include/freetype/config/ftoption.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
index e5de62e35..acb4d6d6a 100644
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -672,8 +672,8 @@ FT_BEGIN_HEADER
* https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
*/
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */
-#define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2
-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */
+/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 */
+#define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 )
/**************************************************************************

View File

@ -0,0 +1,22 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Sun, 14 May 2017 18:09:31 +0200
Subject: [PATCH] Enable long PCF family names
---
include/freetype/config/ftoption.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
index acb4d6d6a..efa13b9c6 100644
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -861,7 +861,7 @@ FT_BEGIN_HEADER
* If this option is activated, it can be controlled with the
* `no-long-family-names` property of the 'pcf' driver module.
*/
-/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
+#define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
/*************************************************************************/

View File

@ -0,0 +1,35 @@
From d7f649f283763af099256eb2d5e326df601c3e76 Mon Sep 17 00:00:00 2001
From: Anuj Verma <anujv@iitbhilai.ac.in>
Date: Mon, 16 Aug 2021 07:48:09 +0530
Subject: [PATCH] [sdf] Return `FT_Err_Ok` while trying to render bitmap.
* src/sdf/ftsdfrend.c (ft_bsdf_render): Return OK if the slot is
a bitmap and the render mode is anything other than `FT_RENDER_MODE_SDF`.
This is for compatibility reasons.
Fixes issue #1076
---
src/sdf/ftsdfrend.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/sdf/ftsdfrend.c b/src/sdf/ftsdfrend.c
index 30f2e62a4..5686c0bf5 100644
--- a/src/sdf/ftsdfrend.c
+++ b/src/sdf/ftsdfrend.c
@@ -502,8 +502,11 @@
/* check whether render mode is correct */
if ( mode != FT_RENDER_MODE_SDF )
{
- error = FT_THROW( Cannot_Render_Glyph );
- goto Exit;
+ FT_TRACE0(( "ft_bsdf_render: trying to render bitmap\n" ));
+
+ /* return OK since the slot is already a bitmap */
+ error = FT_Err_Ok;
+ return error;
}
if ( origin )
--
GitLab

View File

@ -0,0 +1,41 @@
From 6e9d8d314ff6ab23177b9162c0b96616460bb84e Mon Sep 17 00:00:00 2001
From: Alexei Podtelezhnikov <apodtele@gmail.com>
Date: Fri, 20 Aug 2021 16:01:32 -0400
Subject: [PATCH] [base] Restore quiet no-op rendering of bitmap glyphs.
Fixes #1076.
* src/base/ftobjs.c (FT_Render_Glyph_Internal): Discard an error when
rendering a bitmap glyph.
---
src/base/ftobjs.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 342ac4a27..7b40c6421 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -4703,7 +4703,7 @@
else
renderer = FT_Lookup_Renderer( library, slot->format, &node );
- error = FT_ERR( Unimplemented_Feature );
+ error = FT_ERR( Cannot_Render_Glyph );
while ( renderer )
{
error = renderer->render( renderer, slot, render_mode, NULL );
@@ -4719,6 +4719,11 @@
/* format. */
renderer = FT_Lookup_Renderer( library, slot->format, &node );
}
+
+ /* it is not an error if we cannot render a bitmat glyph */
+ if ( FT_ERR_EQ( error, Cannot_Render_Glyph ) &&
+ slot->format == FT_GLYPH_FORMAT_BITMAP )
+ error = FT_Err_Ok;
}
}
--
GitLab

View File

@ -0,0 +1,474 @@
From 47cf8ebf4a78ed42da455a98d77a92ce6a180d78 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dominik=20R=C3=B6ttsches?= <drott@chromium.org>
Date: Wed, 28 Jul 2021 17:36:57 +0300
Subject: [PATCH] [sfnt] Add API for retrieving a 'COLR' v1 'ClipBox' table.
The optional 'COLR' v1 glyph-specific clip box helps upstream graphics
libraries allocate a sufficiently large bitmap for a glyph without having to
traverse the glyph graph for that. See
https://github.com/googlefonts/colr-gradients-spec/issues/251
for background on the introduction of this specification change.
* include/freetype/ftcolor.h (FT_ClipBox): New structure.
(FT_Get_Color_Glyph_ClipBox): New function declaration.
* include/freetype/internal/sfnt.h (TT_Get_Color_Glyph_ClipBox_Func):
New function type.
(SFNT_Interface, FT_DEFINE_SFNT_INTERFACE): Use it.
* src/base/ftobjs.c (FT_Get_Color_Glyph_ClipBox): New function to link API
with SFNT implementation.
* src/sfnt/sfdriver.c (sfnt_interface): Updated.
* src/sfnt/ttcolr.c (Colr): New field `clip_list`.
(tt_face_load_colr): Parse global clip list offset.
(tt_face_get_color_glyph_clipbox): New function to find the clip box for a
glyph id from the clip list array.
* src/sfnt/ttcolr.h: Updated.
---
include/freetype/ftcolor.h | 86 +++++++++++++++++++++
include/freetype/internal/sfnt.h | 63 +++++++++++++---
src/base/ftobjs.c | 29 +++++++
src/sfnt/sfdriver.c | 10 ++-
src/sfnt/ttcolr.c | 125 ++++++++++++++++++++++++++++++-
src/sfnt/ttcolr.h | 5 ++
6 files changed, 302 insertions(+), 16 deletions(-)
diff --git a/include/freetype/ftcolor.h b/include/freetype/ftcolor.h
index a4bd62a26..b98289917 100644
--- a/include/freetype/ftcolor.h
+++ b/include/freetype/ftcolor.h
@@ -1383,6 +1383,49 @@ FT_BEGIN_HEADER
} FT_Color_Root_Transform;
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_ClipBox
+ *
+ * @description:
+ * A structure representing a 'COLR' v1 'ClipBox' table. 'COLR' v1
+ * glyphs may optionally define a clip box for aiding allocation or
+ * defining a maximum drawable region. Use @FT_Get_Color_Glyph_ClipBox
+ * to retrieve it.
+ *
+ * @fields:
+ * bottom_left ::
+ * The bottom left corner of the clip box as an @FT_Vector with
+ * fixed-point coordinates in 26.6 format.
+ *
+ * top_left ::
+ * The top left corner of the clip box as an @FT_Vector with
+ * fixed-point coordinates in 26.6 format.
+ *
+ * top_right ::
+ * The top right corner of the clip box as an @FT_Vector with
+ * fixed-point coordinates in 26.6 format.
+ *
+ * bottom_right ::
+ * The bottom right corner of the clip box as an @FT_Vector with
+ * fixed-point coordinates in 26.6 format.
+ *
+ * @since:
+ * 2.12 -- **currently experimental only!** There might be changes
+ * without retaining backward compatibility of both the API and ABI.
+ *
+ */
+ typedef struct FT_ClipBox_
+ {
+ FT_Vector bottom_left;
+ FT_Vector top_left;
+ FT_Vector top_right;
+ FT_Vector bottom_right;
+
+ } FT_ClipBox;
+
+
/**************************************************************************
*
* @function:
@@ -1475,6 +1518,49 @@ FT_BEGIN_HEADER
FT_OpaquePaint* paint );
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Color_Glyph_ClipBox
+ *
+ * @description:
+ * Search for a 'COLR' v1 clip box for the specified `base_glyph` and
+ * fill the `clip_box` parameter with the 'COLR' v1 'ClipBox' information
+ * if one is found.
+ *
+ * @input:
+ * face ::
+ * A handle to the parent face object.
+ *
+ * base_glyph ::
+ * The glyph index for which to retrieve the clip box.
+ *
+ * @output:
+ * clip_box ::
+ * The clip box for the requested `base_glyph` if one is found. The
+ * clip box is computed taking scale and transformations configured on
+ * the @FT_Face into account. @FT_ClipBox contains @FT_Vector values
+ * in 26.6 format.
+ *
+ * @return:
+ * Value~1 if a clip box is found. If no clip box is found or an error
+ * occured, value~0 is returned.
+ *
+ * @note:
+ * To retrieve the clip box in font units, reset scale to units-per-em
+ * and remove transforms configured using @FT_Set_Transform.
+ *
+ * @since:
+ * 2.12 -- **currently experimental only!** There might be changes
+ * without retaining backward compatibility of both the API and ABI.
+ *
+ */
+ FT_EXPORT( FT_Bool )
+ FT_Get_Color_Glyph_ClipBox( FT_Face face,
+ FT_UInt base_glyph,
+ FT_ClipBox* clip_box );
+
+
/**************************************************************************
*
* @function:
diff --git a/include/freetype/internal/sfnt.h b/include/freetype/internal/sfnt.h
index 438ec897e..e8d77e232 100644
--- a/include/freetype/internal/sfnt.h
+++ b/include/freetype/internal/sfnt.h
@@ -555,6 +555,44 @@ FT_BEGIN_HEADER
FT_OpaquePaint *paint );
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Get_Color_Glyph_ClipBox_Func
+ *
+ * @description:
+ * Search for a 'COLR' v1 clip box for the specified `base_glyph` and
+ * fill the `clip_box` parameter with the 'COLR' v1 'ClipBox' information
+ * if one is found.
+ *
+ * @input:
+ * face ::
+ * A handle to the parent face object.
+ *
+ * base_glyph ::
+ * The glyph index for which to retrieve the clip box.
+ *
+ * @output:
+ * clip_box ::
+ * The clip box for the requested base_glyph if one is found. The clip
+ * box is computed taking scale and transformations configured on the
+ * @FT_Face into account. @FT_ClipBox contains @FT_Vector values in
+ * 26.6 format.
+ *
+ * @note:
+ * To retrieve the clip box in font units, reset scale to units-per-em
+ * and remove transforms configured using @FT_Set_Transform.
+ *
+ * @return:
+ * Value~1 if a ClipBox is found. If no clip box is found or an
+ * error occured, value~0 is returned.
+ */
+ typedef FT_Bool
+ ( *TT_Get_Color_Glyph_ClipBox_Func )( TT_Face face,
+ FT_UInt base_glyph,
+ FT_ClipBox* clip_box );
+
+
/**************************************************************************
*
* @functype:
@@ -890,17 +928,18 @@ FT_BEGIN_HEADER
TT_Set_SBit_Strike_Func set_sbit_strike;
TT_Load_Strike_Metrics_Func load_strike_metrics;
- TT_Load_Table_Func load_cpal;
- TT_Load_Table_Func load_colr;
- TT_Free_Table_Func free_cpal;
- TT_Free_Table_Func free_colr;
- TT_Set_Palette_Func set_palette;
- TT_Get_Colr_Layer_Func get_colr_layer;
- TT_Get_Color_Glyph_Paint_Func get_colr_glyph_paint;
- TT_Get_Paint_Layers_Func get_paint_layers;
- TT_Get_Colorline_Stops_Func get_colorline_stops;
- TT_Get_Paint_Func get_paint;
- TT_Blend_Colr_Func colr_blend;
+ TT_Load_Table_Func load_cpal;
+ TT_Load_Table_Func load_colr;
+ TT_Free_Table_Func free_cpal;
+ TT_Free_Table_Func free_colr;
+ TT_Set_Palette_Func set_palette;
+ TT_Get_Colr_Layer_Func get_colr_layer;
+ TT_Get_Color_Glyph_Paint_Func get_colr_glyph_paint;
+ TT_Get_Color_Glyph_ClipBox_Func get_color_glyph_clipbox;
+ TT_Get_Paint_Layers_Func get_paint_layers;
+ TT_Get_Colorline_Stops_Func get_colorline_stops;
+ TT_Get_Paint_Func get_paint;
+ TT_Blend_Colr_Func colr_blend;
TT_Get_Metrics_Func get_metrics;
@@ -951,6 +990,7 @@ FT_BEGIN_HEADER
set_palette_, \
get_colr_layer_, \
get_colr_glyph_paint_, \
+ get_color_glyph_clipbox, \
get_paint_layers_, \
get_colorline_stops_, \
get_paint_, \
@@ -995,6 +1035,7 @@ FT_BEGIN_HEADER
set_palette_, \
get_colr_layer_, \
get_colr_glyph_paint_, \
+ get_color_glyph_clipbox, \
get_paint_layers_, \
get_colorline_stops_, \
get_paint_, \
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 0ded2440f..5c1a4d034 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -5639,6 +5639,35 @@
}
+ /* documentation is in ftcolor.h */
+
+ FT_EXPORT_DEF( FT_Bool )
+ FT_Get_Color_Glyph_ClipBox( FT_Face face,
+ FT_UInt base_glyph,
+ FT_ClipBox* clip_box )
+ {
+ TT_Face ttface;
+ SFNT_Service sfnt;
+
+
+ if ( !face || !clip_box )
+ return 0;
+
+ if ( !FT_IS_SFNT( face ) )
+ return 0;
+
+ ttface = (TT_Face)face;
+ sfnt = (SFNT_Service)ttface->sfnt;
+
+ if ( sfnt->get_color_glyph_clipbox )
+ return sfnt->get_color_glyph_clipbox( ttface,
+ base_glyph,
+ clip_box );
+ else
+ return 0;
+ }
+
+
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Bool )
diff --git a/src/sfnt/sfdriver.c b/src/sfnt/sfdriver.c
index 824e709fa..d1d01c99e 100644
--- a/src/sfnt/sfdriver.c
+++ b/src/sfnt/sfdriver.c
@@ -1292,13 +1292,15 @@
/* TT_Get_Colr_Layer_Func get_colr_layer */
PUT_COLOR_LAYERS_V1( tt_face_get_colr_glyph_paint ),
- /* TT_Get_Colr_Glyph_Paint_Func get_colr_glyph_paint */
+ /* TT_Get_Color_Glyph_Paint_Func get_colr_glyph_paint */
+ PUT_COLOR_LAYERS_V1( tt_face_get_color_glyph_clipbox ),
+ /* TT_Get_Color_Glyph_ClipBox_Func get_clipbox */
PUT_COLOR_LAYERS_V1( tt_face_get_paint_layers ),
- /* TT_Get_Paint_Layers_Func get_paint_layers */
+ /* TT_Get_Paint_Layers_Func get_paint_layers */
PUT_COLOR_LAYERS_V1( tt_face_get_colorline_stops ),
- /* TT_Get_Paint get_paint */
+ /* TT_Get_Paint get_paint */
PUT_COLOR_LAYERS_V1( tt_face_get_paint ),
- /* TT_Get_Colorline_Stops_Func get_colorline_stops */
+ /* TT_Get_Colorline_Stops_Func get_colorline_stops */
PUT_COLOR_LAYERS( tt_face_colr_blend_layer ),
/* TT_Blend_Colr_Func colr_blend */
diff --git a/src/sfnt/ttcolr.c b/src/sfnt/ttcolr.c
index b8f4777ed..2f3e8846d 100644
--- a/src/sfnt/ttcolr.c
+++ b/src/sfnt/ttcolr.c
@@ -94,6 +94,8 @@
FT_ULong num_layers_v1;
FT_Byte* layers_v1;
+ FT_Byte* clip_list;
+
/*
* Paint tables start at the minimum of the end of the LayerList and the
* end of the BaseGlyphList. Record this location in a field here for
@@ -134,7 +136,7 @@
FT_ULong base_glyph_offset, layer_offset;
FT_ULong base_glyphs_offset_v1, num_base_glyphs_v1;
- FT_ULong layer_offset_v1, num_layers_v1;
+ FT_ULong layer_offset_v1, num_layers_v1, clip_list_offset;
FT_ULong table_size;
@@ -226,6 +228,16 @@
colr->base_glyphs_v1 +
colr->num_base_glyphs_v1 * BASE_GLYPH_PAINT_RECORD_SIZE;
}
+
+ clip_list_offset = FT_NEXT_ULONG( p );
+
+ if ( clip_list_offset >= table_size )
+ goto InvalidTable;
+
+ if ( clip_list_offset )
+ colr->clip_list = (FT_Byte*)( table + clip_list_offset );
+ else
+ colr->clip_list = 0;
}
colr->base_glyphs = (FT_Byte*)( table + base_glyph_offset );
@@ -796,6 +808,117 @@
}
+ FT_LOCAL_DEF( FT_Bool )
+ tt_face_get_color_glyph_clipbox( TT_Face face,
+ FT_UInt base_glyph,
+ FT_ClipBox* clip_box )
+ {
+ Colr* colr;
+
+ FT_Byte *p, *p1, *clip_base;
+
+ FT_Byte clip_list_format;
+ FT_ULong num_clip_boxes, i;
+ FT_UShort gid_start, gid_end;
+ FT_UInt32 clip_box_offset;
+ FT_Byte format;
+
+ const FT_Byte num_corners = 4;
+ FT_Vector corners[4];
+ FT_Byte j;
+ FT_BBox font_clip_box;
+
+
+ colr = (Colr*)face->colr;
+ if ( !colr )
+ return 0;
+
+ if ( !colr->clip_list )
+ return 0;
+
+ p = colr->clip_list;
+
+ clip_base = p;
+ clip_list_format = FT_NEXT_BYTE ( p );
+
+ /* Format byte used here to be able to upgrade ClipList for >16bit */
+ /* glyph ids; for now we can expect it to be 0. */
+ if ( !( clip_list_format == 0 ) )
+ return 0;
+
+ num_clip_boxes = FT_NEXT_ULONG( p );
+
+ for ( i = 0; i < num_clip_boxes; ++i )
+ {
+ gid_start = FT_NEXT_USHORT( p );
+ gid_end = FT_NEXT_USHORT( p );
+ clip_box_offset = FT_NEXT_UOFF3( p );
+
+ if ( base_glyph >= gid_start && base_glyph <= gid_end )
+ {
+ p1 = (FT_Byte*)( clip_base + clip_box_offset );
+
+ if ( p1 >= ( (FT_Byte*)colr->table + colr->table_size ) )
+ return 0;
+
+ format = FT_NEXT_BYTE( p1 );
+
+ if ( format < 0 || format > 1 )
+ return 0;
+
+ /* `face->root.size->metrics.x_scale` and `y_scale` are factors */
+ /* that scale a font unit value in integers to a 26.6 fixed value */
+ /* according to the requested size, see for example */
+ /* `ft_recompute_scaled_metrics`. */
+ font_clip_box.xMin = FT_MulFix( FT_NEXT_SHORT( p1 ),
+ face->root.size->metrics.x_scale );
+ font_clip_box.yMin = FT_MulFix( FT_NEXT_SHORT( p1 ),
+ face->root.size->metrics.x_scale );
+ font_clip_box.xMax = FT_MulFix( FT_NEXT_SHORT( p1 ),
+ face->root.size->metrics.x_scale );
+ font_clip_box.yMax = FT_MulFix( FT_NEXT_SHORT( p1 ),
+ face->root.size->metrics.x_scale );
+
+ /* Make 4 corner points (xMin, yMin), (xMax, yMax) and transform */
+ /* them. If we we would only transform two corner points and */
+ /* span a rectangle based on those, the rectangle may become too */
+ /* small to cover the glyph. */
+ corners[0].x = font_clip_box.xMin;
+ corners[1].x = font_clip_box.xMin;
+ corners[2].x = font_clip_box.xMax;
+ corners[3].x = font_clip_box.xMax;
+
+ corners[0].y = font_clip_box.yMin;
+ corners[1].y = font_clip_box.yMax;
+ corners[2].y = font_clip_box.yMax;
+ corners[3].y = font_clip_box.yMin;
+
+ for ( j = 0; j < num_corners; ++j )
+ {
+ if ( face->root.internal->transform_flags & 1 )
+ FT_Vector_Transform( &corners[j],
+ &face->root.internal->transform_matrix );
+
+ if ( face->root.internal->transform_flags & 2 )
+ {
+ corners[j].x += face->root.internal->transform_delta.x;
+ corners[j].y += face->root.internal->transform_delta.y;
+ }
+ }
+
+ clip_box->bottom_left = corners[0];
+ clip_box->top_left = corners[1];
+ clip_box->top_right = corners[2];
+ clip_box->bottom_right = corners[3];
+
+ return 1;
+ }
+ }
+
+ return 0;
+ }
+
+
FT_LOCAL_DEF( FT_Bool )
tt_face_get_paint_layers( TT_Face face,
FT_LayerIterator* iterator,
diff --git a/src/sfnt/ttcolr.h b/src/sfnt/ttcolr.h
index c91d2b172..b81e4cb95 100644
--- a/src/sfnt/ttcolr.h
+++ b/src/sfnt/ttcolr.h
@@ -48,6 +48,11 @@ FT_BEGIN_HEADER
FT_Color_Root_Transform root_transform,
FT_OpaquePaint* paint );
+ FT_LOCAL( FT_Bool )
+ tt_face_get_color_glyph_clipbox( TT_Face face,
+ FT_UInt base_glyph,
+ FT_ClipBox* clip_box );
+
FT_LOCAL( FT_Bool )
tt_face_get_paint_layers( TT_Face face,
FT_LayerIterator* iterator,

View File

@ -0,0 +1,23 @@
From fed5521016227bf8cc4475f66450a9963568d162 Mon Sep 17 00:00:00 2001
From: Werner Lemberg <wl@gnu.org>
Date: Mon, 9 Aug 2021 19:27:34 +0200
Subject: [PATCH] * src/sfnt/ttcolr.c (tt_face_get_color_glyph_clipbox): Minor
fix.
---
src/sfnt/ttcolr.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/sfnt/ttcolr.c b/src/sfnt/ttcolr.c
index 2f3e8846d..68807127f 100644
--- a/src/sfnt/ttcolr.c
+++ b/src/sfnt/ttcolr.c
@@ -863,7 +863,7 @@
format = FT_NEXT_BYTE( p1 );
- if ( format < 0 || format > 1 )
+ if ( format > 1 )
return 0;
/* `face->root.size->metrics.x_scale` and `y_scale` are factors */

View File

@ -0,0 +1,55 @@
From e40ae7569aa4ef591f66ff9066df2f91de75bb77 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dominik=20R=C3=B6ttsches?= <drott@chromium.org>
Date: Mon, 9 Aug 2021 13:44:55 +0300
Subject: [PATCH] [sfnt] Add missing blend mode 'plus' to 'COLR' v1.
* include/freetype/ftcolor.h (FT_Composite_Mode): Add missing blend mode
'plus' after it was added to the spec.
---
include/freetype/ftcolor.h | 33 +++++++++++++++++----------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/include/freetype/ftcolor.h b/include/freetype/ftcolor.h
index b98289917..cbd2d85bb 100644
--- a/include/freetype/ftcolor.h
+++ b/include/freetype/ftcolor.h
@@ -740,22 +740,23 @@ FT_BEGIN_HEADER
FT_COLR_COMPOSITE_SRC_ATOP = 9,
FT_COLR_COMPOSITE_DEST_ATOP = 10,
FT_COLR_COMPOSITE_XOR = 11,
- FT_COLR_COMPOSITE_SCREEN = 12,
- FT_COLR_COMPOSITE_OVERLAY = 13,
- FT_COLR_COMPOSITE_DARKEN = 14,
- FT_COLR_COMPOSITE_LIGHTEN = 15,
- FT_COLR_COMPOSITE_COLOR_DODGE = 16,
- FT_COLR_COMPOSITE_COLOR_BURN = 17,
- FT_COLR_COMPOSITE_HARD_LIGHT = 18,
- FT_COLR_COMPOSITE_SOFT_LIGHT = 19,
- FT_COLR_COMPOSITE_DIFFERENCE = 20,
- FT_COLR_COMPOSITE_EXCLUSION = 21,
- FT_COLR_COMPOSITE_MULTIPLY = 22,
- FT_COLR_COMPOSITE_HSL_HUE = 23,
- FT_COLR_COMPOSITE_HSL_SATURATION = 24,
- FT_COLR_COMPOSITE_HSL_COLOR = 25,
- FT_COLR_COMPOSITE_HSL_LUMINOSITY = 26,
- FT_COLR_COMPOSITE_MAX = 27
+ FT_COLR_COMPOSITE_PLUS = 12,
+ FT_COLR_COMPOSITE_SCREEN = 13,
+ FT_COLR_COMPOSITE_OVERLAY = 14,
+ FT_COLR_COMPOSITE_DARKEN = 15,
+ FT_COLR_COMPOSITE_LIGHTEN = 16,
+ FT_COLR_COMPOSITE_COLOR_DODGE = 17,
+ FT_COLR_COMPOSITE_COLOR_BURN = 18,
+ FT_COLR_COMPOSITE_HARD_LIGHT = 19,
+ FT_COLR_COMPOSITE_SOFT_LIGHT = 20,
+ FT_COLR_COMPOSITE_DIFFERENCE = 21,
+ FT_COLR_COMPOSITE_EXCLUSION = 22,
+ FT_COLR_COMPOSITE_MULTIPLY = 23,
+ FT_COLR_COMPOSITE_HSL_HUE = 24,
+ FT_COLR_COMPOSITE_HSL_SATURATION = 25,
+ FT_COLR_COMPOSITE_HSL_COLOR = 26,
+ FT_COLR_COMPOSITE_HSL_LUMINOSITY = 27,
+ FT_COLR_COMPOSITE_MAX = 28
} FT_Composite_Mode;

View File

@ -1,22 +1,55 @@
# Description: A free and portable TrueType font rendering engine
# URL: https://www.freetype.org
# Maintainer: CRUX System Team, core-ports at crux dot nu
# Depends on: libpng
# URL: https://www.freetype.org
# Maintainer: CRUX System Team, core-ports at crux dot nu
# Depends on: meson ninja libpng
# Optional: brotli harfbuzz libpng
name=freetype
version=2.11.0
release=1
source=(http://download.savannah.gnu.org/releases/$name/$name-$version.tar.xz)
release=2
_dlgversion=0cc0d3eaed28483fc8036d90ac18878ebd83ed87
source=(https://download.savannah.gnu.org/releases/freetype/freetype-2.11.0.tar.xz
freetype2.sh
## we don't want to depend on git but meson will try to pull this with git
## installed when we allow downloads, therefor we sideload it using the
## specific commit
# https://gitlab.freedesktop.org/freetype/freetype/-/tree/master/subprojects
https://github.com/nyorain/dlg/archive/$_dlgversion/dlg-$_dlgversion.tar.gz
# https://github.com/archlinux/svntogit-packages/tree/packages/freetype2/trunk
0001-Enable-table-validation-modules.patch
0002-Enable-subpixel-rendering.patch
0003-Enable-infinality-subpixel-hinting.patch
0004-Enable-long-PCF-family-names.patch
0006-Return_FT_Err_Ok_while_trying_to_render_bitmap.patch
0007-Restore_quiet_no-op_rendering_of_bitmap_glyphs.patch
0008-sfnt-Add-API-for-retrieving-a-COLR-v1-ClipBox-table.patch
0009-src-sfnt-ttcolr.c-tt_face_get_color_glyph_clipbox-Mi.patch
0010-sfnt-Add-missing-blend-mode-plus-to-COLR-v1.patch)
build() {
cd $name-$version
mkdir -p $name-$version/subprojects
rsync -aR $SRC/dlg-$_dlgversion/ $name-$version/subprojects/dlg
./configure \
--prefix=/usr \
--with-zlib \
--with-harfbuzz=no \
--enable-freetype-config # w/o breaks grub2
patch -Np1 -d $name-$version -i $SRC/0001-Enable-table-validation-modules.patch
patch -Np1 -d $name-$version -i $SRC/0002-Enable-subpixel-rendering.patch
patch -Np1 -d $name-$version -i $SRC/0003-Enable-infinality-subpixel-hinting.patch
patch -Np1 -d $name-$version -i $SRC/0004-Enable-long-PCF-family-names.patch
patch -Np1 -d $name-$version -i $SRC/0006-Return_FT_Err_Ok_while_trying_to_render_bitmap.patch
patch -Np1 -d $name-$version -i $SRC/0007-Restore_quiet_no-op_rendering_of_bitmap_glyphs.patch
patch -Np1 -d $name-$version -i $SRC/0008-sfnt-Add-API-for-retrieving-a-COLR-v1-ClipBox-table.patch
patch -Np1 -d $name-$version -i $SRC/0009-src-sfnt-ttcolr.c-tt_face_get_color_glyph_clipbox-Mi.patch
patch -Np1 -d $name-$version -i $SRC/0010-sfnt-Add-missing-blend-mode-plus-to-COLR-v1.patch
make
make DESTDIR=$PKG install
meson setup $name-$version build \
--prefix=/usr \
--buildtype=plain \
--wrap-mode=nodownload \
-D b_lto=true \
-D b_pie=true \
-D default_library=shared
meson compile -C build
DESTDIR=$PKG meson install -C build
install -Dt $PKG/etc/profile.d -m644 $SRC/freetype2.sh
}

12
freetype/freetype2.sh Normal file
View File

@ -0,0 +1,12 @@
# Subpixel hinting mode can be chosen by setting the right TrueType interpreter
# version. The available settings are:
#
# truetype:interpreter-version=35 # Classic mode (default in 2.6)
# truetype:interpreter-version=38 # Infinality mode
# truetype:interpreter-version=40 # Minimal mode (default in 2.7)
#
# There are more properties that can be set, separated by whitespace. Please
# refer to the FreeType documentation for details.
# Uncomment and configure below
#export FREETYPE_PROPERTIES="truetype:interpreter-version=40"