-r prints the correct framerate now
[swftools.git] / pdf2swf / spline.cc
index 37591be..0961227 100644 (file)
@@ -3,9 +3,21 @@
 
    Part of the swftools package.
 
-   Copyright (c) 2001 Matthias Kramm <kramm@quiss.org> 
+   Copyright (c) 2001,2002,2003 Matthias Kramm <kramm@quiss.org> 
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-   This file is distributed under the GPL, see file COPYING for details */
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -336,6 +348,9 @@ void qsplines_getdrawpoints(qspline*s, int num, float**p, int*pnum, double acc)
     *p = positions;
 }
 
+
+#define TANGENTS
+
 int approximate2(struct cspline*s, struct qspline*q, double quality, double start, double end)
 {
     int num=0;
@@ -349,6 +364,23 @@ int approximate2(struct cspline*s, struct qspline*q, double quality, double star
     test.control = cspline_getpoint(s, (start+end)/2);
     test.end = cspline_getpoint(s, end);
     fixcp(&test);
+
+#ifdef TANGENTS
+    if(start< 0.5) {
+       test.control = cspline_getderivative(s, start);
+       test.control.x *= (end-start)/2;
+       test.control.y *= (end-start)/2;
+       test.control.x += test.start.x;
+       test.control.y += test.start.y;
+    } else {
+       test.control = cspline_getderivative(s, end);
+       test.control.x *= -(end-start)/2;
+       test.control.y *= -(end-start)/2;
+       test.control.x += test.end.x;
+       test.control.y += test.end.y;
+    }
+#endif
+
     for(t=0;t<probes;t++) {
        double pos = 0.5/(probes*2)*(t*2+1);
        qr1 = qspline_getpoint(&test, pos);