From 52fcca463e63500bea81b0ac3615d4779bc7682c Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Mon, 30 Sep 2013 12:03:33 +0300 Subject: Surface follows selection mode changes on the fly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTRD-2349 Change-Id: I7896646be32d482df38cd351f68763b4f659d764 Reviewed-by: Tomi Korpipää Reviewed-by: Miikka Heikkinen --- .../engine/surface3dcontroller_p.h | 1 - src/datavisualization/engine/surface3drenderer.cpp | 39 ++++++++++++++++++---- src/datavisualization/engine/surface3drenderer_p.h | 3 ++ 3 files changed, 35 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/datavisualization/engine/surface3dcontroller_p.h b/src/datavisualization/engine/surface3dcontroller_p.h index 947034ec..d4b97435 100644 --- a/src/datavisualization/engine/surface3dcontroller_p.h +++ b/src/datavisualization/engine/surface3dcontroller_p.h @@ -87,7 +87,6 @@ public: virtual void setActiveDataProxy(QAbstractDataProxy *proxy); virtual void handleAxisAutoAdjustRangeChangedInOrientation(Q3DAbstractAxis::AxisOrientation orientation, bool autoAdjust); - void handleSelectionAtPoint(const QPoint &point); public slots: void handleArrayReset(); diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index e3e89b14..bd85ceee 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -109,7 +109,9 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller) m_yFlipped(false), m_sampleSpace(QRect(0, 0, 0, 0)), m_shadowQualityMultiplier(3), - m_hasHeightAdjustmentChanged(true) + m_hasHeightAdjustmentChanged(true), + m_cachedSelectionId(0), + m_selectionModeChanged(false) { #if !defined(QT_OPENGL_ES_2) // Check if flat feature is supported @@ -871,6 +873,8 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) } #endif + bool selectionDirty = false; + // Enable texturing glEnable(GL_TEXTURE_2D); @@ -912,6 +916,8 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) // Put the RGBA value back to uint selectionId = pixel[0] + pixel[1] * 256 + pixel[2] * 65536 + pixel[3] * 16777216; + + selectionDirty = true; } // Draw the surface @@ -1576,26 +1582,37 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) m_labelShader->release(); // Selection handling - if (m_controller->inputState() == QDataVis::InputOnScene) { + if (m_selectionModeChanged || selectionDirty) { + if (selectionDirty) + m_cachedSelectionId = selectionId; + if (m_cachedSelectionMode == QDataVis::ModeNone) { + m_cachedSelectionId = 0; + m_selectionActive = false; + } if (m_cachedSelectionMode == QDataVis::ModeItem) { - if (selectionId) - surfacePointSelected(selectionId); + if (m_cachedSelectionId) + surfacePointSelected(m_cachedSelectionId); else m_selectionActive = false; } if (m_cachedSelectionMode == QDataVis::ModeSliceRow || m_cachedSelectionMode == QDataVis::ModeSliceColumn) { - if (selectionId) { - updateSliceDataModel(selectionId); + if (m_cachedSelectionId) { + updateSliceDataModel(m_cachedSelectionId); m_cachedScene->setSlicingActive(true); - surfacePointSelected(selectionId); + surfacePointSelected(m_cachedSelectionId); + + emit needRender(); } } + + m_selectionModeChanged = false; } if (m_controller->inputState() == QDataVis::InputOnOverview) { if (m_cachedIsSlicingActivated) { m_cachedScene->setSlicingActive(false); m_selectionActive = false; + m_cachedSelectionId = 0; } } } @@ -1763,6 +1780,14 @@ bool Surface3DRenderer::updateSmoothStatus(bool enable) return m_cachedSmoothSurface; } +void Surface3DRenderer::updateSelectionMode(QDataVis::SelectionMode mode) +{ + if (mode != m_cachedSelectionMode) + m_selectionModeChanged = true; + + Abstract3DRenderer::updateSelectionMode(mode); +} + void Surface3DRenderer::updateSurfaceGridStatus(bool enable) { m_cachedSurfaceGridOn = enable; diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h index 4edd80f9..10336f06 100644 --- a/src/datavisualization/engine/surface3drenderer_p.h +++ b/src/datavisualization/engine/surface3drenderer_p.h @@ -124,6 +124,8 @@ private: QRect m_sampleSpace; GLint m_shadowQualityMultiplier; QSizeF m_areaSize; + uint m_cachedSelectionId; + bool m_selectionModeChanged; bool m_hasHeightAdjustmentChanged; @@ -145,6 +147,7 @@ public slots: void updateSurfaceGridStatus(bool enable); void updateSurfaceGradient(const QLinearGradient &gradient); void updateSlicingActive(bool isSlicing); + void updateSelectionMode(QDataVis::SelectionMode mode); private: void updateSliceDataModel(int selectionId); -- cgit v1.2.3