From e8ff769c7f3de0698a9e5c502b8b4a4e6b04bac8 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Wed, 6 Aug 2003 04:40:48 +0000 Subject: [PATCH] * src/type1/t1gload.c (T1_Load_Glyph), src/cff/cffgload.c (cff_slot_load), src/cid/cidgload.c (cid_slot_load_glyph): Apply font matrix to advance also. * docs/CHANGES: Updated. --- ChangeLog | 7 +++++++ docs/CHANGES | 3 +++ src/cff/cffgload.c | 9 +++++++++ src/cid/cidgload.c | 9 +++++++++ src/type1/t1gload.c | 9 +++++++++ 5 files changed, 37 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6ea81f8d3..f748acca8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2003-08-05 Werner Lemberg + + * src/type1/t1gload.c (T1_Load_Glyph), src/cff/cffgload.c + (cff_slot_load), src/cid/cidgload.c (cid_slot_load_glyph): Apply + font matrix to advance also. + * docs/CHANGES: Updated. + 2003-07-26 Werner Lemberg * builds/unix/configure.ac (version_info): Set to 9:4:3. diff --git a/docs/CHANGES b/docs/CHANGES index c8e0d660b..e74b07707 100644 --- a/docs/CHANGES +++ b/docs/CHANGES @@ -17,6 +17,9 @@ LATEST CHANGES BETWEEN 2.1.5 and 2.1.4 - Numeric font dictionary entries for synthetic fonts are no longer overwritten. + - The font matrix wasn't applied to the advance width for Type1, CID, + and CFF fonts. + - The test for the charset registry in BDF and PCF fonts is now case-insensitive. diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c index 8440257c7..d9a10bc5c 100644 --- a/src/cff/cffgload.c +++ b/src/cff/cffgload.c @@ -2411,6 +2411,7 @@ { FT_BBox cbox; FT_Glyph_Metrics* metrics = &glyph->root.metrics; + FT_Vector advance; /* copy the _unscaled_ advance width */ @@ -2440,6 +2441,14 @@ font_offset.x, font_offset.y ); + advance.x = metrics->horiAdvance; + advance.y = metrics->vertAdvance; + FT_Vector_Transform( &advance, &font_matrix ); + advance.x += font_offset.x; + advance.y += font_offset.y; + metrics->horiAdvance = advance.x; + metrics->vertAdvance = advance.y; + if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 ) { /* scale the outline and the metrics */ diff --git a/src/cid/cidgload.c b/src/cid/cidgload.c index 9d1881092..913638864 100644 --- a/src/cid/cidgload.c +++ b/src/cid/cidgload.c @@ -348,6 +348,7 @@ { FT_BBox cbox; FT_Glyph_Metrics* metrics = &glyph->root.metrics; + FT_Vector advance; /* copy the _unscaled_ advance width */ @@ -373,6 +374,14 @@ font_offset.x, font_offset.y ); + advance.x = metrics->horiAdvance; + advance.y = metrics->vertAdvance; + FT_Vector_Transform( &advance, &font_matrix ); + advance.x += font_offset.x; + advance.y += font_offset.y; + metrics->horiAdvance = advance.x; + metrics->vertAdvance = advance.y; + if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 ) { /* scale the outline and the metrics */ diff --git a/src/type1/t1gload.c b/src/type1/t1gload.c index 4f46f3586..49fb58984 100644 --- a/src/type1/t1gload.c +++ b/src/type1/t1gload.c @@ -304,6 +304,7 @@ { FT_BBox cbox; FT_Glyph_Metrics* metrics = &glyph->root.metrics; + FT_Vector advance; /* copy the _unscaled_ advance width */ @@ -330,6 +331,14 @@ FT_Outline_Translate( &glyph->root.outline, font_offset.x, font_offset.y ); + + advance.x = metrics->horiAdvance; + advance.y = metrics->vertAdvance; + FT_Vector_Transform( &advance, &font_matrix ); + advance.x += font_offset.x; + advance.y += font_offset.y; + metrics->horiAdvance = advance.x; + metrics->vertAdvance = advance.y; #endif if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )