qquickcanvas_p.h 6.56 KiB
/****************************************************************************
**
** 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 QQUICKCANVAS_P_H
#define QQUICKCANVAS_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 "qquickcanvas.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>
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
#include <QtGui/qinputpanel.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 QQuickCanvasPrivate; class QTouchEvent; class QQuickCanvasRenderLoop; class QQuickCanvasIncubationController; class Q_QUICK_PRIVATE_EXPORT QQuickCanvasPrivate : public QWindowPrivate { public: Q_DECLARE_PUBLIC(QQuickCanvas) static inline QQuickCanvasPrivate *get(QQuickCanvas *c) { return c->d_func(); } QQuickCanvasPrivate(); virtual ~QQuickCanvasPrivate(); void init(QQuickCanvas *); void initRootItem();//Currently only used if items added in QML QQuickRootItem *rootItem; QSet<QQuickItem *> parentlessItems; QQmlListProperty<QObject> data(); QQuickItem *activeFocusItem; QQuickItem *mouseGrabberItem; QQuickDragGrabber dragGrabber; int touchMouseId; ulong touchMousePressTimestamp; // Mouse positions are saved in widget coordinates QPointF lastMousePosition; void translateTouchToMouse(QTouchEvent *event); void translateTouchEvent(QTouchEvent *touchEvent); static void transformTouchPoints(QList<QTouchEvent::TouchPoint> &touchPoints, const QTransform &transform); 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 deliverHoverEvent(QQuickItem *, const QPointF &scenePos, const QPointF &lastScenePos, Qt::KeyboardModifiers modifiers, bool &accepted); bool sendHoverEvent(QEvent::Type, QQuickItem *, const QPointF &scenePos, const QPointF &lastScenePos, Qt::KeyboardModifiers modifiers, bool accepted); bool clearHover(); void deliverDragEvent(QQuickDragGrabber *, QEvent *); bool deliverDragEvent(QQuickDragGrabber *, QQuickItem *, QDragMoveEvent *); QList<QQuickItem*> hoverItems; enum FocusOption { DontChangeFocusProperty = 0x01,
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
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; QOpenGLFramebufferObject *renderTarget; uint renderTargetId; QSize renderTargetSize; QHash<int, QQuickItem *> itemForTouchPointId; mutable QQuickCanvasIncubationController *incubationController; private: static void cleanupNodesOnShutdown(QQuickItem *); }; Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickCanvasPrivate::FocusOptions) QT_END_NAMESPACE #endif // QQUICKCANVAS_P_H