diff options
author | Keränen Pasi <pasi.keranen@digia.com> | 2013-11-05 09:58:44 +0200 |
---|---|---|
committer | Pasi Keränen <pasi.keranen@digia.com> | 2013-11-05 13:09:14 +0200 |
commit | 91745c4b2f7933dfcb0c9eca28e87ad0fae93e66 (patch) | |
tree | 9fe246ed56b81e997f3a37a5d071515268040d5b /src/datavisualization | |
parent | 2cd0924e7f0147ecbba1197f7d0d32260434a2fd (diff) |
Add configurable main and slice view ordering.
Change-Id: I9f5d7399d60971c782fa8ac6fc39a05fa3bbcaa8
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization')
-rw-r--r-- | src/datavisualization/engine/bars3drenderer.cpp | 15 | ||||
-rw-r--r-- | src/datavisualization/engine/q3dscene.cpp | 26 | ||||
-rw-r--r-- | src/datavisualization/engine/q3dscene.h | 5 | ||||
-rw-r--r-- | src/datavisualization/engine/q3dscene_p.h | 3 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer.cpp | 15 |
5 files changed, 52 insertions, 12 deletions
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index 21be9da4..5b4f9fcc 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -262,12 +262,15 @@ void Bars3DRenderer::render(GLuint defaultFboHandle) // Handle GL state setup for FBO buffers and clearing of the render surface Abstract3DRenderer::render(defaultFboHandle); - // Draw bars scene - drawScene(defaultFboHandle); - - // If slice selection is on, draw the sliced scene - if (m_cachedIsSlicingActivated) - drawSlicedScene(m_axisCacheX.titleItem(), m_axisCacheY.titleItem(), m_axisCacheZ.titleItem()); + if (m_cachedScene->isSecondarySubviewOnTop()) { + drawScene(defaultFboHandle); + if (m_cachedIsSlicingActivated) + drawSlicedScene(m_axisCacheX.titleItem(), m_axisCacheY.titleItem(), m_axisCacheZ.titleItem()); + } else { + if (m_cachedIsSlicingActivated) + drawSlicedScene(m_axisCacheX.titleItem(), m_axisCacheY.titleItem(), m_axisCacheZ.titleItem()); + drawScene(defaultFboHandle); + } } void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel, diff --git a/src/datavisualization/engine/q3dscene.cpp b/src/datavisualization/engine/q3dscene.cpp index 3789ea9f..70c8ffd6 100644 --- a/src/datavisualization/engine/q3dscene.cpp +++ b/src/datavisualization/engine/q3dscene.cpp @@ -199,6 +199,26 @@ void Q3DScene::setSlicingActive(bool isSlicing) } /*! + * \property Q3DScene::secondarySubviewOnTop + * + * This property contains whether 2D slicing view is currently drawn on top or if the 3D view is drawn on top. + */ +bool Q3DScene::isSecondarySubviewOnTop() const +{ + return d_ptr->m_isSecondarySubviewOnTop; +} + +void Q3DScene::setSecondarySubviewOnTop(bool isSecondaryOnTop) +{ + if (d_ptr->m_isSecondarySubviewOnTop != isSecondaryOnTop) { + d_ptr->m_isSecondarySubviewOnTop = isSecondaryOnTop; + d_ptr->m_changeTracker.subViewportOrderChanged = true; + emit secondarySubviewOnTopChanged(isSecondaryOnTop); + emitNeedRender(); + } +} + +/*! * \property Q3DScene::activeCamera * * This property contains the currently active camera in the 3D scene. @@ -312,6 +332,7 @@ void Q3DScene::setLightPositionRelativeToCamera(const QVector3D &relativePositio Q3DScenePrivate::Q3DScenePrivate(Q3DScene *q) : q_ptr(q), + m_isSecondarySubviewOnTop(true), m_devicePixelRatio(1.f), m_camera(), m_light(), @@ -335,6 +356,11 @@ void Q3DScenePrivate::sync(Q3DScenePrivate &other) m_changeTracker.viewportChanged = false; other.m_changeTracker.viewportChanged = false; } + if (m_changeTracker.subViewportOrderChanged) { + other.q_ptr->setSecondarySubviewOnTop(q_ptr->isSecondarySubviewOnTop()); + m_changeTracker.subViewportOrderChanged = false; + other.m_changeTracker.subViewportOrderChanged = false; + } if (m_changeTracker.primarySubViewportChanged) { other.q_ptr->setPrimarySubViewport(q_ptr->primarySubViewport()); m_changeTracker.primarySubViewportChanged = false; diff --git a/src/datavisualization/engine/q3dscene.h b/src/datavisualization/engine/q3dscene.h index 745cef72..94d82c8b 100644 --- a/src/datavisualization/engine/q3dscene.h +++ b/src/datavisualization/engine/q3dscene.h @@ -36,6 +36,7 @@ class QT_DATAVISUALIZATION_EXPORT Q3DScene : public QObject Q_PROPERTY(QRect viewport READ viewport WRITE setViewport NOTIFY viewportChanged) Q_PROPERTY(QRect primarySubViewport READ primarySubViewport WRITE setPrimarySubViewport NOTIFY primarySubViewportChanged) Q_PROPERTY(QRect secondarySubViewport READ secondarySubViewport WRITE setSecondarySubViewport NOTIFY secondarySubViewportChanged) + Q_PROPERTY(bool secondarySubviewOnTop READ isSecondarySubviewOnTop WRITE setSecondarySubviewOnTop NOTIFY secondarySubviewOnTopChanged) Q_PROPERTY(bool slicingActive READ isSlicingActive WRITE setSlicingActive NOTIFY slicingActiveChanged) Q_PROPERTY(Q3DCamera* activeCamera READ activeCamera WRITE setActiveCamera NOTIFY activeCameraChanged) Q_PROPERTY(Q3DLight* activeLight READ activeLight WRITE setActiveLight NOTIFY activeLightChanged) @@ -60,6 +61,9 @@ public: void setSlicingActive(bool isSlicing); bool isSlicingActive() const; + void setSecondarySubviewOnTop(bool isSecondaryOnTop); + bool isSecondarySubviewOnTop() const; + Q3DCamera *activeCamera() const; void setActiveCamera(Q3DCamera *camera); @@ -79,6 +83,7 @@ signals: void viewportChanged(QRect viewport); void primarySubViewportChanged(QRect subViewport); void secondarySubViewportChanged(QRect subViewport); + void secondarySubviewOnTopChanged(bool isSecondaryOnTop); void slicingActiveChanged(bool isSlicingActive); void activeCameraChanged(const Q3DCamera *camera); void activeLightChanged(const Q3DLight *light); diff --git a/src/datavisualization/engine/q3dscene_p.h b/src/datavisualization/engine/q3dscene_p.h index b28baaae..3610cbf4 100644 --- a/src/datavisualization/engine/q3dscene_p.h +++ b/src/datavisualization/engine/q3dscene_p.h @@ -42,6 +42,7 @@ struct Q3DSceneChangeBitField { bool viewportChanged : 1; bool primarySubViewportChanged : 1; bool secondarySubViewportChanged : 1; + bool subViewportOrderChanged : 1; bool cameraChanged : 1; bool lightChanged : 1; bool slicingActivatedChanged : 1; @@ -51,6 +52,7 @@ struct Q3DSceneChangeBitField { : viewportChanged(true), primarySubViewportChanged(true), secondarySubViewportChanged(true), + subViewportOrderChanged(true), cameraChanged(true), lightChanged(true), slicingActivatedChanged(true), @@ -73,6 +75,7 @@ public: QRect m_viewport; QRect m_primarySubViewport; QRect m_secondarySubViewport; + bool m_isSecondarySubviewOnTop; qreal m_devicePixelRatio; Q3DCamera *m_camera; Q3DLight *m_light; diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 92a68461..3646ff20 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -454,12 +454,15 @@ void Surface3DRenderer::render(GLuint defaultFboHandle) // Handle GL state setup for FBO buffers and clearing of the render surface Abstract3DRenderer::render(defaultFboHandle); - // Draw the surface scene - drawScene(defaultFboHandle); - - // In slice mode; draw slice - if (m_cachedIsSlicingActivated && m_selectionActive) - drawSlicedScene(); + if (m_cachedScene->isSecondarySubviewOnTop()) { + drawScene(defaultFboHandle); + if (m_cachedIsSlicingActivated) + drawSlicedScene(); + } else { + if (m_cachedIsSlicingActivated) + drawSlicedScene(); + drawScene(defaultFboHandle); + } // Render selection ball if (m_selectionPointer && m_selectionActive |