freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] master 8fe50c2ad 6/6: [truetype] Fix style name handling for


From: Werner Lemberg
Subject: [freetype2] master 8fe50c2ad 6/6: [truetype] Fix style name handling for variation fonts.
Date: Sat, 6 May 2023 12:56:05 -0400 (EDT)

branch: master
commit 8fe50c2adca74a4eca1501c831251283b4cc6d9b
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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]