1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: http://www.qt-project.org/
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 class Q_AUTOTEST_EXPORT QDeclarative1PathElement : public QObject
60 QDeclarative1PathElement(QObject *parent=0) : QObject(parent) {}
65 class Q_AUTOTEST_EXPORT QDeclarative1PathAttribute : public QDeclarative1PathElement
69 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
70 Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
72 QDeclarative1PathAttribute(QObject *parent=0) : QDeclarative1PathElement(parent), _value(0) {}
76 void setName(const QString &name);
79 void setValue(qreal value);
90 class Q_AUTOTEST_EXPORT QDeclarative1Curve : public QDeclarative1PathElement
94 Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged)
95 Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
97 QDeclarative1Curve(QObject *parent=0) : QDeclarative1PathElement(parent), _x(0), _y(0) {}
105 virtual void addToPath(QPainterPath &) {}
116 class Q_AUTOTEST_EXPORT QDeclarative1PathLine : public QDeclarative1Curve
120 QDeclarative1PathLine(QObject *parent=0) : QDeclarative1Curve(parent) {}
122 void addToPath(QPainterPath &path);
125 class Q_AUTOTEST_EXPORT QDeclarative1PathQuad : public QDeclarative1Curve
129 Q_PROPERTY(qreal controlX READ controlX WRITE setControlX NOTIFY controlXChanged)
130 Q_PROPERTY(qreal controlY READ controlY WRITE setControlY NOTIFY controlYChanged)
132 QDeclarative1PathQuad(QObject *parent=0) : QDeclarative1Curve(parent), _controlX(0), _controlY(0) {}
134 qreal controlX() const;
135 void setControlX(qreal x);
137 qreal controlY() const;
138 void setControlY(qreal y);
140 void addToPath(QPainterPath &path);
143 void controlXChanged();
144 void controlYChanged();
151 class Q_AUTOTEST_EXPORT QDeclarative1PathCubic : public QDeclarative1Curve
155 Q_PROPERTY(qreal control1X READ control1X WRITE setControl1X NOTIFY control1XChanged)
156 Q_PROPERTY(qreal control1Y READ control1Y WRITE setControl1Y NOTIFY control1YChanged)
157 Q_PROPERTY(qreal control2X READ control2X WRITE setControl2X NOTIFY control2XChanged)
158 Q_PROPERTY(qreal control2Y READ control2Y WRITE setControl2Y NOTIFY control2YChanged)
160 QDeclarative1PathCubic(QObject *parent=0) : QDeclarative1Curve(parent), _control1X(0), _control1Y(0), _control2X(0), _control2Y(0) {}
162 qreal control1X() const;
163 void setControl1X(qreal x);
165 qreal control1Y() const;
166 void setControl1Y(qreal y);
168 qreal control2X() const;
169 void setControl2X(qreal x);
171 qreal control2Y() const;
172 void setControl2Y(qreal y);
174 void addToPath(QPainterPath &path);
177 void control1XChanged();
178 void control1YChanged();
179 void control2XChanged();
180 void control2YChanged();
189 class Q_AUTOTEST_EXPORT QDeclarative1PathPercent : public QDeclarative1PathElement
192 Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
194 QDeclarative1PathPercent(QObject *parent=0) : QDeclarative1PathElement(parent) {}
197 void setValue(qreal value);
206 class QDeclarative1PathPrivate;
207 class Q_AUTOTEST_EXPORT QDeclarative1Path : public QObject, public QDeclarativeParserStatus
211 Q_INTERFACES(QDeclarativeParserStatus)
212 Q_PROPERTY(QDeclarativeListProperty<QDeclarative1PathElement> pathElements READ pathElements)
213 Q_PROPERTY(qreal startX READ startX WRITE setStartX NOTIFY startXChanged)
214 Q_PROPERTY(qreal startY READ startY WRITE setStartY NOTIFY startYChanged)
215 Q_PROPERTY(bool closed READ isClosed NOTIFY changed)
216 Q_CLASSINFO("DefaultProperty", "pathElements")
217 Q_INTERFACES(QDeclarativeParserStatus)
219 QDeclarative1Path(QObject *parent=0);
220 ~QDeclarative1Path();
222 QDeclarativeListProperty<QDeclarative1PathElement> pathElements();
224 qreal startX() const;
225 void setStartX(qreal x);
227 qreal startY() const;
228 void setStartY(qreal y);
230 bool isClosed() const;
232 QPainterPath path() const;
233 QStringList attributes() const;
234 qreal attributeAt(const QString &, qreal) const;
235 QPointF pointAt(qreal) const;
239 void startXChanged();
240 void startYChanged();
243 virtual void componentComplete();
244 virtual void classBegin();
250 struct AttributePoint {
251 AttributePoint() : percent(0), scale(1), origpercent(0) {}
252 AttributePoint(const AttributePoint &other)
253 : percent(other.percent), scale(other.scale), origpercent(other.origpercent), values(other.values) {}
254 AttributePoint &operator=(const AttributePoint &other) {
255 percent = other.percent; scale = other.scale; origpercent = other.origpercent; values = other.values; return *this;
257 qreal percent; //massaged percent along the painter path
259 qreal origpercent; //'real' percent along the painter path
260 QHash<QString, qreal> values;
263 void interpolate(int idx, const QString &name, qreal value);
264 void endpoint(const QString &name);
265 void createPointCache() const;
268 Q_DISABLE_COPY(QDeclarative1Path)
269 Q_DECLARE_PRIVATE(QDeclarative1Path)
274 QML_DECLARE_TYPE(QDeclarative1PathElement)
275 QML_DECLARE_TYPE(QDeclarative1PathAttribute)
276 QML_DECLARE_TYPE(QDeclarative1Curve)
277 QML_DECLARE_TYPE(QDeclarative1PathLine)
278 QML_DECLARE_TYPE(QDeclarative1PathQuad)
279 QML_DECLARE_TYPE(QDeclarative1PathCubic)
280 QML_DECLARE_TYPE(QDeclarative1PathPercent)
281 QML_DECLARE_TYPE(QDeclarative1Path)
285 #endif // QDECLARATIVEPATH_H