[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2] VF-fixes 36e9878cc: [truetype] Fix style name handling for v
From: |
Werner Lemberg |
Subject: |
[freetype2] VF-fixes 36e9878cc: [truetype] Fix style name handling for variation fonts. |
Date: |
Fri, 28 Apr 2023 07:46:25 -0400 (EDT) |
branch: VF-fixes
commit 36e9878cc271a7f43d562152b9d602ed2cfdce18
Author: Werner Lemberg <wl@gnu.org>
Commit: Werner Lemberg <wl@gnu.org>
[truetype] Fix style name handling for variation fonts.
* include/freetype/internal/tttypes.h (TT_FaceRec): New field
`non_var_style_name`.
* src/sfnt/sfobjs.c (sfnt_load_face): Initialize `non_var_style_name`.
(sfnt_done_face): Free `non_var_style_name`.
* src/truetype/ttgxvar.c (TT_Set_Named_Instance): Restore non-VF style name
if switching back to non-VF mode.
---
include/freetype/internal/tttypes.h | 5 +++++
src/sfnt/sfobjs.c | 11 +++++++++++
src/truetype/ttgxvar.c | 11 +++++++++--
3 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/include/freetype/internal/tttypes.h
b/include/freetype/internal/tttypes.h
index 10af061b9..984121a0e 100644
--- a/include/freetype/internal/tttypes.h
+++ b/include/freetype/internal/tttypes.h
@@ -1318,6 +1318,9 @@ FT_BEGIN_HEADER
* var_default_named_instance ::
* The index of the default named instance.
*
+ * non_var_style_name ::
+ * The non-variation style name, used as a backup.
+ *
* horz_metrics_size ::
* The size of the 'hmtx' table.
*
@@ -1556,6 +1559,8 @@ FT_BEGIN_HEADER
FT_UInt var_postscript_prefix_len; /* since 2.7.2 */
FT_UInt var_default_named_instance; /* since 2.13.1 */
+
+ const char* non_var_style_name; /* since 2.13.1 */
#endif
/* since version 2.2 */
diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c
index 1574c353d..f5d66ef84 100644
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -1063,6 +1063,16 @@
GET_NAME( FONT_SUBFAMILY, &face->root.style_name );
}
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ {
+ FT_Memory memory = face->root.memory;
+
+
+ if ( FT_STRDUP( face->non_var_style_name, face->root.style_name ) )
+ goto Exit;
+ }
+#endif
+
/* now set up root fields */
{
FT_Face root = &face->root;
@@ -1509,6 +1519,7 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
FT_FREE( face->var_postscript_prefix );
+ FT_FREE( face->non_var_style_name );
#endif
/* freeing glyph color palette data */
diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c
index aec43c851..249ef316a 100644
--- a/src/truetype/ttgxvar.c
+++ b/src/truetype/ttgxvar.c
@@ -3306,6 +3306,8 @@
GX_Blend blend;
FT_MM_Var* mmvar;
+ FT_Memory memory = face->root.memory;
+
FT_UInt num_instances;
@@ -3329,8 +3331,7 @@
if ( instance_index > 0 )
{
- FT_Memory memory = face->root.memory;
- SFNT_Service sfnt = (SFNT_Service)face->sfnt;
+ SFNT_Service sfnt = (SFNT_Service)face->sfnt;
FT_Var_Named_Style* named_style;
FT_String* style_name;
@@ -3354,7 +3355,13 @@
named_style->coords );
}
else
+ {
+ /* restore non-VF style name */
+ FT_FREE( face->root.style_name );
+ if ( FT_STRDUP( face->root.style_name, face->non_var_style_name ) )
+ goto Exit;
error = TT_Set_Var_Design( face, 0, NULL );
+ }
Exit:
return error;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2] VF-fixes 36e9878cc: [truetype] Fix style name handling for variation fonts.,
Werner Lemberg <=