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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
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 )
{