summaryrefslogtreecommitdiffstats
path: root/src/datavisualization
diff options
context:
space:
mode:
authorKeränen Pasi <pasi.keranen@digia.com>2013-11-05 09:58:44 +0200
committerPasi Keränen <pasi.keranen@digia.com>2013-11-05 13:09:14 +0200
commit91745c4b2f7933dfcb0c9eca28e87ad0fae93e66 (patch)
tree9fe246ed56b81e997f3a37a5d071515268040d5b /src/datavisualization
parent2cd0924e7f0147ecbba1197f7d0d32260434a2fd (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.cpp15
-rw-r--r--src/datavisualization/engine/q3dscene.cpp26
-rw-r--r--src/datavisualization/engine/q3dscene.h5
-rw-r--r--src/datavisualization/engine/q3dscene_p.h3
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp15
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