diff options
author | Alexei Podtelezhnikov <apodtele@gmail.com> | 2015-08-12 23:45:40 -0400 |
---|---|---|
committer | Alexei Podtelezhnikov <apodtele@gmail.com> | 2015-08-12 23:45:40 -0400 |
commit | 4a46686508160d5d131b1d84bc33327f24cdea22 (patch) | |
tree | 118f2c9af37ba06ac981d9016778ff8bfac685d9 /src/cff/cffgload.c | |
parent | 7ebe6ac87c863ba83d8f6f4a4f1577c40dce191e (diff) | |
download | freetype2-4a46686508160d5d131b1d84bc33327f24cdea22.tar.gz |
[type1,cff,cid] Streamline font matrix application.
* src/type1/t1gload.c (T1_Load_Glyph): Directly modify advances only
if font matrix is not trivial.
* src/cff/cffgload.c (cff_slot_load): Ditto.
* sff/cid/cidgload.c (cid_slot_load_glyph): Ditto for advances and the
entire outline.
Diffstat (limited to 'src/cff/cffgload.c')
-rw-r--r-- | src/cff/cffgload.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c index a075ddc01..5f57403e2 100644 --- a/src/cff/cffgload.c +++ b/src/cff/cffgload.c @@ -2949,7 +2949,6 @@ { FT_BBox cbox; FT_Glyph_Metrics* metrics = &glyph->root.metrics; - FT_Vector advance; FT_Bool has_vertical_info; @@ -3014,26 +3013,27 @@ glyph->root.outline.flags |= FT_OUTLINE_REVERSE_FILL; - if ( !( font_matrix.xx == 0x10000L && - font_matrix.yy == 0x10000L && - font_matrix.xy == 0 && - font_matrix.yx == 0 ) ) + /* apply the font matrix, if any */ + if ( font_matrix.xx != 0x10000L || font_matrix.yy != 0x10000L || + font_matrix.xy != 0 || font_matrix.yx != 0 ) + { FT_Outline_Transform( &glyph->root.outline, &font_matrix ); - if ( !( font_offset.x == 0 && - font_offset.y == 0 ) ) - FT_Outline_Translate( &glyph->root.outline, - font_offset.x, font_offset.y ); + metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, + font_matrix.xx ); + metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, + font_matrix.yy ); + } - advance.x = metrics->horiAdvance; - advance.y = 0; - FT_Vector_Transform( &advance, &font_matrix ); - metrics->horiAdvance = advance.x + font_offset.x; + if ( font_offset.x || font_offset.y ) + { + FT_Outline_Translate( &glyph->root.outline, + font_offset.x, + font_offset.y ); - advance.x = 0; - advance.y = metrics->vertAdvance; - FT_Vector_Transform( &advance, &font_matrix ); - metrics->vertAdvance = advance.y + font_offset.y; + metrics->horiAdvance += font_offset.x; + metrics->vertAdvance += font_offset.y; + } if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 || force_scaling ) { |