aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickwindow_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/items/qquickwindow_p.h')
-rw-r--r--src/quick/items/qquickwindow_p.h224
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