diff --git a/ChangeLog b/ChangeLog index b5cf651e0..c75c6fe44 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-05-28 Werner Lemberg + + * src/truetype/ttinterp.c (Ins_MD): The MD instruction also uses + original, unscaled input values. Confirmed by Greg Hitchcock from + Microsoft. + 2008-05-27 Werner Lemberg * src/tools/docmaker/tohtml.py (block_footer_start, diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 84b65c703..2572392e3 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -4821,7 +4821,28 @@ if ( CUR.opcode & 1 ) D = CUR_Func_project( CUR.zp0.cur + L, CUR.zp1.cur + K ); else - D = CUR_Func_dualproj( CUR.zp0.org + L, CUR.zp1.org + K ); + { + FT_Vector* vec1 = CUR.zp0.orus + L; + FT_Vector* vec2 = CUR.zp1.orus + K; + + + if ( CUR.metrics.x_scale == CUR.metrics.y_scale ) + { + /* this should be faster */ + D = CUR_Func_dualproj( vec1, vec2 ); + D = TT_MULFIX( D, CUR.metrics.x_scale ); + } + else + { + FT_Vector vec; + + + vec.x = TT_MULFIX( vec1->x - vec2->x, CUR.metrics.x_scale ); + vec.y = TT_MULFIX( vec1->y - vec2->y, CUR.metrics.y_scale ); + + D = CUR_fast_dualproj( &vec ); + } + } } args[0] = D;