diff options
author | Paul Olav Tvete <paul.tvete@digia.com> | 2014-06-03 14:19:14 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-06-03 14:46:59 +0200 |
commit | cca61d66e71c3d6948db1a881267385ff294eb4e (patch) | |
tree | e4ac8f3aa118c3ab382c6ea0004a018c5c251a5d | |
parent | 6e9b406fefe7fe3147587d573f1763c906682f5e (diff) |
Make QQuickRenderControl usable (still private)
QQuickRenderControl needs a QQuickWindow in order to function. This
required the use of a private QQuickWindow constructor, meaning that
only friend classes of QQuickWindow could use QQuickRenderControl.
This change adds a factory function, QQuickRenderControl::createOffscreenWindow().
Task-number: QTBUG-38996
Change-Id: I92f6f1f60045934f3dd33c300352247852463c73
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
-rw-r--r-- | src/quick/items/qquickrendercontrol.cpp | 19 | ||||
-rw-r--r-- | src/quick/items/qquickrendercontrol_p.h | 1 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.h | 2 | ||||
-rw-r--r-- | src/quickwidgets/qquickwidget.cpp | 2 |
4 files changed, 22 insertions, 2 deletions
diff --git a/src/quick/items/qquickrendercontrol.cpp b/src/quick/items/qquickrendercontrol.cpp index 87a60b5cce..2842d7e933 100644 --- a/src/quick/items/qquickrendercontrol.cpp +++ b/src/quick/items/qquickrendercontrol.cpp @@ -239,6 +239,10 @@ void QQuickRenderControl::setWindow(QQuickWindow *window) d->window = window; } +/*! + Returns the offscreen window. + */ + QQuickWindow *QQuickRenderControl::window() const { Q_D(const QQuickRenderControl); @@ -246,6 +250,21 @@ QQuickWindow *QQuickRenderControl::window() const } /*! + Create an offscreen QQuickWindow for this render control, + unless the render control already has a window(). + + Returns the offscreen window if one is created, otherwise returns null. + The caller takes ownership of the window, and is responsible for deleting it. + */ +QQuickWindow *QQuickRenderControl::createOffscreenWindow() +{ + Q_D(QQuickRenderControl); + if (!d->window) + return new QQuickWindow(this); + return 0; +} + +/*! \fn QWindow *QQuickRenderControl::renderWindow(QPoint *offset) Reimplemented in subclasses to return the real window this render control diff --git a/src/quick/items/qquickrendercontrol_p.h b/src/quick/items/qquickrendercontrol_p.h index e7b7759afa..cc30e37724 100644 --- a/src/quick/items/qquickrendercontrol_p.h +++ b/src/quick/items/qquickrendercontrol_p.h @@ -63,6 +63,7 @@ public: ~QQuickRenderControl(); QQuickWindow *window() const; + QQuickWindow *createOffscreenWindow(); virtual QWindow *renderWindow(QPoint *offset) { Q_UNUSED(offset); return 0; } static QWindow *renderWindowFor(QQuickWindow *win, QPoint *offset = 0); diff --git a/src/quick/items/qquickwindow.h b/src/quick/items/qquickwindow.h index 2572f31375..0d1aaf64f0 100644 --- a/src/quick/items/qquickwindow.h +++ b/src/quick/items/qquickwindow.h @@ -191,7 +191,7 @@ private Q_SLOTS: private: friend class QQuickItem; friend class QQuickWidget; - friend class QQuickWidgetPrivate; + friend class QQuickRenderControl; friend class QQuickAnimatorController; explicit QQuickWindow(QQuickRenderControl*); Q_DISABLE_COPY(QQuickWindow) diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp index ec5d0bf8df..e63b0cc3c7 100644 --- a/src/quickwidgets/qquickwidget.cpp +++ b/src/quickwidgets/qquickwidget.cpp @@ -86,7 +86,7 @@ void QQuickWidgetPrivate::init(QQmlEngine* e) Q_Q(QQuickWidget); renderControl = new QQuickWidgetRenderControl(q); - offscreenWindow = new QQuickWindow(renderControl); + offscreenWindow = renderControl->createOffscreenWindow(); offscreenWindow->setTitle(QString::fromLatin1("Offscreen")); // Do not call create() on offscreenWindow. createOffscreenSurface(); |