~loic.molinari/+junk/qtdeclarative-shadereffectsource-changes

« back to all changes in this revision

Viewing changes to src/quick/items/qquickitem.h

  • Committer: Loïc Molinari
  • Date: 2012-04-21 17:59:51 UTC
  • Revision ID: loic.molinari@canonical.com-20120421175951-bqx68caaf5zrp76l
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 QtQml 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 QQUICKITEM_H
 
43
#define QQUICKITEM_H
 
44
 
 
45
#include <QtQuick/qtquickglobal.h>
 
46
#include <QtQml/qqml.h>
 
47
#include <QtQml/qqmlcomponent.h>
 
48
 
 
49
#include <QtCore/QObject>
 
50
#include <QtCore/QList>
 
51
#include <QtGui/qevent.h>
 
52
#include <QtGui/qfont.h>
 
53
#include <QtGui/qaccessible.h>
 
54
 
 
55
QT_BEGIN_HEADER
 
56
 
 
57
QT_BEGIN_NAMESPACE
 
58
 
 
59
class QQuickItem;
 
60
class QQuickTransformPrivate;
 
61
class QQuickTransform : public QObject
 
62
{
 
63
    Q_OBJECT
 
64
public:
 
65
    QQuickTransform(QObject *parent = 0);
 
66
    ~QQuickTransform();
 
67
 
 
68
    void appendToItem(QQuickItem *);
 
69
    void prependToItem(QQuickItem *);
 
70
 
 
71
    virtual void applyTo(QMatrix4x4 *matrix) const = 0;
 
72
 
 
73
protected Q_SLOTS:
 
74
    void update();
 
75
 
 
76
protected:
 
77
    QQuickTransform(QQuickTransformPrivate &dd, QObject *parent);
 
78
 
 
79
private:
 
80
    Q_DECLARE_PRIVATE(QQuickTransform)
 
81
};
 
82
 
 
83
class QQuickItemLayer;
 
84
class QQmlV8Function;
 
85
class QQuickState;
 
86
class QQuickAnchorLine;
 
87
class QQuickTransition;
 
88
class QQuickKeyEvent;
 
89
class QQuickAnchors;
 
90
class QQuickItemPrivate;
 
91
class QQuickCanvas;
 
92
class QSGEngine;
 
93
class QTouchEvent;
 
94
class QSGNode;
 
95
class QSGTransformNode;
 
96
class QSGTextureProvider;
 
97
 
 
98
class Q_QUICK_EXPORT QQuickItem : public QObject, public QQmlParserStatus
 
99
{
 
100
    Q_OBJECT
 
101
    Q_INTERFACES(QQmlParserStatus)
 
102
 
 
103
    Q_PROPERTY(QQuickItem *parent READ parentItem WRITE setParentItem NOTIFY parentChanged DESIGNABLE false FINAL)
 
104
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty<QObject> data READ data DESIGNABLE false)
 
105
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty<QObject> resources READ resources DESIGNABLE false)
 
106
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty<QQuickItem> children READ children NOTIFY childrenChanged DESIGNABLE false)
 
107
 
 
108
    Q_PROPERTY(QPointF pos READ pos FINAL)
 
109
    Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged FINAL)
 
110
    Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged FINAL)
 
111
    Q_PROPERTY(qreal z READ z WRITE setZ NOTIFY zChanged FINAL)
 
112
    Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY widthChanged RESET resetWidth FINAL)
 
113
    Q_PROPERTY(qreal height READ height WRITE setHeight NOTIFY heightChanged RESET resetHeight FINAL)
 
114
 
 
115
    Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL)
 
116
    Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
 
117
    Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL)
 
118
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty<QQuickItem> visibleChildren READ visibleChildren NOTIFY visibleChildrenChanged DESIGNABLE false)
 
119
 
 
120
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty<QQuickState> states READ states DESIGNABLE false)
 
121
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty<QQuickTransition> transitions READ transitions DESIGNABLE false)
 
122
    Q_PROPERTY(QString state READ state WRITE setState NOTIFY stateChanged)
 
123
    Q_PROPERTY(QRectF childrenRect READ childrenRect NOTIFY childrenRectChanged DESIGNABLE false FINAL)
 
124
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchors * anchors READ anchors DESIGNABLE false CONSTANT FINAL)
 
125
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine left READ left CONSTANT FINAL)
 
126
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine right READ right CONSTANT FINAL)
 
127
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine horizontalCenter READ horizontalCenter CONSTANT FINAL)
 
128
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine top READ top CONSTANT FINAL)
 
129
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine bottom READ bottom CONSTANT FINAL)
 
130
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine verticalCenter READ verticalCenter CONSTANT FINAL)
 
131
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine baseline READ baseline CONSTANT FINAL)
 
132
    Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged)
 
133
 
 
134
    Q_PROPERTY(bool clip READ clip WRITE setClip NOTIFY clipChanged)
 
135
 
 
136
    Q_PROPERTY(bool focus READ hasFocus WRITE setFocus NOTIFY focusChanged FINAL)
 
137
    Q_PROPERTY(bool activeFocus READ hasActiveFocus NOTIFY activeFocusChanged FINAL)
 
138
 
 
139
    Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
 
140
    Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged)
 
141
    Q_PROPERTY(TransformOrigin transformOrigin READ transformOrigin WRITE setTransformOrigin NOTIFY transformOriginChanged)
 
142
    Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint)  // XXX todo - notify?
 
143
    Q_PROPERTY(QQmlListProperty<QQuickTransform> transform READ transform DESIGNABLE false FINAL)
 
144
 
 
145
    Q_PROPERTY(bool smooth READ smooth WRITE setSmooth NOTIFY smoothChanged)
 
146
    Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged)
 
147
    Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged)
 
148
 
 
149
    Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickItemLayer *layer READ layer DESIGNABLE false CONSTANT FINAL)
 
150
 
 
151
    Q_ENUMS(TransformOrigin)
 
152
    Q_CLASSINFO("DefaultProperty", "data")
 
153
    Q_CLASSINFO("qt_HasQmlAccessors", "true")
 
154
 
 
155
public:
 
156
    enum Flag {
 
157
        ItemClipsChildrenToShape  = 0x01,
 
158
        ItemAcceptsInputMethod    = 0x02,
 
159
        ItemIsFocusScope          = 0x04,
 
160
        ItemHasContents           = 0x08,
 
161
        ItemAcceptsDrops          = 0x10
 
162
        // Remember to increment the size of QQuickItemPrivate::flags
 
163
    };
 
164
    Q_DECLARE_FLAGS(Flags, Flag)
 
165
 
 
166
    enum ItemChange {
 
167
        ItemChildAddedChange,      // value.item
 
168
        ItemChildRemovedChange,    // value.item
 
169
        ItemSceneChange,           // value.canvas
 
170
        ItemVisibleHasChanged,     // value.boolValue
 
171
        ItemParentHasChanged,      // value.item
 
172
        ItemOpacityHasChanged,     // value.realValue
 
173
        ItemActiveFocusHasChanged, // value.boolValue
 
174
        ItemRotationHasChanged     // value.realValue
 
175
    };
 
176
 
 
177
    union ItemChangeData {
 
178
        ItemChangeData(QQuickItem *v) : item(v) {}
 
179
        ItemChangeData(QQuickCanvas *v) : canvas(v) {}
 
180
        ItemChangeData(qreal v) : realValue(v) {}
 
181
        ItemChangeData(bool v) : boolValue(v) {}
 
182
 
 
183
        QQuickItem *item;
 
184
        QQuickCanvas *canvas;
 
185
        qreal realValue;
 
186
        bool boolValue;
 
187
    };
 
188
 
 
189
    enum TransformOrigin {
 
190
        TopLeft, Top, TopRight,
 
191
        Left, Center, Right,
 
192
        BottomLeft, Bottom, BottomRight
 
193
    };
 
194
 
 
195
    QQuickItem(QQuickItem *parent = 0);
 
196
    virtual ~QQuickItem();
 
197
 
 
198
    QSGEngine *sceneGraphEngine() const;
 
199
 
 
200
    QQuickCanvas *canvas() const;
 
201
    QQuickItem *parentItem() const;
 
202
    void setParentItem(QQuickItem *parent);
 
203
    void stackBefore(const QQuickItem *);
 
204
    void stackAfter(const QQuickItem *);
 
205
 
 
206
    QRectF childrenRect();
 
207
    QList<QQuickItem *> childItems() const;
 
208
 
 
209
    bool clip() const;
 
210
    void setClip(bool);
 
211
 
 
212
    QString state() const;
 
213
    void setState(const QString &);
 
214
 
 
215
    qreal baselineOffset() const;
 
216
    void setBaselineOffset(qreal);
 
217
 
 
218
    QQmlListProperty<QQuickTransform> transform();
 
219
 
 
220
    qreal x() const;
 
221
    qreal y() const;
 
222
    QPointF pos() const;
 
223
    void setX(qreal);
 
224
    void setY(qreal);
 
225
    void setPos(const QPointF &);
 
226
 
 
227
    qreal width() const;
 
228
    void setWidth(qreal);
 
229
    void resetWidth();
 
230
    qreal implicitWidth() const;
 
231
 
 
232
    qreal height() const;
 
233
    void setHeight(qreal);
 
234
    void resetHeight();
 
235
    qreal implicitHeight() const;
 
236
 
 
237
    void setSize(const QSizeF &size);
 
238
 
 
239
    TransformOrigin transformOrigin() const;
 
240
    void setTransformOrigin(TransformOrigin);
 
241
    QPointF transformOriginPoint() const;
 
242
    void setTransformOriginPoint(const QPointF &);
 
243
 
 
244
    qreal z() const;
 
245
    void setZ(qreal);
 
246
 
 
247
    qreal rotation() const;
 
248
    void setRotation(qreal);
 
249
    qreal scale() const;
 
250
    void setScale(qreal);
 
251
 
 
252
    qreal opacity() const;
 
253
    void setOpacity(qreal);
 
254
 
 
255
    bool isVisible() const;
 
256
    void setVisible(bool);
 
257
 
 
258
    bool isEnabled() const;
 
259
    void setEnabled(bool);
 
260
 
 
261
    bool smooth() const;
 
262
    void setSmooth(bool);
 
263
 
 
264
    Flags flags() const;
 
265
    void setFlag(Flag flag, bool enabled = true);
 
266
    void setFlags(Flags flags);
 
267
 
 
268
    virtual QRectF boundingRect() const;
 
269
 
 
270
    bool hasActiveFocus() const;
 
271
    bool hasFocus() const;
 
272
    void setFocus(bool);
 
273
    bool isFocusScope() const;
 
274
    QQuickItem *scopedFocusItem() const;
 
275
 
 
276
    Qt::MouseButtons acceptedMouseButtons() const;
 
277
    void setAcceptedMouseButtons(Qt::MouseButtons buttons);
 
278
    bool acceptHoverEvents() const;
 
279
    void setAcceptHoverEvents(bool enabled);
 
280
 
 
281
    bool isUnderMouse() const;
 
282
    void grabMouse();
 
283
    void ungrabMouse();
 
284
    bool keepMouseGrab() const;
 
285
    void setKeepMouseGrab(bool);
 
286
    bool filtersChildMouseEvents() const;
 
287
    void setFiltersChildMouseEvents(bool filter);
 
288
 
 
289
    void grabTouchPoints(const QList<int> &ids);
 
290
    void ungrabTouchPoints();
 
291
    bool keepTouchGrab() const;
 
292
    void setKeepTouchGrab(bool);
 
293
 
 
294
    QTransform itemTransform(QQuickItem *, bool *) const;
 
295
    QPointF mapToItem(const QQuickItem *item, const QPointF &point) const;
 
296
    QPointF mapToScene(const QPointF &point) const;
 
297
    QRectF mapRectToItem(const QQuickItem *item, const QRectF &rect) const;
 
298
    QRectF mapRectToScene(const QRectF &rect) const;
 
299
    QPointF mapFromItem(const QQuickItem *item, const QPointF &point) const;
 
300
    QPointF mapFromScene(const QPointF &point) const;
 
301
    QRectF mapRectFromItem(const QQuickItem *item, const QRectF &rect) const;
 
302
    QRectF mapRectFromScene(const QRectF &rect) const;
 
303
 
 
304
    void polish();
 
305
 
 
306
    Q_INVOKABLE void mapFromItem(QQmlV8Function*) const;
 
307
    Q_INVOKABLE void mapToItem(QQmlV8Function*) const;
 
308
    Q_INVOKABLE void forceActiveFocus();
 
309
    Q_INVOKABLE QQuickItem *childAt(qreal x, qreal y) const;
 
310
 
 
311
    virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
 
312
 
 
313
    struct UpdatePaintNodeData {
 
314
       QSGTransformNode *transformNode;
 
315
    private:
 
316
       friend class QQuickCanvasPrivate;
 
317
       UpdatePaintNodeData();
 
318
    };
 
319
 
 
320
    virtual bool isTextureProvider() const;
 
321
    virtual QSGTextureProvider *textureProvider() const;
 
322
 
 
323
public Q_SLOTS:
 
324
    void update();
 
325
 
 
326
Q_SIGNALS:
 
327
    void childrenRectChanged(const QRectF &);
 
328
    void baselineOffsetChanged(qreal);
 
329
    void stateChanged(const QString &);
 
330
    void focusChanged(bool);
 
331
    void activeFocusChanged(bool);
 
332
    void parentChanged(QQuickItem *);
 
333
    void transformOriginChanged(TransformOrigin);
 
334
    void smoothChanged(bool);
 
335
    void clipChanged(bool);
 
336
 
 
337
    // XXX todo
 
338
    void childrenChanged();
 
339
    void opacityChanged();
 
340
    void enabledChanged();
 
341
    void visibleChanged();
 
342
    void visibleChildrenChanged();
 
343
    void rotationChanged();
 
344
    void scaleChanged();
 
345
 
 
346
    void xChanged();
 
347
    void yChanged();
 
348
    void widthChanged();
 
349
    void heightChanged();
 
350
    void zChanged();
 
351
    void implicitWidthChanged();
 
352
    void implicitHeightChanged();
 
353
 
 
354
protected:
 
355
    virtual bool event(QEvent *);
 
356
 
 
357
    bool isComponentComplete() const;
 
358
    virtual void itemChange(ItemChange, const ItemChangeData &);
 
359
 
 
360
    void updateInputMethod(Qt::InputMethodQueries queries = Qt::ImQueryInput);
 
361
 
 
362
    void setImplicitWidth(qreal);
 
363
    bool widthValid() const; // ### better name?
 
364
    void setImplicitHeight(qreal);
 
365
    bool heightValid() const; // ### better name?
 
366
    void setImplicitSize(qreal, qreal);
 
367
 
 
368
    virtual void classBegin();
 
369
    virtual void componentComplete();
 
370
 
 
371
    virtual void keyPressEvent(QKeyEvent *event);
 
372
    virtual void keyReleaseEvent(QKeyEvent *event);
 
373
    virtual void inputMethodEvent(QInputMethodEvent *);
 
374
    virtual void focusInEvent(QFocusEvent *);
 
375
    virtual void focusOutEvent(QFocusEvent *);
 
376
    virtual void mousePressEvent(QMouseEvent *event);
 
377
    virtual void mouseMoveEvent(QMouseEvent *event);
 
378
    virtual void mouseReleaseEvent(QMouseEvent *event);
 
379
    virtual void mouseDoubleClickEvent(QMouseEvent *event);
 
380
    virtual void mouseUngrabEvent(); // XXX todo - params?
 
381
    virtual void touchUngrabEvent();
 
382
    virtual void wheelEvent(QWheelEvent *event);
 
383
    virtual void touchEvent(QTouchEvent *event);
 
384
    virtual void hoverEnterEvent(QHoverEvent *event);
 
385
    virtual void hoverMoveEvent(QHoverEvent *event);
 
386
    virtual void hoverLeaveEvent(QHoverEvent *event);
 
387
    virtual void dragEnterEvent(QDragEnterEvent *);
 
388
    virtual void dragMoveEvent(QDragMoveEvent *);
 
389
    virtual void dragLeaveEvent(QDragLeaveEvent *);
 
390
    virtual void dropEvent(QDropEvent *);
 
391
    virtual bool childMouseEventFilter(QQuickItem *, QEvent *);
 
392
    virtual void windowDeactivateEvent();
 
393
 
 
394
    virtual void geometryChanged(const QRectF &newGeometry,
 
395
                                 const QRectF &oldGeometry);
 
396
 
 
397
    virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
 
398
    virtual void releaseResources();
 
399
    virtual void updatePolish();
 
400
 
 
401
protected:
 
402
    QQuickItem(QQuickItemPrivate &dd, QQuickItem *parent = 0);
 
403
 
 
404
private:
 
405
    friend class QQuickCanvas;
 
406
    friend class QQuickCanvasPrivate;
 
407
    friend class QSGRenderer;
 
408
    friend class QAccessibleQuickItem;
 
409
    friend class QQuickAccessibleAttached;
 
410
    Q_DISABLE_COPY(QQuickItem)
 
411
    Q_DECLARE_PRIVATE(QQuickItem)
 
412
};
 
413
 
 
414
// XXX todo
 
415
Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickItem::Flags)
 
416
 
 
417
#ifndef QT_NO_DEBUG_STREAM
 
418
QDebug Q_QUICK_EXPORT operator<<(QDebug debug, QQuickItem *item);
 
419
#endif
 
420
 
 
421
QT_END_NAMESPACE
 
422
 
 
423
QML_DECLARE_TYPE(QQuickItem)
 
424
QML_DECLARE_TYPE(QQuickTransform)
 
425
 
 
426
QT_END_HEADER
 
427
 
 
428
#endif // QQUICKITEM_H