summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2013-09-30 12:03:33 +0300
committerMika Salmela <mika.salmela@digia.com>2013-09-30 12:17:45 +0300
commit52fcca463e63500bea81b0ac3615d4779bc7682c (patch)
treeb6743dafa525c349b8eea03194be8b8a3dbd20fc /src
parentf9b87511f913833cdd36406dee2e7eee212f27be (diff)
Surface follows selection mode changes on the fly
Task-number: QTRD-2349 Change-Id: I7896646be32d482df38cd351f68763b4f659d764 Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/datavisualization/engine/surface3dcontroller_p.h1
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp39
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h3
3 files changed, 35 insertions, 8 deletions
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);