Commit 57d4de0e51fd327d118bf8e23164f30ba5e31392

David Turner 2001-06-08T13:29:36

fixed a bug that returned an invalid linear width for composite TrueType glyphs fixed source code to work with the new error scheme implemented by Werner

diff --git a/ChangeLog b/ChangeLog
index 24bc1cc..3109fe8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -12,6 +12,13 @@
 	corrupted transformed glyphs that were auto-hinted (the transform
 	was applied twice).
 
+        * include/internal/tttypes.h, src/truetype/ttgload.c: fixed a bug
+        that returned an invalid linear width for composite TrueType glyphs
+
+        * include/fttypes.h, src/base/ftobjs.c: fixed source code to work
+        with the new error scheme implemented by Werner
+
+
 2001-06-07  Werner Lemberg  <wl@gnu.org>
 
 	Updating to libtool 1.4.0 and autoconf 2.50.
diff --git a/include/freetype/fttypes.h b/include/freetype/fttypes.h
index 32de95f..ece9e4f 100644
--- a/include/freetype/fttypes.h
+++ b/include/freetype/fttypes.h
@@ -77,7 +77,7 @@ FT_BEGIN_HEADER
   /*                                                                       */
   /*************************************************************************/
 
-   
+
   /*************************************************************************/
   /*                                                                       */
   /* <Type>                                                                */
@@ -509,6 +509,8 @@ FT_BEGIN_HEADER
 
 #define FT_IS_EMPTY( list )  ( (list).head == 0 )
 
+/* return base error code (without module-specific prefix) */
+#define FT_ERROR_BASE(x)     ((x) & 255)
 
 FT_END_HEADER
 
diff --git a/include/freetype/internal/tttypes.h b/include/freetype/internal/tttypes.h
index 095311a..b2eed82 100644
--- a/include/freetype/internal/tttypes.h
+++ b/include/freetype/internal/tttypes.h
@@ -1570,6 +1570,8 @@ FT_BEGIN_HEADER
     FT_BBox          bbox;
     FT_Int           left_bearing;
     FT_Int           advance;
+    FT_Int           linear;
+    FT_Bool          linear_def;
     FT_Bool          preserve_pps;
     FT_Vector        pp1;
     FT_Vector        pp2;
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index c37d707..df11f1c 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -1240,7 +1240,7 @@
           if ( !error )
             goto Success;
 
-          if ( error != FT_Err_Unknown_File_Format )
+          if ( FT_ERROR_BASE(error) != FT_Err_Unknown_File_Format )
             goto Fail2;
         }
       }
@@ -2115,7 +2115,7 @@
         while ( renderer )
         {
           error = renderer->render( renderer, slot, render_mode, 0 );
-          if ( !error || error != FT_Err_Cannot_Render_Glyph )
+          if ( !error || FT_ERROR_BASE(error) != FT_Err_Cannot_Render_Glyph )
             break;
 
           /* FT_Err_Cannot_Render_Glyph is returned if the render mode   */
diff --git a/src/base/ftoutln.c b/src/base/ftoutln.c
index f8294c6..42268ca 100644
--- a/src/base/ftoutln.c
+++ b/src/base/ftoutln.c
@@ -514,7 +514,7 @@
     while ( renderer )
     {
       error = renderer->raster_render( renderer->raster, params );
-      if ( !error || error != FT_Err_Cannot_Render_Glyph )
+      if ( !error || FT_ERROR_BASE(error) != FT_Err_Cannot_Render_Glyph )
         break;
 
       /* FT_Err_Cannot_Render_Glyph is returned if the render mode   */
diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
index 63bf703..560e981 100644
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -712,6 +712,12 @@
 
       loader->left_bearing = left_bearing;
       loader->advance      = advance_width;
+
+      if ( !loader->linear_def )
+      {
+        loader->linear_def = 1;
+        loader->linear     = advance_width;
+      }
     }
 
     offset = face->glyph_locations[index];
@@ -1154,7 +1160,7 @@
     /* get the device-independent horizontal advance.  It is scaled later */
     /* by the base layer.                                                 */
     {
-      FT_Pos  advance = loader->advance;
+      FT_Pos  advance = loader->linear;
 
 
       /* the flag FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH was introduced to */
diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c
index 1f5b6c7..05440d5 100644
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -7390,7 +7390,7 @@
 
 #endif /* TT_CONFIG_OPTION_INTERPRETER_SWITCH */
 
-      if ( CUR.error != TT_Err_Ok )
+      if ( CUR.error != FT_Err_Ok )
       {
         switch ( CUR.error )
         {