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
27 class CubicBezierSpline : public QObject
32 CubicBezierSpline(QObject* parent = 0);
33 CubicBezierSpline(const CubicBezierSpline &spline, QObject* parent = 0);
34 CubicBezierSpline& operator=(const CubicBezierSpline &spline);
36 /** @brief Loads the points from the string @param spline.
38 * x, y values have to be separated with a ';'
39 * handles and points with a '#'
40 * and the nodes with a '|'
41 * So that you get: h1x;h1y#px;py#h2x;h2y|h1x;h1y#... */
42 void fromString(const QString &spline);
43 /** @brief Returns the points stoed in a string.
45 * x, y values have are separated with a ';'
46 * handles and points with a '#'
47 * and the nodes with a '|'
48 * So that you get: h1x;h1y#px;py#h2x;h2y|h1x;h1y#... */
49 QString toString() const;
51 /** @brief Returns a list of the points defining the spline. */
52 QList <BPoint> points();
54 /** @brief Sets the point at index @param ix to @param point and returns its index (it might have changed during validation). */
55 int setPoint(int ix, const BPoint &point);
56 /** @brief Adds @param point and returns its index. */
57 int addPoint(const BPoint &point);
58 /** @brief Removes the point at @param ix. */
59 void removePoint(int ix);
61 /** @brief Returns the point at @param ix.
62 * @param ix Index of the point
63 * @param normalisedWidth (default = 1) Will be multiplied will all x values to change the range from 0-1 into another one
64 * @param normalisedHeight (default = 1) Will be multiplied will all y values to change the range from 0-1 into another one
65 * @param invertHeight (default = false) true => y = 0 is at the very top
67 BPoint getPoint(int ix, int normalisedWidth = 1, int normalisedHeight = 1, bool invertHeight = false);
72 void validatePoints();
74 int indexOf(const BPoint &p);
76 QList <BPoint> m_points;