summaryrefslogtreecommitdiff
path: root/freetype/src/psaux/psintrp.c
diff options
context:
space:
mode:
Diffstat (limited to 'freetype/src/psaux/psintrp.c')
-rw-r--r--freetype/src/psaux/psintrp.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/freetype/src/psaux/psintrp.c b/freetype/src/psaux/psintrp.c
index fcaa58d53..65a802d96 100644
--- a/freetype/src/psaux/psintrp.c
+++ b/freetype/src/psaux/psintrp.c
@@ -1429,6 +1429,13 @@
lastError = error2; /* pass FreeType error through */
goto exit;
}
+
+ /* save the left bearing and width of the SEAC */
+ /* glyph as they will be erased by the next load */
+
+ left_bearing = *decoder->builder.left_bearing;
+ advance = *decoder->builder.advance;
+
cf2_interpT2CharString( font,
&component,
callbacks,
@@ -1439,11 +1446,14 @@
&dummyWidth );
cf2_freeT1SeacComponent( decoder, &component );
- /* save the left bearing and width of the base */
- /* character as they will be erased by the next load */
+ /* If the SEAC glyph doesn't have a (H)SBW of its */
+ /* own use the values from the base glyph. */
- left_bearing = *decoder->builder.left_bearing;
- advance = *decoder->builder.advance;
+ if ( !haveWidth )
+ {
+ left_bearing = *decoder->builder.left_bearing;
+ advance = *decoder->builder.advance;
+ }
decoder->builder.left_bearing->x = 0;
decoder->builder.left_bearing->y = 0;
@@ -1469,8 +1479,8 @@
&dummyWidth );
cf2_freeT1SeacComponent( decoder, &component );
- /* restore the left side bearing and */
- /* advance width of the base character */
+ /* restore the left side bearing and advance width */
+ /* of the SEAC glyph or base character (saved above) */
*decoder->builder.left_bearing = left_bearing;
*decoder->builder.advance = advance;