diff options
-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(); |