freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] master 12e4307: Properly handle phantom points for variation


From: Werner LEMBERG
Subject: [freetype2] master 12e4307: Properly handle phantom points for variation fonts (#56601).
Date: Fri, 12 Jul 2019 04:54:53 -0400 (EDT)

branch: master
commit 12e4307dc7b48c9a4a4fc3ac6c32220874ab18ec
Author: Ben Wagner <address@hidden>
Commit: Werner Lemberg <address@hidden>

    Properly handle phantom points for variation fonts (#56601).
    
    * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Scale phantom
    points if HVAR and/or VVAR is present.
---
 ChangeLog              |  7 +++++++
 src/truetype/ttgload.c | 27 +++++++++++++++++++++------
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 84c29a9..27b4c0d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2019-07-12  Ben Wagner  <address@hidden>
+
+       Properly handle phantom points for variation fonts (#56601).
+
+       * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Scale phantom
+       points if HVAR and/or VVAR is present.
+
 2019-07-04  Werner Lemberg  <address@hidden>
 
        [psaux] (2/2) Handle fonts that use SEAC for ligatures (#56580).
diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
index a046840..093eed8 100644
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -1102,9 +1102,16 @@
       }
 
 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-      /* if we have a HVAR table, `pp1' and/or `pp2' are already adjusted */
-      if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) ||
-           !IS_HINTED( loader->load_flags )                                 )
+      /* if we have a HVAR table, `pp1' and/or `pp2' */
+      /* are already adjusted but unscaled           */
+      if ( ( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) &&
+           IS_HINTED( loader->load_flags )                                 )
+      {
+        loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
+        loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
+        /* pp1.y and pp2.y are always zero */
+      }
+      else
 #endif
       {
         loader->pp1 = outline->points[n_points - 4];
@@ -1112,9 +1119,17 @@
       }
 
 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-      /* if we have a VVAR table, `pp3' and/or `pp4' are already adjusted */
-      if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) ||
-           !IS_HINTED( loader->load_flags )                                 )
+      /* if we have a VVAR table, `pp3' and/or `pp4' */
+      /* are already adjusted but unscaled           */
+      if ( ( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) &&
+           IS_HINTED( loader->load_flags )                                 )
+      {
+        loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale );
+        loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
+        loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale );
+        loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
+      }
+      else
 #endif
       {
         loader->pp3 = outline->points[n_points - 2];



reply via email to

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