diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-01-18 07:37:47 +0000 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-01-18 10:54:54 +0000 |
commit | a08a9b922dd626fc554542535b5b86c3d97d2d7c (patch) | |
tree | 7e6e4947101cf12c4037c4e65788df777620cff5 /src | |
parent | 465bbed1085c57d1209aff33ce1fbd693b4e490f (diff) |
Add window convenience property to QRenderSurfaceSelector
Behind the scenes this just updates the QSurfaceProperty which is all
we care about on the backend. This is for QML since QSurface is not a
QObject subclass (even though all sub classes of QSurface are via MI,
grrrrr).
Change-Id: I248eb59a92ed3bc99361ff23a0cd20d3c191769b
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/render/framegraph/qrendersurfaceselector.cpp | 22 | ||||
-rw-r--r-- | src/render/framegraph/qrendersurfaceselector.h | 8 | ||||
-rw-r--r-- | src/render/framegraph/qrendersurfaceselector_p.h | 1 |
3 files changed, 30 insertions, 1 deletions
diff --git a/src/render/framegraph/qrendersurfaceselector.cpp b/src/render/framegraph/qrendersurfaceselector.cpp index 8ff55d152..e218672e8 100644 --- a/src/render/framegraph/qrendersurfaceselector.cpp +++ b/src/render/framegraph/qrendersurfaceselector.cpp @@ -70,6 +70,14 @@ QSurface *QRenderSurfaceSelector::surface() const return d->m_surface; } +QWindow *QRenderSurfaceSelector::window() const +{ + Q_D(const QRenderSurfaceSelector); + if (d->m_surface->surfaceClass() == QSurface::Window) + return static_cast<QWindow *>(d->m_surface); + return Q_NULLPTR; +} + void QRenderSurfaceSelector::setSurface(QSurface *surface) { Q_D(QRenderSurfaceSelector); @@ -80,6 +88,20 @@ void QRenderSurfaceSelector::setSurface(QSurface *surface) emit surfaceChanged(surface); } +void QRenderSurfaceSelector::setWindow(QWindow *window) +{ + Q_D(QRenderSurfaceSelector); + QWindow *currentWindow = Q_NULLPTR; + if (d->m_surface && d->m_surface->surfaceClass() == QSurface::Window) + currentWindow = static_cast<QWindow *>(d->m_surface); + if (currentWindow == window) + return; + + d->m_surface = window; + emit windowChanged(window); + emit surfaceChanged(d->m_surface); +} + void QRenderSurfaceSelector::copy(const QNode *ref) { QFrameGraphNode::copy(ref); diff --git a/src/render/framegraph/qrendersurfaceselector.h b/src/render/framegraph/qrendersurfaceselector.h index 1492356b3..f722f8044 100644 --- a/src/render/framegraph/qrendersurfaceselector.h +++ b/src/render/framegraph/qrendersurfaceselector.h @@ -43,6 +43,7 @@ QT_BEGIN_NAMESPACE class QSurface; +class QWindow; namespace Qt3DRender { @@ -52,17 +53,22 @@ class QT3DRENDERSHARED_EXPORT QRenderSurfaceSelector : public Qt3DRender::QFrame { Q_OBJECT Q_PROPERTY(QSurface *surface READ surface WRITE setSurface NOTIFY surfaceChanged) + Q_PROPERTY(QWindow *window READ window WRITE setWindow NOTIFY windowChanged) + public: explicit QRenderSurfaceSelector(Qt3DCore::QNode *parent = 0); ~QRenderSurfaceSelector(); QSurface *surface() const; + QWindow *window() const; public Q_SLOTS: void setSurface(QSurface *surface); + void setWindow(QWindow *window); Q_SIGNALS: - void surfaceChanged(QSurface* surface); + void surfaceChanged(QSurface *surface); + void windowChanged(QWindow *window); protected: Q_DECLARE_PRIVATE(QRenderSurfaceSelector) diff --git a/src/render/framegraph/qrendersurfaceselector_p.h b/src/render/framegraph/qrendersurfaceselector_p.h index a3ee04037..aae265359 100644 --- a/src/render/framegraph/qrendersurfaceselector_p.h +++ b/src/render/framegraph/qrendersurfaceselector_p.h @@ -50,6 +50,7 @@ #include <Qt3DRender/private/qframegraphnode_p.h> #include <QtGui/qsurface.h> +#include <QtGui/qwindow.h> QT_BEGIN_NAMESPACE |