Remove "All rights reserved" line from license headers.
[profile/ivi/qtdeclarative.git] / src / qtquick1 / graphicsitems / qdeclarativepath_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the QtDeclarative module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QDECLARATIVEPATH_H
43 #define QDECLARATIVEPATH_H
44
45 #include "qdeclarativeitem.h"
46
47 #include <QtDeclarative/qdeclarative.h>
48
49 #include <QtCore/QObject>
50 #include <QtGui/QPainterPath>
51
52 QT_BEGIN_HEADER
53
54 QT_BEGIN_NAMESPACE
55
56 class Q_AUTOTEST_EXPORT QDeclarative1PathElement : public QObject
57 {
58     Q_OBJECT
59 public:
60     QDeclarative1PathElement(QObject *parent=0) : QObject(parent) {}
61 Q_SIGNALS:
62     void changed();
63 };
64
65 class Q_AUTOTEST_EXPORT QDeclarative1PathAttribute : public QDeclarative1PathElement
66 {
67     Q_OBJECT
68
69     Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
70     Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
71 public:
72     QDeclarative1PathAttribute(QObject *parent=0) : QDeclarative1PathElement(parent), _value(0) {}
73
74
75     QString name() const;
76     void setName(const QString &name);
77
78     qreal value() const;
79     void setValue(qreal value);
80
81 Q_SIGNALS:
82     void nameChanged();
83     void valueChanged();
84
85 private:
86     QString _name;
87     qreal _value;
88 };
89
90 class Q_AUTOTEST_EXPORT QDeclarative1Curve : public QDeclarative1PathElement
91 {
92     Q_OBJECT
93
94     Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged)
95     Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
96 public:
97     QDeclarative1Curve(QObject *parent=0) : QDeclarative1PathElement(parent), _x(0), _y(0) {}
98
99     qreal x() const;
100     void setX(qreal x);
101
102     qreal y() const;
103     void setY(qreal y);
104
105     virtual void addToPath(QPainterPath &) {}
106
107 Q_SIGNALS:
108     void xChanged();
109     void yChanged();
110
111 private:
112     qreal _x;
113     qreal _y;
114 };
115
116 class Q_AUTOTEST_EXPORT QDeclarative1PathLine : public QDeclarative1Curve
117 {
118     Q_OBJECT
119 public:
120     QDeclarative1PathLine(QObject *parent=0) : QDeclarative1Curve(parent) {}
121
122     void addToPath(QPainterPath &path);
123 };
124
125 class Q_AUTOTEST_EXPORT QDeclarative1PathQuad : public QDeclarative1Curve
126 {
127     Q_OBJECT
128
129     Q_PROPERTY(qreal controlX READ controlX WRITE setControlX NOTIFY controlXChanged)
130     Q_PROPERTY(qreal controlY READ controlY WRITE setControlY NOTIFY controlYChanged)
131 public:
132     QDeclarative1PathQuad(QObject *parent=0) : QDeclarative1Curve(parent), _controlX(0), _controlY(0) {}
133
134     qreal controlX() const;
135     void setControlX(qreal x);
136
137     qreal controlY() const;
138     void setControlY(qreal y);
139
140     void addToPath(QPainterPath &path);
141
142 Q_SIGNALS:
143     void controlXChanged();
144     void controlYChanged();
145
146 private:
147     qreal _controlX;
148     qreal _controlY;
149 };
150
151 class Q_AUTOTEST_EXPORT QDeclarative1PathCubic : public QDeclarative1Curve
152 {
153     Q_OBJECT
154
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)
159 public:
160     QDeclarative1PathCubic(QObject *parent=0) : QDeclarative1Curve(parent), _control1X(0), _control1Y(0), _control2X(0), _control2Y(0) {}
161
162     qreal control1X() const;
163     void setControl1X(qreal x);
164
165     qreal control1Y() const;
166     void setControl1Y(qreal y);
167
168     qreal control2X() const;
169     void setControl2X(qreal x);
170
171     qreal control2Y() const;
172     void setControl2Y(qreal y);
173
174     void addToPath(QPainterPath &path);
175
176 Q_SIGNALS:
177     void control1XChanged();
178     void control1YChanged();
179     void control2XChanged();
180     void control2YChanged();
181
182 private:
183     qreal _control1X;
184     qreal _control1Y;
185     qreal _control2X;
186     qreal _control2Y;
187 };
188
189 class Q_AUTOTEST_EXPORT QDeclarative1PathPercent : public QDeclarative1PathElement
190 {
191     Q_OBJECT
192     Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
193 public:
194     QDeclarative1PathPercent(QObject *parent=0) : QDeclarative1PathElement(parent) {}
195
196     qreal value() const;
197     void setValue(qreal value);
198
199 signals:
200     void valueChanged();
201
202 private:
203     qreal _value;
204 };
205
206 class QDeclarative1PathPrivate;
207 class Q_AUTOTEST_EXPORT QDeclarative1Path : public QObject, public QDeclarativeParserStatus
208 {
209     Q_OBJECT
210
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)
218 public:
219     QDeclarative1Path(QObject *parent=0);
220     ~QDeclarative1Path();
221
222     QDeclarativeListProperty<QDeclarative1PathElement> pathElements();
223
224     qreal startX() const;
225     void setStartX(qreal x);
226
227     qreal startY() const;
228     void setStartY(qreal y);
229
230     bool isClosed() const;
231
232     QPainterPath path() const;
233     QStringList attributes() const;
234     qreal attributeAt(const QString &, qreal) const;
235     QPointF pointAt(qreal) const;
236
237 Q_SIGNALS:
238     void changed();
239     void startXChanged();
240     void startYChanged();
241
242 protected:
243     virtual void componentComplete();
244     virtual void classBegin();
245
246 private Q_SLOTS:
247     void processPath();
248
249 private:
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;
256         }
257         qreal percent;      //massaged percent along the painter path
258         qreal scale;
259         qreal origpercent;  //'real' percent along the painter path
260         QHash<QString, qreal> values;
261     };
262
263     void interpolate(int idx, const QString &name, qreal value);
264     void endpoint(const QString &name);
265     void createPointCache() const;
266
267 private:
268     Q_DISABLE_COPY(QDeclarative1Path)
269     Q_DECLARE_PRIVATE(QDeclarative1Path)
270 };
271
272 QT_END_NAMESPACE
273
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)
282
283 QT_END_HEADER
284
285 #endif // QDECLARATIVEPATH_H