1 /****************************************************************************
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the QtDeclarative module of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file. Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights. These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
40 ****************************************************************************/
42 #ifndef QDECLARATIVEPATH_H
43 #define QDECLARATIVEPATH_H
45 #include "qdeclarativeitem.h"
47 #include <qdeclarative.h>
49 #include <QtCore/QObject>
50 #include <QtGui/QPainterPath>
56 QT_MODULE(Declarative)
57 class Q_AUTOTEST_EXPORT QDeclarativePathElement : public QObject
61 QDeclarativePathElement(QObject *parent=0) : QObject(parent) {}
66 class Q_AUTOTEST_EXPORT QDeclarativePathAttribute : public QDeclarativePathElement
70 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
71 Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
73 QDeclarativePathAttribute(QObject *parent=0) : QDeclarativePathElement(parent), _value(0) {}
77 void setName(const QString &name);
80 void setValue(qreal value);
91 class Q_AUTOTEST_EXPORT QDeclarativeCurve : public QDeclarativePathElement
95 Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged)
96 Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
98 QDeclarativeCurve(QObject *parent=0) : QDeclarativePathElement(parent), _x(0), _y(0) {}
106 virtual void addToPath(QPainterPath &) {}
117 class Q_AUTOTEST_EXPORT QDeclarativePathLine : public QDeclarativeCurve
121 QDeclarativePathLine(QObject *parent=0) : QDeclarativeCurve(parent) {}
123 void addToPath(QPainterPath &path);
126 class Q_AUTOTEST_EXPORT QDeclarativePathQuad : public QDeclarativeCurve
130 Q_PROPERTY(qreal controlX READ controlX WRITE setControlX NOTIFY controlXChanged)
131 Q_PROPERTY(qreal controlY READ controlY WRITE setControlY NOTIFY controlYChanged)
133 QDeclarativePathQuad(QObject *parent=0) : QDeclarativeCurve(parent), _controlX(0), _controlY(0) {}
135 qreal controlX() const;
136 void setControlX(qreal x);
138 qreal controlY() const;
139 void setControlY(qreal y);
141 void addToPath(QPainterPath &path);
144 void controlXChanged();
145 void controlYChanged();
152 class Q_AUTOTEST_EXPORT QDeclarativePathCubic : public QDeclarativeCurve
156 Q_PROPERTY(qreal control1X READ control1X WRITE setControl1X NOTIFY control1XChanged)
157 Q_PROPERTY(qreal control1Y READ control1Y WRITE setControl1Y NOTIFY control1YChanged)
158 Q_PROPERTY(qreal control2X READ control2X WRITE setControl2X NOTIFY control2XChanged)
159 Q_PROPERTY(qreal control2Y READ control2Y WRITE setControl2Y NOTIFY control2YChanged)
161 QDeclarativePathCubic(QObject *parent=0) : QDeclarativeCurve(parent), _control1X(0), _control1Y(0), _control2X(0), _control2Y(0) {}
163 qreal control1X() const;
164 void setControl1X(qreal x);
166 qreal control1Y() const;
167 void setControl1Y(qreal y);
169 qreal control2X() const;
170 void setControl2X(qreal x);
172 qreal control2Y() const;
173 void setControl2Y(qreal y);
175 void addToPath(QPainterPath &path);
178 void control1XChanged();
179 void control1YChanged();
180 void control2XChanged();
181 void control2YChanged();
190 class Q_AUTOTEST_EXPORT QDeclarativePathPercent : public QDeclarativePathElement
193 Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
195 QDeclarativePathPercent(QObject *parent=0) : QDeclarativePathElement(parent) {}
198 void setValue(qreal value);
207 class QDeclarativePathPrivate;
208 class Q_AUTOTEST_EXPORT QDeclarativePath : public QObject, public QDeclarativeParserStatus
212 Q_INTERFACES(QDeclarativeParserStatus)
213 Q_PROPERTY(QDeclarativeListProperty<QDeclarativePathElement> pathElements READ pathElements)
214 Q_PROPERTY(qreal startX READ startX WRITE setStartX NOTIFY startXChanged)
215 Q_PROPERTY(qreal startY READ startY WRITE setStartY NOTIFY startYChanged)
216 Q_PROPERTY(bool closed READ isClosed NOTIFY changed)
217 Q_CLASSINFO("DefaultProperty", "pathElements")
218 Q_INTERFACES(QDeclarativeParserStatus)
220 QDeclarativePath(QObject *parent=0);
223 QDeclarativeListProperty<QDeclarativePathElement> pathElements();
225 qreal startX() const;
226 void setStartX(qreal x);
228 qreal startY() const;
229 void setStartY(qreal y);
231 bool isClosed() const;
233 QPainterPath path() const;
234 QStringList attributes() const;
235 qreal attributeAt(const QString &, qreal) const;
236 QPointF pointAt(qreal) const;
240 void startXChanged();
241 void startYChanged();
244 virtual void componentComplete();
245 virtual void classBegin();
251 struct AttributePoint {
252 AttributePoint() : percent(0), scale(1), origpercent(0) {}
253 AttributePoint(const AttributePoint &other)
254 : percent(other.percent), scale(other.scale), origpercent(other.origpercent), values(other.values) {}
255 AttributePoint &operator=(const AttributePoint &other) {
256 percent = other.percent; scale = other.scale; origpercent = other.origpercent; values = other.values; return *this;
258 qreal percent; //massaged percent along the painter path
260 qreal origpercent; //'real' percent along the painter path
261 QHash<QString, qreal> values;
264 void interpolate(int idx, const QString &name, qreal value);
265 void endpoint(const QString &name);
266 void createPointCache() const;
269 Q_DISABLE_COPY(QDeclarativePath)
270 Q_DECLARE_PRIVATE(QDeclarativePath)
275 QML_DECLARE_TYPE(QDeclarativePathElement)
276 QML_DECLARE_TYPE(QDeclarativePathAttribute)
277 QML_DECLARE_TYPE(QDeclarativeCurve)
278 QML_DECLARE_TYPE(QDeclarativePathLine)
279 QML_DECLARE_TYPE(QDeclarativePathQuad)
280 QML_DECLARE_TYPE(QDeclarativePathCubic)
281 QML_DECLARE_TYPE(QDeclarativePathPercent)
282 QML_DECLARE_TYPE(QDeclarativePath)
286 #endif // QDECLARATIVEPATH_H