shithub: freetype+ttf2subf

Download patch

ref: 2a41ab9e881b808f1ae0698df50bf7bcd77ad03b
parent: baed3dd044ddc73397e77018db7069bd189712d3
author: Wu, Chia-I (吳佳一) <[email protected]>
date: Tue Jul 26 04:14:03 EDT 2005

* src/truetype/ttdriver.c (Set_Char_Sizes): Avoid unnecessary
computations and clean up.

* src/truetype/ttobjs.h (struct TT_SizeRec_): Comment on the
internal copy of metrics.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2005-07-26  Chia I Wu  <[email protected]>
+
+	* src/truetype/ttdriver.c (Set_Char_Sizes): Avoid unnecessary
+	computations and clean up.
+
+	* src/truetype/ttobjs.h (struct TT_SizeRec_): Comment on the
+	internal copy of metrics.
+
 2005-07-12  Werner Lemberg  <[email protected]>
 
 	* include/freetype/ftoutln.h (FT_Outline_Embolden): Fix prototype.
--- a/src/truetype/ttdriver.c
+++ b/src/truetype/ttdriver.c
@@ -167,40 +167,33 @@
                   FT_UInt     horz_resolution,
                   FT_UInt     vert_resolution )
   {
-    TT_Size           size     = (TT_Size)ttsize;
-    FT_Size_Metrics*  metrics  = &size->root.metrics;
-    FT_Size_Metrics*  metrics2 = &size->metrics;
-    TT_Face           face     = (TT_Face)size->root.face;
-    FT_Long           dim_x, dim_y;
+    TT_Size           size    = (TT_Size)ttsize;
+    FT_Size_Metrics*  metrics = &size->metrics;
+    TT_Face           face    = (TT_Face)size->root.face;
 
 
-    *metrics2 = *metrics;
+    /* copy the result from base layer */
+    *metrics = size->root.metrics;
 
     /* This bit flag, when set, indicates that the pixel size must be */
-    /* truncated to an integer.  Nearly all TrueType fonts have this  */
-    /* bit set, as hinting won't work really well otherwise.          */
+    /* rounded to integer.  Nearly all TrueType fonts have this  bit  */
+    /* set, as hinting won't work really well otherwise.              */
     /*                                                                */
     if ( ( face->header.Flags & 8 ) != 0 )
     {
-     /* we need to use rounding in the following computations. Otherwise,
-      * the resulting hinted outlines will be very slightly distorted
-      */
-      dim_x = ( ( char_width  * horz_resolution + (36+32*72) ) / 72 ) & ~63;
-      dim_y = ( ( char_height * vert_resolution + (36+32*72) ) / 72 ) & ~63;
-    }
-    else
-    {
-      dim_x = ( ( char_width  * horz_resolution + 36 ) / 72 );
-      dim_y = ( ( char_height * vert_resolution + 36 ) / 72 );
-    }
+      FT_Long  dim_x, dim_y;
 
-    /* we only modify "metrics2", not "metrics", so these changes have */
-    /* no effect on the result of the auto-hinter when it is used      */
-    /*                                                                 */
-    metrics2->x_ppem  = (FT_UShort)( dim_x >> 6 );
-    metrics2->y_ppem  = (FT_UShort)( dim_y >> 6 );
-    metrics2->x_scale = FT_DivFix( dim_x, face->root.units_per_EM );
-    metrics2->y_scale = FT_DivFix( dim_y, face->root.units_per_EM );
+      dim_x = ( char_width  * horz_resolution + 36 ) / 72;
+      dim_y = ( char_height * vert_resolution + 36 ) / 72;
+
+      dim_x = FT_PIX_ROUND(dim_x);
+      dim_y = FT_PIX_ROUND(dim_y);
+
+      metrics->x_ppem  = (FT_UShort)( dim_x >> 6 );
+      metrics->y_ppem  = (FT_UShort)( dim_y >> 6 );
+      metrics->x_scale = FT_DivFix( dim_x, face->root.units_per_EM );
+      metrics->y_scale = FT_DivFix( dim_y, face->root.units_per_EM );
+    }
 
     size->ttmetrics.valid = FALSE;
 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
--- a/src/truetype/ttobjs.h
+++ b/src/truetype/ttobjs.h
@@ -316,7 +316,10 @@
   {
     FT_SizeRec         root;
 
-    FT_Size_Metrics    metrics; /* slightly different from the root metrics */
+    /* we have our own copy of metrics so that we can modify */
+    /* it without affecting auto-hinting (when used)         */
+    FT_Size_Metrics    metrics;
+
     TT_Size_Metrics    ttmetrics;
 
 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS