diff options
-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 | ||||
-rw-r--r-- | tests/barstest/chart.cpp | 5 | ||||
-rw-r--r-- | tests/barstest/chart.h | 1 | ||||
-rw-r--r-- | tests/barstest/main.cpp | 8 | ||||
-rw-r--r-- | tests/surfacetest/graphmodifier.cpp | 6 | ||||
-rw-r--r-- | tests/surfacetest/graphmodifier.h | 1 | ||||
-rw-r--r-- | tests/surfacetest/main.cpp | 6 |
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); |