freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] master 275b116b4 6/6: [sfnt] Support variable 'COLR' v1 `Pai


From: Werner Lemberg
Subject: [freetype2] master 275b116b4 6/6: [sfnt] Support variable 'COLR' v1 `PaintVarSkew*`.
Date: Sat, 9 Jul 2022 00:00:36 -0400 (EDT)

branch: master
commit 275b116b40c9d183d42242099ea9ff276985855b
Author: Dominik Röttsches <drott@chromium.org>
Commit: Werner Lemberg <wl@gnu.org>

    [sfnt] Support variable 'COLR' v1 `PaintVarSkew*`.
    
    * src/sfnt/ttcolr.c (FT_PaintFormat_Internal): New enumeration values
    `FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW`,
    `FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER`, and
    `FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER`.
    (read_paint): Handle new enumeration values.
---
 src/sfnt/ttcolr.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 49 insertions(+), 4 deletions(-)

diff --git a/src/sfnt/ttcolr.c b/src/sfnt/ttcolr.c
index a4abd5b66..af649dcfd 100644
--- a/src/sfnt/ttcolr.c
+++ b/src/sfnt/ttcolr.c
@@ -81,7 +81,9 @@
     FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE                = 25,
     FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER             = 26,
     FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER         = 27,
-    FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER               = 30
+    FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW                  = 29,
+    FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER               = 30,
+    FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER           = 31,
 
   } FT_PaintFormat_Internal;
 
@@ -1117,12 +1119,17 @@
 
       apaint->format = FT_COLR_PAINTFORMAT_ROTATE;
 
+
       return 1;
     }
 
-    else if ( apaint->format == FT_COLR_PAINTFORMAT_SKEW ||
+    else if ( apaint->format == FT_COLR_PAINTFORMAT_SKEW     ||
+              (FT_PaintFormat_Internal)apaint->format ==
+                FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW        ||
               (FT_PaintFormat_Internal)apaint->format ==
-                FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER )
+                FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER     ||
+              (FT_PaintFormat_Internal)apaint->format ==
+                FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER )
     {
       apaint->u.skew.paint.p                     = child_table_p;
       apaint->u.skew.paint.insert_root_transform = 0;
@@ -1131,7 +1138,9 @@
       apaint->u.skew.y_skew_angle = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
 
       if ( (FT_PaintFormat_Internal)apaint->format ==
-           FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER )
+             FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER     ||
+           (FT_PaintFormat_Internal)apaint->format ==
+             FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER )
       {
         apaint->u.skew.center_x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
         apaint->u.skew.center_y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
@@ -1142,6 +1151,42 @@
         apaint->u.skew.center_y = 0;
       }
 
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+      if ( ( (FT_PaintFormat_Internal)apaint->format ==
+               FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW        ||
+             (FT_PaintFormat_Internal)apaint->format ==
+               FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER ) &&
+           VARIABLE_COLRV1_ENABLED                            )
+      {
+        var_index_base = FT_NEXT_ULONG( p );
+
+        if ( (FT_PaintFormat_Internal)apaint->format ==
+               FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW )
+        {
+          if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 2,
+                                               item_deltas ) )
+            return 0;
+
+          apaint->u.skew.x_skew_angle += F2DOT14_TO_FIXED( item_deltas[0] );
+          apaint->u.skew.y_skew_angle += F2DOT14_TO_FIXED( item_deltas[1] );
+        }
+
+        if ( (FT_PaintFormat_Internal)apaint->format ==
+               FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER )
+        {
+          if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 4,
+                                               item_deltas ) )
+            return 0;
+
+          apaint->u.skew.x_skew_angle += F2DOT14_TO_FIXED( item_deltas[0] );
+          apaint->u.skew.y_skew_angle += F2DOT14_TO_FIXED( item_deltas[1] );
+          apaint->u.skew.center_x     += INT_TO_FIXED( item_deltas[2] );
+          apaint->u.skew.center_y     += INT_TO_FIXED( item_deltas[3] );
+        }
+      }
+#endif
+
       apaint->format = FT_COLR_PAINTFORMAT_SKEW;
 
       return 1;



reply via email to

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