[truetype] More preparations for MVAR support.

* src/truetype/ttobjs.c (tt_size_reset): Add argument to make
function only recompute ascender, descender, and height.

* src/truetype/ttobjs.h: Updated.

* src/truetype/ttdriver.c (tt_size_select, tt_size_request):
Updated.
This commit is contained in:
Werner Lemberg 2017-01-11 10:05:27 +01:00
parent 7ccca6aec1
commit 8ab08cff63
4 changed files with 36 additions and 15 deletions

View File

@ -1,3 +1,15 @@
2017-01-11 Werner Lemberg <wl@gnu.org>
[truetype] More preparations for MVAR support.
* src/truetype/ttobjs.c (tt_size_reset): Add argument to make
function only recompute ascender, descender, and height.
* src/truetype/ttobjs.h: Updated.
* src/truetype/ttdriver.c (tt_size_select, tt_size_request):
Updated.
2017-01-09 Werner Lemberg <wl@gnu.org> 2017-01-09 Werner Lemberg <wl@gnu.org>
[pcf] Disable long family names by default. [pcf] Disable long family names by default.

View File

@ -304,7 +304,7 @@
/* use the scaled metrics, even when tt_size_reset fails */ /* use the scaled metrics, even when tt_size_reset fails */
FT_Select_Metrics( size->face, strike_index ); FT_Select_Metrics( size->face, strike_index );
tt_size_reset( ttsize ); /* ignore return value */ tt_size_reset( ttsize, 0 ); /* ignore return value */
} }
else else
{ {
@ -354,7 +354,7 @@
if ( FT_IS_SCALABLE( size->face ) ) if ( FT_IS_SCALABLE( size->face ) )
{ {
error = tt_size_reset( ttsize ); error = tt_size_reset( ttsize, 0 );
ttsize->root.metrics = ttsize->metrics; ttsize->root.metrics = ttsize->metrics;
#ifdef TT_USE_BYTECODE_INTERPRETER #ifdef TT_USE_BYTECODE_INTERPRETER

View File

@ -1198,13 +1198,15 @@
/* have been changed. */ /* have been changed. */
/* */ /* */
/* <Input> */ /* <Input> */
/* size :: A handle to the target size object. */ /* size :: A handle to the target size object. */
/* */
/* only_height :: Only recompute ascender, descender, and height. */
/* */ /* */
FT_LOCAL_DEF( FT_Error ) FT_LOCAL_DEF( FT_Error )
tt_size_reset( TT_Size size ) tt_size_reset( TT_Size size,
FT_Bool only_height )
{ {
TT_Face face; TT_Face face;
FT_Error error = FT_Err_Ok;
FT_Size_Metrics* metrics; FT_Size_Metrics* metrics;
@ -1226,17 +1228,26 @@
/* */ /* */
if ( face->header.Flags & 8 ) if ( face->header.Flags & 8 )
{ {
metrics->x_scale = FT_DivFix( metrics->x_ppem << 6,
face->root.units_per_EM );
metrics->y_scale = FT_DivFix( metrics->y_ppem << 6,
face->root.units_per_EM );
metrics->ascender = metrics->ascender =
FT_PIX_ROUND( FT_MulFix( face->root.ascender, metrics->y_scale ) ); FT_PIX_ROUND( FT_MulFix( face->root.ascender, metrics->y_scale ) );
metrics->descender = metrics->descender =
FT_PIX_ROUND( FT_MulFix( face->root.descender, metrics->y_scale ) ); FT_PIX_ROUND( FT_MulFix( face->root.descender, metrics->y_scale ) );
metrics->height = metrics->height =
FT_PIX_ROUND( FT_MulFix( face->root.height, metrics->y_scale ) ); FT_PIX_ROUND( FT_MulFix( face->root.height, metrics->y_scale ) );
}
size->ttmetrics.valid = TRUE;
if ( only_height )
return FT_Err_Ok;
if ( face->header.Flags & 8 )
{
metrics->x_scale = FT_DivFix( metrics->x_ppem << 6,
face->root.units_per_EM );
metrics->y_scale = FT_DivFix( metrics->y_ppem << 6,
face->root.units_per_EM );
metrics->max_advance = metrics->max_advance =
FT_PIX_ROUND( FT_MulFix( face->root.max_advance_width, FT_PIX_ROUND( FT_MulFix( face->root.max_advance_width,
metrics->x_scale ) ); metrics->x_scale ) );
@ -1264,10 +1275,7 @@
size->cvt_ready = -1; size->cvt_ready = -1;
#endif /* TT_USE_BYTECODE_INTERPRETER */ #endif /* TT_USE_BYTECODE_INTERPRETER */
if ( !error ) return FT_Err_Ok;
size->ttmetrics.valid = TRUE;
return error;
} }

View File

@ -389,7 +389,8 @@ FT_BEGIN_HEADER
#endif /* TT_USE_BYTECODE_INTERPRETER */ #endif /* TT_USE_BYTECODE_INTERPRETER */
FT_LOCAL( FT_Error ) FT_LOCAL( FT_Error )
tt_size_reset( TT_Size size ); tt_size_reset( TT_Size size,
FT_Bool only_height );
/*************************************************************************/ /*************************************************************************/