shithub: freetype+ttf2subf

Download patch

ref: b9ff415dfbffb540c4b2df3671fc95fcb07caf66
parent: bbdee28f75e750aa9c95056e270daf5085c3d47b
author: Werner Lemberg <[email protected]>
date: Fri Nov 19 05:35:52 EST 2004

Fix a serious bug in the TT hinter.

* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Don't shift
points vertically before hinting.

* docs/CHANGES: Updated.

* src/cache/ftcglyph.c (FTC_GNode_UnselectFamily,
FTC_GCache_Lookup): A new try to fix comparison with zero.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2004-11-19  Werner Lemberg  <[email protected]>
+
+	Fix a serious bug in the TT hinter.
+
+	* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Don't shift
+	points vertically before hinting.
+
+	* docs/CHANGES: Updated.
+
+	* src/cache/ftcglyph.c (FTC_GNode_UnselectFamily,
+	FTC_GCache_Lookup): A new try to fix comparison with zero.
+
 2004-11-16  Werner Lemberg  <[email protected]>
 
 	* builds/unix/configure.ac: Add `-fno-strict-aliasing' if gcc is
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -13,6 +13,8 @@
       NPUSHW instruction wasn't skipped correctly in IF clauses.  Some
       fonts like `Helvetica 75 Bold' failed.
 
+    - Another bug in handling TrueType hints caused many distortions.
+
 
   II. IMPORTANT CHANGES
 
--- a/src/cache/ftcglyph.c
+++ b/src/cache/ftcglyph.c
@@ -47,7 +47,7 @@
 
 
     gnode->family = NULL;
-    if ( family && --(FT_Long)(family->num_nodes) <= 0 )
+    if ( family && --family->num_nodes == 0 )
       FTC_FAMILY_FREE( family, cache );
   }
 
@@ -189,7 +189,7 @@
 
       error = FTC_Cache_Lookup( FTC_CACHE( cache ), hash, query, anode );
 
-      if ( --(FT_Long)(family->num_nodes) <= 0 )
+      if ( --family->num_nodes == 0 )
         FTC_FAMILY_FREE( family, cache );
     }
     return error;
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -797,12 +797,10 @@
     if ( IS_HINTED( load->load_flags ) )
     {
       FT_Pos  x = zone->org[n_points-4].x;
-      FT_Pos  y = zone->org[n_points-2].y;
 
 
       x = FT_PIX_ROUND( x ) - x;
-      y = FT_PIX_ROUND( y ) - y;
-      translate_array( n_points, zone->org, x, y );
+      translate_array( n_points, zone->org, x, 0 );
 
       org_to_cur( n_points, zone );