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 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #ifndef QDECLARATIVEPATH_H
43 #define QDECLARATIVEPATH_H
45 #include "qdeclarativeitem.h"
47 #include <QtDeclarative/qdeclarative.h>
49 #include <QtCore/QObject>
50 #include <QtGui/QPainterPath>
56 QT_MODULE(Declarative)
57 class Q_AUTOTEST_EXPORT QDeclarative1PathElement : public QObject
61 QDeclarative1PathElement(QObject *parent=0) : QObject(parent) {}
66 class Q_AUTOTEST_EXPORT QDeclarative1PathAttribute : public QDeclarative1PathElement
70 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
71 Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
73 QDeclarative1PathAttribute(QObject *parent=0) : QDeclarative1PathElement(parent), _value(0) {}
77 void setName(const QString &name);
80 void setValue(qreal value);
91 class Q_AUTOTEST_EXPORT QDeclarative1Curve : public QDeclarative1PathElement
95 Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged)
96 Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
98 QDeclarative1Curve(QObject *parent=0) : QDeclarative1PathElement(parent), _x(0), _y(0) {}
106 virtual void addToPath(QPainterPath &) {}
117 class Q_AUTOTEST_EXPORT QDeclarative1PathLine : public QDeclarative1Curve
121 QDeclarative1PathLine(QObject *parent=0) : QDeclarative1Curve(parent) {}
123 void addToPath(QPainterPath &path);
126 class Q_AUTOTEST_EXPORT QDeclarative1PathQuad : public QDeclarative1Curve
130 Q_PROPERTY(qreal controlX READ controlX WRITE setControlX NOTIFY controlXChanged)
131 Q_PROPERTY(qreal controlY READ controlY WRITE setControlY NOTIFY controlYChanged)
133 QDeclarative1PathQuad(QObject *parent=0) : QDeclarative1Curve(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 QDeclarative1PathCubic : public QDeclarative1Curve
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 QDeclarative1PathCubic(QObject *parent=0) : QDeclarative1Curve(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 QDeclarative1PathPercent : public QDeclarative1PathElement
193 Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
195 QDeclarative1PathPercent(QObject *parent=0) : QDeclarative1PathElement(parent) {}
198 void setValue(qreal value);
207 class QDeclarative1PathPrivate;
208 class Q_AUTOTEST_EXPORT QDeclarative1Path : public QObject, public QDeclarativeParserStatus
212 Q_INTERFACES(QDeclarativeParserStatus)
213 Q_PROPERTY(QDeclarativeListProperty<QDeclarative1PathElement> 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 QDeclarative1Path(QObject *parent=0);
221 ~QDeclarative1Path();
223 QDeclarativeListProperty<QDeclarative1PathElement> 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(QDeclarative1Path)
270 Q_DECLARE_PRIVATE(QDeclarative1Path)
275 QML_DECLARE_TYPE(QDeclarative1PathElement)
276 QML_DECLARE_TYPE(QDeclarative1PathAttribute)
277 QML_DECLARE_TYPE(QDeclarative1Curve)
278 QML_DECLARE_TYPE(QDeclarative1PathLine)
279 QML_DECLARE_TYPE(QDeclarative1PathQuad)
280 QML_DECLARE_TYPE(QDeclarative1PathCubic)
281 QML_DECLARE_TYPE(QDeclarative1PathPercent)
282 QML_DECLARE_TYPE(QDeclarative1Path)
286 #endif // QDECLARATIVEPATH_H