diff options
author | Werner Lemberg <wl@gnu.org> | 2011-12-08 11:55:06 +0100 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2011-12-08 11:55:06 +0100 |
commit | 2fb22d56491235ac44073b73be0bb6444aaf6d46 (patch) | |
tree | 873d0aac664b1f829c8764bfc0d4087319c90a06 | |
parent | 96fcf87b759b5decfd5344d8c3ae1a4e52d8e09d (diff) | |
download | freetype2-2fb22d56491235ac44073b73be0bb6444aaf6d46.tar.gz |
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.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | src/base/ftadvanc.c | 15 |
2 files changed, 13 insertions, 9 deletions
@@ -1,5 +1,12 @@ 2011-12-08 Werner Lemberg <wl@gnu.org> + 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 <wl@gnu.org> + * src/bdf/bdflib.c (_bdf_parse_start): Drop redundant error tracing. 2011-12-02 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> 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; } |