summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWu, Chia-I (吳佳一) <olvaffe@gmail.com>2005-07-26 08:14:03 +0000
committerWu, Chia-I (吳佳一) <olvaffe@gmail.com>2005-07-26 08:14:03 +0000
commit34d5e263656868d124eaec45658560d59a9ae101 (patch)
treeae969669690df50e55cc9ee484b85eec2a16a598
parente79bc9c1d78ea5ff8ba95d5d1b1a9f0d4723e27a (diff)
downloadfreetype2-34d5e263656868d124eaec45658560d59a9ae101.tar.gz
* 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.
-rw-r--r--ChangeLog8
-rw-r--r--src/truetype/ttdriver.c45
-rw-r--r--src/truetype/ttobjs.h5
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 <b90201047@ntu.edu.tw>
+
+ * 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 <wl@gnu.org>
* 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