shithub: freetype+ttf2subf

Download patch

ref: 2fb22d56491235ac44073b73be0bb6444aaf6d46
parent: 96fcf87b759b5decfd5344d8c3ae1a4e52d8e09d
author: Werner Lemberg <[email protected]>
date: Thu Dec 8 06:55:06 EST 2011

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.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2011-12-08  Werner Lemberg  <[email protected]>
 
+	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  <[email protected]>
+
 	* src/bdf/bdflib.c (_bdf_parse_start): Drop redundant error tracing.
 
 2011-12-02  suzuki toshiya  <[email protected]>
--- 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;
   }