1 /***************************************************************************
2 * Copyright (C) 2010 by Till Theato (root@ttill.de) *
3 * This file is part of Kdenlive (www.kdenlive.org). *
5 * Kdenlive is free software: you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation, either version 2 of the License, or *
8 * (at your option) any later version. *
10 * Kdenlive is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with Kdenlive. If not, see <http://www.gnu.org/licenses/>. *
17 ***************************************************************************/
19 #ifndef CUBICBEZIERSPLINE_H
20 #define CUBICBEZIERSPLINE_H
28 QPointF h1; // handle 1
30 QPointF h2; // handle 2
32 BPoint() { p = QPointF(-1,-1); } // makes it illegal -> cannot be equal any point
33 bool operator==(const BPoint &point) const { return point.h1 == h1 && point.p == p && point.h2 == h2; }
36 class CubicBezierSpline : public QObject
41 CubicBezierSpline(QObject* parent = 0);
42 CubicBezierSpline(const CubicBezierSpline &spline, QObject* parent = 0);
43 CubicBezierSpline& operator=(const CubicBezierSpline &spline);
45 void fromString(const QString &spline);
46 QString toString() const;
48 QList <BPoint> points();
49 qreal value(qreal x, bool cont = false);
51 int setPoint(int ix, const BPoint &point);
52 int addPoint(const BPoint &point);
53 void removePoint(int ix);
54 void setPrecision(int pre);
58 QPointF point(double t, const QList<QPointF> &points);
59 void validatePoints();
62 int indexOf(const BPoint &p);
64 QList <BPoint> m_points;
65 QMap <double, double> m_spline;
66 QMap <double, double>::const_iterator m_i;