summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexei Podtelezhnikov <apodtele@gmail.com>2018-10-31 23:17:33 -0400
committerAlexei Podtelezhnikov <apodtele@gmail.com>2018-10-31 23:17:33 -0400
commit1e4496c54c010843c1bac56e5d344115d1a49620 (patch)
tree2fcbf258e39122e3c81998f1b67ebfbcf156ecd8
parentba03310b5aa6a8b752f892c32f2354aff9a73f78 (diff)
downloadfreetype2-1e4496c54c010843c1bac56e5d344115d1a49620.tar.gz
[truetype] Speed up variation IUP.
* src/truetype/ttgxvar.c (tt_delta_interpolate): Separate trivial snapping to the same position from true interpolation.
-rw-r--r--ChangeLog7
-rw-r--r--src/truetype/ttgxvar.c21
2 files changed, 25 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 2b75088ff..40eb27311 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2018-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [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 <apodtele@gmail.com>
* 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++ )