diff options
author | Alan Alpert <alan.alpert@nokia.com> | 2012-07-11 17:32:16 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-17 07:26:15 +0200 |
commit | feb996e3ab44e68082c97102556ea396f5df3f44 (patch) | |
tree | 7613a8a4eaf5a8e0fb2801e9d0d9d1869524c348 /src/quick/items/qquickwindow_p.h | |
parent | 68bbdacd2d5a6fa02f085a996411fb2b71875174 (diff) |
QQuickCanvas renames
QQuickCanvas is now called QQuickWindow
QQuickCanvas::rootItem is now QQuickWindow::contentItem
QQuickItem::canvas is now QQuickItem::window
QQuickItem::ItemChangeData::canvas is also renamed window
QQuickCanvas::grabFrameBuffer is now QQuickWindow::grabWindow
The functions related to the color property have dropped the clear from
their names.
The first three changes have interim compatibility measures in place to
ease the transition.
Change-Id: Id34e29546a22a74a7ae2ad90ee3a8def6fc541d2
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick/items/qquickwindow_p.h')
-rw-r--r-- | src/quick/items/qquickwindow_p.h | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/src/quick/items/qquickwindow_p.h b/src/quick/items/qquickwindow_p.h new file mode 100644 index 0000000000..52e46ca6a8 --- /dev/null +++ b/src/quick/items/qquickwindow_p.h @@ -0,0 +1,224 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtQml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKWINDOW_P_H +#define QQUICKWINDOW_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qquickitem.h" +#include "qquickwindow.h" +#include <private/qqmlguard_p.h> + +#include <QtQuick/private/qsgcontext_p.h> +#include <private/qquickdrag_p.h> + +#include <QtCore/qthread.h> +#include <QtCore/qmutex.h> +#include <QtCore/qwaitcondition.h> +#include <private/qwindow_p.h> +#include <private/qopengl_p.h> +#include <qopenglcontext.h> +#include <QtGui/qopenglframebufferobject.h> +#include <QtGui/qevent.h> + +QT_BEGIN_NAMESPACE + +//Make it easy to identify and customize the root item if needed + +class QQuickWindowManager; + +class QQuickRootItem : public QQuickItem +{ + Q_OBJECT +public: + QQuickRootItem(); +public Q_SLOTS: + void setWidth(int w) {QQuickItem::setWidth(qreal(w));} + void setHeight(int h) {QQuickItem::setHeight(qreal(h));} +}; + +class QQuickItemPrivate; +class QQuickWindowPrivate; + +class QTouchEvent; +class QQuickWindowRenderLoop; +class QQuickWindowIncubationController; + +class Q_QUICK_PRIVATE_EXPORT QQuickWindowPrivate : public QWindowPrivate +{ +public: + Q_DECLARE_PUBLIC(QQuickWindow) + + static inline QQuickWindowPrivate *get(QQuickWindow *c) { return c->d_func(); } + + QQuickWindowPrivate(); + virtual ~QQuickWindowPrivate(); + + void init(QQuickWindow *); + void initRootItem();//Currently only used if items added in QML + + QQuickRootItem *rootItem; + QSet<QQuickItem *> parentlessItems; + QQmlListProperty<QObject> data(); + + QQuickItem *activeFocusItem; + + // Keeps track of the item currently receiving mouse events + QQuickItem *mouseGrabberItem; +#ifndef QT_NO_DRAGANDDROP + QQuickDragGrabber dragGrabber; +#endif + int touchMouseId; + ulong touchMousePressTimestamp; + + // Mouse positions are saved in widget coordinates + QPointF lastMousePosition; + bool translateTouchToMouse(QQuickItem *item, QTouchEvent *event); + void translateTouchEvent(QTouchEvent *touchEvent); + static void transformTouchPoints(QList<QTouchEvent::TouchPoint> &touchPoints, const QTransform &transform); + static QMouseEvent *cloneMouseEvent(QMouseEvent *event, QPointF *transformedLocalPos = 0); + bool deliverInitialMousePressEvent(QQuickItem *, QMouseEvent *); + bool deliverMouseEvent(QMouseEvent *); + bool sendFilteredMouseEvent(QQuickItem *, QQuickItem *, QEvent *); + bool deliverWheelEvent(QQuickItem *, QWheelEvent *); + bool deliverTouchPoints(QQuickItem *, QTouchEvent *, const QList<QTouchEvent::TouchPoint> &, QSet<int> *, + QHash<QQuickItem *, QList<QTouchEvent::TouchPoint> > *); + bool deliverTouchEvent(QTouchEvent *); + bool deliverTouchCancelEvent(QTouchEvent *); + bool deliverHoverEvent(QQuickItem *, const QPointF &scenePos, const QPointF &lastScenePos, Qt::KeyboardModifiers modifiers, bool &accepted); + bool deliverMatchingPointsToItem(QQuickItem *item, QTouchEvent *event, QSet<int> *acceptedNewPoints, const QSet<int> &matchingNewPoints, const QList<QTouchEvent::TouchPoint> &matchingPoints); + QTouchEvent *touchEventForItemBounds(QQuickItem *target, const QTouchEvent &originalEvent); + QTouchEvent *touchEventWithPoints(const QTouchEvent &event, const QList<QTouchEvent::TouchPoint> &newPoints); + bool sendFilteredTouchEvent(QQuickItem *target, QQuickItem *item, QTouchEvent *event); + bool sendHoverEvent(QEvent::Type, QQuickItem *, const QPointF &scenePos, const QPointF &lastScenePos, + Qt::KeyboardModifiers modifiers, bool accepted); + bool clearHover(); +#ifndef QT_NO_DRAGANDDROP + void deliverDragEvent(QQuickDragGrabber *, QEvent *); + bool deliverDragEvent(QQuickDragGrabber *, QQuickItem *, QDragMoveEvent *); +#endif + + QList<QQuickItem*> hoverItems; + enum FocusOption { + DontChangeFocusProperty = 0x01, + DontChangeSubFocusItem = 0x02 + }; + Q_DECLARE_FLAGS(FocusOptions, FocusOption) + + void setFocusInScope(QQuickItem *scope, QQuickItem *item, FocusOptions = 0); + void clearFocusInScope(QQuickItem *scope, QQuickItem *item, FocusOptions = 0); + static void notifyFocusChangesRecur(QQuickItem **item, int remaining); + + void updateFocusItemTransform(); + + void dirtyItem(QQuickItem *); + void cleanup(QSGNode *); + + void polishItems(); + void syncSceneGraph(); + void renderSceneGraph(const QSize &size); + + bool renderWithoutShowing; + void setRenderWithoutShowing(bool enabled); + + QQuickItem::UpdatePaintNodeData updatePaintNodeData; + + QQuickItem *dirtyItemList; + QList<QSGNode *> cleanupNodeList; + + QSet<QQuickItem *> itemsToPolish; + + void updateDirtyNodes(); + void cleanupNodes(); + void cleanupNodesOnShutdown(); + bool updateEffectiveOpacity(QQuickItem *); + void updateEffectiveOpacityRoot(QQuickItem *, qreal); + void updateDirtyNode(QQuickItem *); + + void fireFrameSwapped() { emit q_func()->frameSwapped(); } + + QSGContext *context; + QSGRenderer *renderer; + + QQuickWindowManager *windowManager; + + QColor clearColor; + + uint clearBeforeRendering : 1; + + // Currently unused in the default implementation, as we're not stopping + // rendering when obscured as we should... + uint persistentGLContext : 1; + uint persistentSceneGraph : 1; + + uint lastWheelEventAccepted : 1; + + QOpenGLFramebufferObject *renderTarget; + uint renderTargetId; + QSize renderTargetSize; + + // Keeps track of which touch point (int) was last accepted by which item + QHash<int, QQuickItem *> itemForTouchPointId; + + mutable QQuickWindowIncubationController *incubationController; + + static bool dragOverThreshold(qreal d, Qt::Axis axis, QMouseEvent *event); + +private: + static void cleanupNodesOnShutdown(QQuickItem *); +}; + + +Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickWindowPrivate::FocusOptions) + +QT_END_NAMESPACE + +#endif // QQUICKWINDOW_P_H |