[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.
This commit is contained in:
parent
7ebe6ac87c
commit
4a46686508
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2015-08-12 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||
|
||||
[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.
|
||||
|
||||
2015-08-11 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
[builds/unix] Minor.
|
||||
|
|
|
@ -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 ) )
|
||||
metrics->horiAdvance = FT_MulFix( metrics->horiAdvance,
|
||||
font_matrix.xx );
|
||||
metrics->vertAdvance = FT_MulFix( metrics->vertAdvance,
|
||||
font_matrix.yy );
|
||||
}
|
||||
|
||||
if ( font_offset.x || font_offset.y )
|
||||
{
|
||||
FT_Outline_Translate( &glyph->root.outline,
|
||||
font_offset.x, font_offset.y );
|
||||
font_offset.x,
|
||||
font_offset.y );
|
||||
|
||||
advance.x = metrics->horiAdvance;
|
||||
advance.y = 0;
|
||||
FT_Vector_Transform( &advance, &font_matrix );
|
||||
metrics->horiAdvance = advance.x + font_offset.x;
|
||||
|
||||
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 )
|
||||
{
|
||||
|
|
|
@ -357,7 +357,6 @@
|
|||
{
|
||||
FT_BBox cbox;
|
||||
FT_Glyph_Metrics* metrics = &cidglyph->metrics;
|
||||
FT_Vector advance;
|
||||
|
||||
|
||||
/* copy the _unscaled_ advance width */
|
||||
|
@ -377,22 +376,27 @@
|
|||
if ( cidsize->metrics.y_ppem < 24 )
|
||||
cidglyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
|
||||
|
||||
/* apply the font matrix */
|
||||
FT_Outline_Transform( &cidglyph->outline, &font_matrix );
|
||||
/* 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( &cidglyph->outline, &font_matrix );
|
||||
|
||||
FT_Outline_Translate( &cidglyph->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( &cidglyph->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 )
|
||||
{
|
||||
|
|
|
@ -395,7 +395,6 @@
|
|||
{
|
||||
FT_BBox cbox;
|
||||
FT_Glyph_Metrics* metrics = &t1glyph->metrics;
|
||||
FT_Vector advance;
|
||||
|
||||
|
||||
/* copy the _unscaled_ advance width */
|
||||
|
@ -427,23 +426,26 @@
|
|||
|
||||
#if 1
|
||||
/* apply the font matrix, if any */
|
||||
if ( font_matrix.xx != 0x10000L || font_matrix.yy != font_matrix.xx ||
|
||||
font_matrix.xy != 0 || font_matrix.yx != 0 )
|
||||
if ( font_matrix.xx != 0x10000L || font_matrix.yy != 0x10000L ||
|
||||
font_matrix.xy != 0 || font_matrix.yx != 0 )
|
||||
{
|
||||
FT_Outline_Transform( &t1glyph->outline, &font_matrix );
|
||||
|
||||
metrics->horiAdvance = FT_MulFix( metrics->horiAdvance,
|
||||
font_matrix.xx );
|
||||
metrics->vertAdvance = FT_MulFix( metrics->vertAdvance,
|
||||
font_matrix.yy );
|
||||
}
|
||||
|
||||
if ( font_offset.x || font_offset.y )
|
||||
{
|
||||
FT_Outline_Translate( &t1glyph->outline,
|
||||
font_offset.x,
|
||||
font_offset.y );
|
||||
|
||||
advance.x = metrics->horiAdvance;
|
||||
advance.y = 0;
|
||||
FT_Vector_Transform( &advance, &font_matrix );
|
||||
metrics->horiAdvance = advance.x + font_offset.x;
|
||||
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;
|
||||
}
|
||||
#endif
|
||||
|
||||
if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )
|
||||
|
|
Loading…
Reference in New Issue