freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] master ca3d401 2/2: * src/cff/cffobjs.c (cff_face_init): Mak


From: Werner LEMBERG
Subject: [freetype2] master ca3d401 2/2: * src/cff/cffobjs.c (cff_face_init): Make named instances work.
Date: Sun, 18 Dec 2016 17:24:40 +0000 (UTC)

branch: master
commit ca3d4019935507e129a600b97974b0f4feca2663
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>

    * src/cff/cffobjs.c (cff_face_init): Make named instances work.
---
 ChangeLog         |    4 ++++
 src/cff/cffobjs.c |   56 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 46623ad..774c9e8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2016-12-18  Werner Lemberg  <address@hidden>
 
+       * src/cff/cffobjs.c (cff_face_init): Make named instances work.
+
+2016-12-18  Werner Lemberg  <address@hidden>
+
        [truetype, cff] Extend `get_var_blend' function of MM service.
 
        In particular, we need access to named instance data.
diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
index 394633b..03ed5a5 100644
--- a/src/cff/cffobjs.c
+++ b/src/cff/cffobjs.c
@@ -683,6 +683,62 @@
       }
 #endif /* FT_DEBUG_LEVEL_TRACE */
 
+
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
+    {
+      FT_Service_MultiMasters  mm = (FT_Service_MultiMasters)face->mm;
+
+      FT_Int  instance_index = face_index >> 16;
+
+
+      if ( FT_HAS_MULTIPLE_MASTERS( cffface ) &&
+           mm                                 &&
+           instance_index > 0                 )
+      {
+        FT_MM_Var*  mm_var;
+
+
+        error = mm->get_mm_var( cffface, NULL );
+        if ( error )
+          goto Exit;
+
+        mm->get_var_blend( cffface, NULL, NULL, &mm_var );
+
+        if ( mm_var->namedstyle )
+        {
+          FT_Var_Named_Style*  named_style;
+          FT_String*           style_name;
+
+
+          /* in `face_index', the instance index starts with value 1 */
+          named_style = mm_var->namedstyle + instance_index - 1;
+          error = sfnt->get_name( face,
+                                  (FT_UShort)named_style->strid,
+                                  &style_name );
+          if ( error )
+            goto Exit;
+
+          /* set style name; if already set, replace it */
+          if ( face->root.style_name )
+            FT_FREE( face->root.style_name );
+          face->root.style_name = style_name;
+
+          /* finally, select the named instance */
+          error = mm->set_var_design( cffface,
+                                      mm_var->num_axis,
+                                      named_style->coords );
+          if ( error )
+            goto Exit;
+        }
+      }
+    }
+
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+
+
+
       if ( !dict->has_font_matrix )
         dict->units_per_em = pure_cff ? 1000 : face->root.units_per_EM;
 



reply via email to

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