From 2a41ab9e881b808f1ae0698df50bf7bcd77ad03b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wu=2C=20Chia-I=20=28=E5=90=B3=E4=BD=B3=E4=B8=80=29?= Date: Tue, 26 Jul 2005 08:14:03 +0000 Subject: [PATCH] * 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. --- ChangeLog | 8 ++++++++ src/truetype/ttdriver.c | 45 +++++++++++++++++------------------------ src/truetype/ttobjs.h | 5 ++++- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index bd45e8797..8685464b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-07-26 Chia I Wu + + * 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 * include/freetype/ftoutln.h (FT_Outline_Embolden): Fix prototype. diff --git a/src/truetype/ttdriver.c b/src/truetype/ttdriver.c index c981dfdec..100e0dbdc 100644 --- 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 diff --git a/src/truetype/ttobjs.h b/src/truetype/ttobjs.h index 423d3f005..d193b2dc3 100644 --- a/src/truetype/ttobjs.h +++ b/src/truetype/ttobjs.h @@ -316,7 +316,10 @@ FT_BEGIN_HEADER { 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