From a483fa13f4d4acebe0bb21fc569a8de23b76b56f Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 11 Oct 2013 10:00:48 +0300 Subject: Fix slice view reset on proxy change Change-Id: I7497da41e60ab0db405e3b44ff63771222ec14b3 Reviewed-by: Miikka Heikkinen --- src/datavisualization/engine/bars3dcontroller.cpp | 3 +++ src/datavisualization/engine/bars3drenderer.cpp | 6 +++++- src/datavisualization/engine/scatter3dcontroller.cpp | 3 +++ src/datavisualization/engine/surface3dcontroller.cpp | 4 ++++ src/datavisualization/engine/surface3drenderer.cpp | 6 +++++- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp index f9cdfd8f..50d8d030 100644 --- a/src/datavisualization/engine/bars3dcontroller.cpp +++ b/src/datavisualization/engine/bars3dcontroller.cpp @@ -125,6 +125,7 @@ void Bars3DController::setActiveDataProxy(QAbstractDataProxy *proxy) QObject::connect(barDataProxy, &QBarDataProxy::columnLabelsChanged, this, &Bars3DController::handleDataColumnLabelsChanged); + scene()->setSlicingActive(false); adjustAxisRanges(); // Always clear selection on proxy change @@ -132,6 +133,8 @@ void Bars3DController::setActiveDataProxy(QAbstractDataProxy *proxy) handleDataRowLabelsChanged(); handleDataColumnLabelsChanged(); + m_isDataDirty = true; + emitNeedRender(); } void Bars3DController::handleArrayReset() diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index 8083a896..74c1a99b 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -235,6 +235,8 @@ void Bars3DRenderer::updateScene(Q3DScene *scene) void Bars3DRenderer::render(GLuint defaultFboHandle) { + bool slicingChanged = m_cachedIsSlicingActivated != m_cachedScene->isSlicingActive(); + // Handle GL state setup for FBO buffers and clearing of the render surface Abstract3DRenderer::render(defaultFboHandle); @@ -246,7 +248,9 @@ void Bars3DRenderer::render(GLuint defaultFboHandle) drawScene(defaultFboHandle); // If slicing has been activated by this render pass, we need another render - if (m_cachedIsSlicingActivated != m_cachedScene->isSlicingActive()) + // Also trigger another render always when slicing changes in general to ensure + // final draw is correct. + if (m_cachedIsSlicingActivated != m_cachedScene->isSlicingActive() || slicingChanged) emit needRender(); } diff --git a/src/datavisualization/engine/scatter3dcontroller.cpp b/src/datavisualization/engine/scatter3dcontroller.cpp index 94d3fd90..9f43d94e 100644 --- a/src/datavisualization/engine/scatter3dcontroller.cpp +++ b/src/datavisualization/engine/scatter3dcontroller.cpp @@ -117,6 +117,9 @@ void Scatter3DController::setActiveDataProxy(QAbstractDataProxy *proxy) adjustValueAxisRange(); setSelectedItemIndex(noSelectionIndex()); + setSlicingActive(false); + m_isDataDirty = true; + emitNeedRender(); } void Scatter3DController::handleArrayReset() diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp index a7c84a87..87ea48f0 100644 --- a/src/datavisualization/engine/surface3dcontroller.cpp +++ b/src/datavisualization/engine/surface3dcontroller.cpp @@ -178,11 +178,15 @@ void Surface3DController::setActiveDataProxy(QAbstractDataProxy *proxy) QObject::connect(surfaceDataProxy, &QSurfaceDataProxy::arrayReset, this, &Surface3DController::handleArrayReset); + scene()->setSlicingActive(false); adjustValueAxisRange(); + m_isDataDirty = true; + emitNeedRender(); } void Surface3DController::handleArrayReset() { + scene()->setSlicingActive(false); adjustValueAxisRange(); m_isDataDirty = true; emitNeedRender(); diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index d2dcf634..8d0d7203 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -439,6 +439,8 @@ void Surface3DRenderer::updateScene(Q3DScene *scene) void Surface3DRenderer::render(GLuint defaultFboHandle) { bool slicingActivated = m_cachedScene->isSlicingActive(); + bool slicingChanged = m_cachedIsSlicingActivated != slicingActivated; + updateSlicingActive(slicingActivated); // Handle GL state setup for FBO buffers and clearing of the render surface @@ -458,7 +460,9 @@ void Surface3DRenderer::render(GLuint defaultFboHandle) m_selectionPointer->render(defaultFboHandle); // If slicing has been activated by this render pass, we need another render - if (slicingActivated != m_cachedScene->isSlicingActive()) + // Also trigger another render always when slicing changes in general to ensure + // final draw is correct. + if (slicingActivated != m_cachedScene->isSlicingActive() || slicingChanged) emit needRender(); } -- cgit v1.2.3