ref: 562731d487813c55046eb8d9f03e3ff7be25c3b5
parent: b280537b6d330a2e24307afc8058a79f5b3b8864
author: David Turner <[email protected]>
date: Fri Mar 14 02:31:35 EST 2003
trying to fix TrueType rendering glitches
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-03-14 David Turner <[email protected]>
+
+ * src/truetype/ttdriver.c: fixing the small TrueType native rendering
+ glitches, they came from a small rounding error.
+
2003-03-13 David Turner <[email protected]>
* src/base/ftdbgmem.c, docs/DEBUG.TXT: added new environment variables
--- a/src/truetype/ttdriver.c
+++ b/src/truetype/ttdriver.c
@@ -193,6 +193,7 @@
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;
*metrics2 = *metrics;
@@ -203,19 +204,25 @@
/* */
if ( ( face->header.Flags & 8 ) != 0 )
{
- FT_Long dim_x, dim_y;
-
/* 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 ) / 72;
- dim_y = ( char_height * vert_resolution + 36 ) / 72;
-
- 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 ) / 72 ) + 32 ) & -64;
+ dim_y = ( ( ( char_height * vert_resolution ) / 72 ) + 32 ) & -64;
}
+ else
+ {
+ dim_x = ( ( char_width * horz_resolution + 36 ) / 72 );
+ dim_y = ( ( char_height * vert_resolution + 36 ) / 72 );
+ }
+
+ /* 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 );
size->ttmetrics.valid = FALSE;
#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS