aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@digia.com>2014-06-03 14:19:14 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-06-03 14:46:59 +0200
commitcca61d66e71c3d6948db1a881267385ff294eb4e (patch)
treee4ac8f3aa118c3ab382c6ea0004a018c5c251a5d
parent6e9b406fefe7fe3147587d573f1763c906682f5e (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.cpp19
-rw-r--r--src/quick/items/qquickrendercontrol_p.h1
-rw-r--r--src/quick/items/qquickwindow.h2
-rw-r--r--src/quickwidgets/qquickwidget.cpp2
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();