From 907715a6a214001db7504983f6cf2a48e8b33053 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Wed, 9 Feb 2022 07:31:56 +0100 Subject: [PATCH] Add `FT_FACE_FLAG_SBIX` and `FT_HAS_SBIX`. Fonts with 'sbix' tables need special handling by the application. * include/freetype/freetype.h (FT_FACE_FLAG_SBIX, FT_HAS_SBIX): New macros. * src/sfnt/sfobjs.c (sfnt_load_face): Set `FT_FACE_FLAG_SBIX` if 'sbix' table is present. --- include/freetype/freetype.h | 25 +++++++++++++++++++++++++ src/sfnt/sfobjs.c | 5 +++++ 2 files changed, 30 insertions(+) diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h index 0bd06f1b8..821ace966 100644 --- a/include/freetype/freetype.h +++ b/include/freetype/freetype.h @@ -154,6 +154,7 @@ FT_BEGIN_HEADER * FT_FACE_FLAG_EXTERNAL_STREAM * FT_FACE_FLAG_HINTER * FT_FACE_FLAG_SVG + * FT_FACE_FLAG_SBIX * * FT_HAS_HORIZONTAL * FT_HAS_VERTICAL @@ -163,6 +164,7 @@ FT_BEGIN_HEADER * FT_HAS_COLOR * FT_HAS_MULTIPLE_MASTERS * FT_HAS_SVG + * FT_HAS_SBIX * * FT_IS_SFNT * FT_IS_SCALABLE @@ -1236,6 +1238,12 @@ FT_BEGIN_HEADER * * FT_FACE_FLAG_SVG :: * [Since 2.12] The face has an 'SVG~' OpenType table. + * + * FT_FACE_FLAG_SBIX :: + * [Since 2.12] The face has an 'sbix' OpenType table *and* outlines. + * For such fonts, @FT_FACE_FLAG_SCALABLE is not set by default to + * retain backward compatibility. + * */ #define FT_FACE_FLAG_SCALABLE ( 1L << 0 ) #define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 ) @@ -1254,6 +1262,7 @@ FT_BEGIN_HEADER #define FT_FACE_FLAG_COLOR ( 1L << 14 ) #define FT_FACE_FLAG_VARIATION ( 1L << 15 ) #define FT_FACE_FLAG_SVG ( 1L << 16 ) +#define FT_FACE_FLAG_SBIX ( 1L << 17 ) /************************************************************************** @@ -1510,6 +1519,22 @@ FT_BEGIN_HEADER ( !!( (face)->face_flags & FT_FACE_FLAG_SVG ) ) + /************************************************************************** + * + * @macro: + * FT_HAS_SBIX + * + * @description: + * A macro that returns true whenever a face object contains an 'sbix' + * OpenType table *and* outline glyphs. + * + * @since: + * 2.12 + */ +#define FT_HAS_SBIX( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_SBIX ) ) + + /************************************************************************** * * @enum: diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c index 9771c35df..008962b2f 100644 --- a/src/sfnt/sfobjs.c +++ b/src/sfnt/sfobjs.c @@ -1058,8 +1058,13 @@ flags |= FT_FACE_FLAG_COLOR; /* color glyphs */ if ( has_outline == TRUE ) + { flags |= FT_FACE_FLAG_SCALABLE; /* scalable outlines */ + if ( face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX ) + flags |= FT_FACE_FLAG_SBIX; /* and 'sbix' bitmaps */ + } + /* The sfnt driver only supports bitmap fonts natively, thus we */ /* don't set FT_FACE_FLAG_HINTER. */ flags |= FT_FACE_FLAG_SFNT | /* SFNT file format */