ref: c94fa6699c3b335b3acafc0e0cd2247a63b1220a
parent: 35a90b7901c5ea38dfaf99d929588da0df2e0646
author: Werner Lemberg <[email protected]>
date: Tue May 27 19:24:07 EDT 2008
* src/truetype/ttinterp.c (Ins_MD): The MD instruction also uses original, unscaled input values. Confirmed by Greg Hitchcock from Microsoft.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-28 Werner Lemberg <[email protected]>
+
+ * 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 <[email protected]>
* src/tools/docmaker/tohtml.py (block_footer_start,
--- 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;