diff --git a/ChangeLog b/ChangeLog index 48ce64dac..becfa0037 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2011-12-08 Werner Lemberg + + Fix serious scaling bug in `FT_Get_Advances'. + + * src/base/ftadvanc.c (FT_Get_Advances): Advance values returned by + `FT_Load_Glyph' must be simply multiplied by 1024. + 2011-12-08 Werner Lemberg * src/bdf/bdflib.c (_bdf_parse_start): Drop redundant error tracing. diff --git a/src/base/ftadvanc.c b/src/base/ftadvanc.c index 8ab7fcb92..a8bb43d3d 100644 --- a/src/base/ftadvanc.c +++ b/src/base/ftadvanc.c @@ -4,7 +4,7 @@ /* */ /* Quick computation of advance widths (body). */ /* */ -/* Copyright 2008, 2009 by */ +/* Copyright 2008, 2009, 2011 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -129,7 +129,7 @@ { error = func( face, start, count, flags, padvances ); if ( !error ) - goto Exit; + return _ft_face_scale_advances( face, padvances, count, flags ); if ( error != FT_ERROR_BASE( FT_Err_Unimplemented_Feature ) ) return error; @@ -147,16 +147,13 @@ if ( error ) break; + /* scale from 26.6 to 16.16 */ padvances[nn] = ( flags & FT_LOAD_VERTICAL_LAYOUT ) - ? face->glyph->advance.y - : face->glyph->advance.x; + ? face->glyph->advance.y << 10 + : face->glyph->advance.x << 10; } - if ( error ) - return error; - - Exit: - return _ft_face_scale_advances( face, padvances, count, flags ); + return error; }