Add new load flag `FT_LOAD_NO_SVG`.
Modern color fonts often contain both an 'SVG' and 'COLR' table. FreeType always preferred 'SVG' over 'COLR' (this was a design decision), however, this might not be the right choice for the user. The new flags makes FreeType ignore the 'SVG' table while loading a glyph. Fixes #1229. * include/freetype/freetype.h (FT_LOAD_NO_SVG): New macro. * src/base/ftobjs.c (FT_Load_Glyph), src/cff/cffgload.c (cff_slot_load), src/truetype/ttgload.c (TT_Load_Glyph): Use it.
This commit is contained in:
parent
872a759b46
commit
416d4c25f1
|
@ -5,6 +5,9 @@ CHANGES BETWEEN 2.13.0 and 2.13.1 (2023-XXX-XX)
|
||||||
- New function `FT_Get_Default_Named_Instance` to get the index of
|
- New function `FT_Get_Default_Named_Instance` to get the index of
|
||||||
the default named instance of an OpenType Variation Font.
|
the default named instance of an OpenType Variation Font.
|
||||||
|
|
||||||
|
- A new load flag `FT_LOAD_NO_SVG` to make FreeType ignore glyphs in
|
||||||
|
an 'SVG ' table.
|
||||||
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
|
|
||||||
|
|
|
@ -3425,10 +3425,11 @@ FT_BEGIN_HEADER
|
||||||
*
|
*
|
||||||
* [Since 2.12] If the glyph index maps to an entry in the face's
|
* [Since 2.12] If the glyph index maps to an entry in the face's
|
||||||
* 'SVG~' table, load the associated SVG document from this table and
|
* 'SVG~' table, load the associated SVG document from this table and
|
||||||
* set the `format` field of @FT_GlyphSlotRec to @FT_GLYPH_FORMAT_SVG.
|
* set the `format` field of @FT_GlyphSlotRec to @FT_GLYPH_FORMAT_SVG
|
||||||
* Note that FreeType itself can't render SVG documents; however, the
|
* ([since 2.13.1] provided @FT_LOAD_NO_SVG is not set). Note that
|
||||||
* library provides hooks to seamlessly integrate an external renderer.
|
* FreeType itself can't render SVG documents; however, the library
|
||||||
* See sections @ot_svg_driver and @svg_fonts for more.
|
* provides hooks to seamlessly integrate an external renderer. See
|
||||||
|
* sections @ot_svg_driver and @svg_fonts for more.
|
||||||
*
|
*
|
||||||
* [Since 2.10, experimental] If the glyph index maps to an entry in
|
* [Since 2.10, experimental] If the glyph index maps to an entry in
|
||||||
* the face's 'COLR' table with a 'CPAL' palette table (as defined in
|
* the face's 'COLR' table with a 'CPAL' palette table (as defined in
|
||||||
|
@ -3442,6 +3443,9 @@ FT_BEGIN_HEADER
|
||||||
* @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering
|
* @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering
|
||||||
* so that the client application can handle blending by itself.
|
* so that the client application can handle blending by itself.
|
||||||
*
|
*
|
||||||
|
* FT_LOAD_NO_SVG ::
|
||||||
|
* [Since 2.13.1] Ignore SVG glyph data when loading.
|
||||||
|
*
|
||||||
* FT_LOAD_COMPUTE_METRICS ::
|
* FT_LOAD_COMPUTE_METRICS ::
|
||||||
* [Since 2.6.1] Compute glyph metrics from the glyph data, without the
|
* [Since 2.6.1] Compute glyph metrics from the glyph data, without the
|
||||||
* use of bundled metrics tables (for example, the 'hdmx' table in
|
* use of bundled metrics tables (for example, the 'hdmx' table in
|
||||||
|
@ -3507,6 +3511,7 @@ FT_BEGIN_HEADER
|
||||||
#define FT_LOAD_COLOR ( 1L << 20 )
|
#define FT_LOAD_COLOR ( 1L << 20 )
|
||||||
#define FT_LOAD_COMPUTE_METRICS ( 1L << 21 )
|
#define FT_LOAD_COMPUTE_METRICS ( 1L << 21 )
|
||||||
#define FT_LOAD_BITMAP_METRICS_ONLY ( 1L << 22 )
|
#define FT_LOAD_BITMAP_METRICS_ONLY ( 1L << 22 )
|
||||||
|
#define FT_LOAD_NO_SVG ( 1L << 24 )
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
|
|
|
@ -1019,7 +1019,8 @@
|
||||||
/* elegant. */
|
/* elegant. */
|
||||||
|
|
||||||
/* try to load SVG documents if available */
|
/* try to load SVG documents if available */
|
||||||
if ( FT_HAS_SVG( face ) )
|
if ( ( load_flags & FT_LOAD_NO_SVG ) == 0 &&
|
||||||
|
FT_HAS_SVG( face ) )
|
||||||
{
|
{
|
||||||
error = driver->clazz->load_glyph( slot, face->size,
|
error = driver->clazz->load_glyph( slot, face->size,
|
||||||
glyph_index,
|
glyph_index,
|
||||||
|
|
|
@ -356,14 +356,16 @@
|
||||||
|
|
||||||
#ifdef FT_CONFIG_OPTION_SVG
|
#ifdef FT_CONFIG_OPTION_SVG
|
||||||
/* check for OT-SVG */
|
/* check for OT-SVG */
|
||||||
if ( ( load_flags & FT_LOAD_COLOR ) && face->svg )
|
if ( ( load_flags & FT_LOAD_NO_SVG ) == 0 &&
|
||||||
|
( load_flags & FT_LOAD_COLOR ) &&
|
||||||
|
face->svg )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* We load the SVG document and try to grab the advances from the
|
* We load the SVG document and try to grab the advances from the
|
||||||
* table. For the bearings we rely on the presetting hook to do that.
|
* table. For the bearings we rely on the presetting hook to do that.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
|
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
|
||||||
|
|
||||||
|
|
||||||
if ( size && (size->root.metrics.x_ppem < 1 ||
|
if ( size && (size->root.metrics.x_ppem < 1 ||
|
||||||
|
|
|
@ -2802,7 +2802,9 @@
|
||||||
#ifdef FT_CONFIG_OPTION_SVG
|
#ifdef FT_CONFIG_OPTION_SVG
|
||||||
|
|
||||||
/* check for OT-SVG */
|
/* check for OT-SVG */
|
||||||
if ( ( load_flags & FT_LOAD_COLOR ) && face->svg )
|
if ( ( load_flags & FT_LOAD_NO_SVG ) == 0 &&
|
||||||
|
( load_flags & FT_LOAD_COLOR ) &&
|
||||||
|
face->svg )
|
||||||
{
|
{
|
||||||
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
|
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue