summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
-rw-r--r--tests/barstest/chart.cpp5
-rw-r--r--tests/barstest/chart.h1
-rw-r--r--tests/barstest/main.cpp8
-rw-r--r--tests/surfacetest/graphmodifier.cpp6
-rw-r--r--tests/surfacetest/graphmodifier.h1
-rw-r--r--tests/surfacetest/main.cpp6
11 files changed, 79 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
diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp
index c8cd3657..f150345e 100644
--- a/tests/barstest/chart.cpp
+++ b/tests/barstest/chart.cpp
@@ -211,6 +211,11 @@ void GraphModifier::releaseProxies()
m_chart->releaseDataProxy(m_genericData);
}
+void GraphModifier::flipViews()
+{
+ m_chart->scene()->setSecondarySubviewOnTop(!m_chart->scene()->isSecondarySubviewOnTop());
+}
+
void GraphModifier::createMassiveArray()
{
const int arrayDimension = 1000;
diff --git a/tests/barstest/chart.h b/tests/barstest/chart.h
index 79cb3cb3..221ccff8 100644
--- a/tests/barstest/chart.h
+++ b/tests/barstest/chart.h
@@ -75,6 +75,7 @@ public:
void createMassiveArray();
public slots:
+ void flipViews();
void changeShadowQuality(int quality);
void shadowQualityUpdatedByVisual(QDataVis::ShadowQuality shadowQuality);
void handleSelectionChange(const QPoint &position);
diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp
index a36ebc7a..7d6d1380 100644
--- a/tests/barstest/main.cpp
+++ b/tests/barstest/main.cpp
@@ -124,6 +124,10 @@ int main(int argc, char **argv)
releaseProxiesButton->setText(QStringLiteral("Release all proxies"));
releaseProxiesButton->setEnabled(true);
+ QPushButton *flipViewsButton = new QPushButton(widget);
+ flipViewsButton->setText(QStringLiteral("Flip views"));
+ flipViewsButton->setEnabled(true);
+
QCheckBox *backgroundCheckBox = new QCheckBox(widget);
backgroundCheckBox->setText(QStringLiteral("Show background"));
backgroundCheckBox->setChecked(true);
@@ -248,6 +252,7 @@ int main(int argc, char **argv)
vLayout->addWidget(swapAxisButton, 0, Qt::AlignTop);
vLayout->addWidget(releaseAxesButton, 0, Qt::AlignTop);
vLayout->addWidget(releaseProxiesButton, 1, Qt::AlignTop);
+ vLayout->addWidget(flipViewsButton, 1, Qt::AlignTop);
vLayout2->addWidget(staticCheckBox, 0, Qt::AlignTop);
vLayout2->addWidget(rotationCheckBox, 0, Qt::AlignTop);
@@ -342,6 +347,9 @@ int main(int argc, char **argv)
QObject::connect(releaseProxiesButton, &QPushButton::clicked, modifier,
&GraphModifier::releaseProxies);
+ QObject::connect(flipViewsButton, &QPushButton::clicked, modifier,
+ &GraphModifier::flipViews);
+
QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
&GraphModifier::changeFont);
diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp
index ebc712a8..f5c39f98 100644
--- a/tests/surfacetest/graphmodifier.cpp
+++ b/tests/surfacetest/graphmodifier.cpp
@@ -333,6 +333,12 @@ void GraphModifier::changeTheme(int theme)
m_graph->setTheme((QDataVis::Theme)theme);
}
+
+void GraphModifier::flipViews()
+{
+ m_graph->scene()->setSecondarySubviewOnTop(!m_graph->scene()->isSecondarySubviewOnTop());
+}
+
void GraphModifier::timeout()
{
int rows = m_planeArray->size();
diff --git a/tests/surfacetest/graphmodifier.h b/tests/surfacetest/graphmodifier.h
index 48b3e8ec..853c698a 100644
--- a/tests/surfacetest/graphmodifier.h
+++ b/tests/surfacetest/graphmodifier.h
@@ -70,6 +70,7 @@ public:
public slots:
void changeShadowQuality(int quality);
void changeTheme(int theme);
+ void flipViews();
void changeSelectionMode(int mode);
void timeout();
diff --git a/tests/surfacetest/main.cpp b/tests/surfacetest/main.cpp
index 78e7badb..8ed84a4f 100644
--- a/tests/surfacetest/main.cpp
+++ b/tests/surfacetest/main.cpp
@@ -200,6 +200,9 @@ int main(int argc, char *argv[])
QPushButton *selectButton = new QPushButton(widget);
selectButton->setText(QStringLiteral("Select random point"));
+ QPushButton *flipViewsButton = new QPushButton(widget);
+ flipViewsButton->setText(QStringLiteral("Flip Views"));
+
QLabel *selectionInfoLabel = new QLabel(widget);
// Add controls to the layout
@@ -232,6 +235,7 @@ int main(int argc, char *argv[])
vLayout->addWidget(selectionMode);
vLayout->addWidget(selectButton);
vLayout->addWidget(selectionInfoLabel);
+ vLayout->addWidget(flipViewsButton);
widget->show();
@@ -278,6 +282,8 @@ int main(int argc, char *argv[])
modifier, SLOT(changeSelectionMode(int)));
QObject::connect(selectButton, &QPushButton::clicked,
modifier, &GraphModifier::selectButtonClicked);
+ QObject::connect(flipViewsButton, &QPushButton::clicked,
+ modifier, &GraphModifier::flipViews);
modifier->setGridSliderZ(gridSliderZ);
modifier->setGridSliderX(gridSliderX);