From 6cef627d172809ad853b11f33322ee0ae80175c0 Mon Sep 17 00:00:00 2001 From: David Turner Date: Wed, 7 Jun 2000 20:06:54 +0000 Subject: [PATCH] added code to correctly scale global metrics --- src/type1/t1objs.c | 21 ++++++++++++++++++++- src/type1z/t1objs.c | 20 +++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/type1/t1objs.c b/src/type1/t1objs.c index 289277452..d52fb095f 100644 --- a/src/type1/t1objs.c +++ b/src/type1/t1objs.c @@ -121,10 +121,29 @@ LOCAL_FUNC T1_Error T1_Reset_Size( T1_Size size ) { + /* recompute ascender, descender, etc.. */ + T1_Face face = (T1_Face)size->root.face; + FT_Size_Metrics* metrics = &size->root.metrics; + + if ( metrics->x_ppem < 1 || metrics->y_ppem < 1 ) + return FT_Err_Invalid_Argument; + + /* Compute root ascender, descender, test height, and max_advance */ + metrics->ascender = ( FT_MulFix( face->root.ascender, + metrics->y_scale ) + 32 ) & -64; + + metrics->descender = ( FT_MulFix( face->root.descender, + metrics->y_scale ) + 32 ) & -64; + + metrics->height = ( FT_MulFix( face->root.height, + metrics->y_scale ) + 32 ) & -64; + + metrics->max_advance = ( FT_MulFix( face->root.max_advance_width, + metrics->x_scale ) + 32 ) & -64; + #ifndef T1_CONFIG_OPTION_DISABLE_HINTER return T1_Reset_Size_Hinter( size ); #else - (void)size; return 0; #endif } diff --git a/src/type1z/t1objs.c b/src/type1z/t1objs.c index 48ac8cf21..84dd55b77 100644 --- a/src/type1z/t1objs.c +++ b/src/type1z/t1objs.c @@ -101,7 +101,25 @@ LOCAL_FUNC T1_Error T1_Reset_Size( T1_Size size ) { - UNUSED(size); + /* recompute ascender, descender, etc.. */ + T1_Face face = (T1_Face)size->root.face; + FT_Size_Metrics* metrics = &size->root.metrics; + + if ( metrics->x_ppem < 1 || metrics->y_ppem < 1 ) + return FT_Err_Invalid_Argument; + + /* Compute root ascender, descender, test height, and max_advance */ + metrics->ascender = ( FT_MulFix( face->root.ascender, + metrics->y_scale ) + 32 ) & -64; + + metrics->descender = ( FT_MulFix( face->root.descender, + metrics->y_scale ) + 32 ) & -64; + + metrics->height = ( FT_MulFix( face->root.height, + metrics->y_scale ) + 32 ) & -64; + + metrics->max_advance = ( FT_MulFix( face->root.max_advance_width, + metrics->x_scale ) + 32 ) & -64; return 0; }