shithub: freetype+ttf2subf

Download patch

ref: ab1c98ac183d07e2ac0e38c5a2a6ec607f14aeb0
parent: 3d77756e73c61ab37eb020a32730cda8efab79ff
author: Anuj Verma <[email protected]>
date: Thu Jan 27 10:23:47 EST 2022

Fix sdf computation while `USE_SQUARED_DISTANCES`.

Function `map_fixed_to_sdf` expects spread to be absolute
and not squared.

* src/sdf/ftbsdf.c (finalize_sdf): Pass absolute spread
while `map_fixed_to_sdf`.

* src/sdf/ftsdf.c (sdf_generate_bounding_box): Ditto.

git/fs: mount .git/fs: mount/attach disallowed
--- a/src/sdf/ftbsdf.c
+++ b/src/sdf/ftbsdf.c
@@ -1096,7 +1096,7 @@
     FT_Int  i, j;
 
     FT_SDFFormat*  t_buffer;
-    FT_16D16       spread;
+    FT_16D16       sp_sq, spread;
 
 
     if ( !worker || !target )
@@ -1116,11 +1116,13 @@
       goto Exit;
     }
 
+    spread = FT_INT_16D16( worker->params.spread );
+
 #if USE_SQUARED_DISTANCES
-    spread = FT_INT_16D16( worker->params.spread *
-                           worker->params.spread );
+    sp_sq = FT_INT_16D16( worker->params.spread *
+                          worker->params.spread );
 #else
-    spread = FT_INT_16D16( worker->params.spread );
+    sp_sq = FT_INT_16D16( worker->params.spread );
 #endif
 
     for ( j = 0; j < r; j++ )
@@ -1136,8 +1138,8 @@
         index = j * w + i;
         dist  = worker->distance_map[index].dist;
 
-        if ( dist < 0 || dist > spread )
-          dist = spread;
+        if ( dist < 0 || dist > sp_sq )
+          dist = sp_sq;
 
 #if USE_SQUARED_DISTANCES
         dist = square_root( dist );
--- a/src/sdf/ftsdf.c
+++ b/src/sdf/ftsdf.c
@@ -3242,7 +3242,7 @@
     buffer   = (FT_SDFFormat*)bitmap->buffer;
 
     if ( USE_SQUARED_DISTANCES )
-      sp_sq = fixed_spread * fixed_spread;
+      sp_sq = FT_INT_16D16( spread * spread );
     else
       sp_sq = fixed_spread;