diff --git a/ChangeLog b/ChangeLog index 2b75088ff..40eb27311 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2018-10-31 Alexei Podtelezhnikov + + [truetype] Speed up variation IUP. + + * src/truetype/ttgxvar.c (tt_delta_interpolate): Separate trivial + snapping to the same position from true interpolation. + 2018-10-31 Alexei Podtelezhnikov * src/type1/t1load.c (t1_set_mm_blend): Optimized. diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c index 336fad165..6a45e4278 100644 --- a/src/truetype/ttgxvar.c +++ b/src/truetype/ttgxvar.c @@ -3516,10 +3516,25 @@ /* If the reference points have the same coordinate but different */ /* delta, inferred delta is zero. Otherwise interpolate. */ - if ( in1 != in2 || out1 == out2 ) + if ( in1 == in2 || out1 == out2 ) { - FT_Fixed scale = in1 != in2 ? FT_DivFix( out2 - out1, in2 - in1 ) - : 0; + for ( p = p1; p <= p2; p++ ) + { + out = in_points[p].x; + + if ( out <= in1 ) + out += d1; + else if ( out >= in2 ) + out += d2; + else + out = out1; + + out_points[p].x = out; + } + } + else + { + FT_Fixed scale = FT_DivFix( out2 - out1, in2 - in1 ); for ( p = p1; p <= p2; p++ )