shithub: freetype+ttf2subf

Download patch

ref: c912690d22ab16d772328396c27c47075924b012
parent: 94815d6efa3804da0b41466716e80620014327d7
author: Alexei Podtelezhnikov <[email protected]>
date: Mon Sep 30 18:45:34 EDT 2019

* src/base/ftstroke.c (ft_stroker_inside): Speed up.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2019-10-01  Alexei Podtelezhnikov  <[email protected]>
+
+	* src/base/ftstroke.c (ft_stroker_inside): Speed up.
+
 2019-10-01  Werner Lemberg  <[email protected]>
 
 	* src/sfnt/sfwoff2 (woff2_open_font): Initialize `woff2.ttc_fonts'.
--- a/src/base/ftstroke.c
+++ b/src/base/ftstroke.c
@@ -974,8 +974,8 @@
   {
     FT_StrokeBorder  border = stroker->borders + side;
     FT_Angle         phi, theta, rotate;
-    FT_Fixed         length, thcos;
-    FT_Vector        delta;
+    FT_Fixed         length;
+    FT_Vector        sigma, delta;
     FT_Error         error = FT_Err_Ok;
     FT_Bool          intersect;          /* use intersection of lines? */
 
@@ -993,10 +993,13 @@
     else
     {
       /* compute minimum required length of lines */
-      FT_Fixed  min_length = ft_pos_abs( FT_MulFix( stroker->radius,
-                                                    FT_Tan( theta ) ) );
+      FT_Fixed  min_length;
 
 
+      FT_Vector_Unit( &sigma, theta );
+      min_length =
+        ft_pos_abs( FT_MulDiv( stroker->radius, sigma.y, sigma.x ) );
+
       intersect = FT_BOOL( min_length                         &&
                            stroker->line_length >= min_length &&
                            line_length          >= min_length );
@@ -1014,13 +1017,11 @@
     else
     {
       /* compute median angle */
-      phi = stroker->angle_in + theta;
+      phi = stroker->angle_in + theta + rotate;
 
-      thcos = FT_Cos( theta );
+      length = FT_DivFix( stroker->radius, sigma.x );
 
-      length = FT_DivFix( stroker->radius, thcos );
-
-      FT_Vector_From_Polar( &delta, length, phi + rotate );
+      FT_Vector_From_Polar( &delta, length, phi );
       delta.x += stroker->center.x;
       delta.y += stroker->center.y;
     }