summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3dcontroller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/abstract3dcontroller.cpp')
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 27d01029..f8a1a813 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -170,16 +170,14 @@ void Abstract3DController::synchDataToRenderer()
{
// Subclass implementations check for renderer validity already, so no need to check here.
+ m_renderPending = false;
+
// If there are pending queries, handle those first
- if (m_renderer->isGraphPositionQueryPending()) {
+ if (m_renderer->isGraphPositionQueryResolved())
handlePendingGraphPositionQuery();
- m_renderer->clearGraphPositionQueryPending();
- }
- if (m_renderer->isClickPending()) {
+ if (m_renderer->isClickQueryResolved())
handlePendingClick();
- m_renderer->clearClickPending();
- }
startRecordingRemovesAndInserts();
@@ -518,8 +516,6 @@ void Abstract3DController::synchDataToRenderer()
void Abstract3DController::render(const GLuint defaultFboHandle)
{
- m_renderPending = false;
-
// If not initialized, do nothing.
if (!m_renderer)
return;
@@ -1489,12 +1485,27 @@ void Abstract3DController::handlePendingClick()
m_selectedLabelIndex = m_renderer->m_selectedLabelIndex;
m_selectedCustomItemIndex = m_renderer->m_selectedCustomItemIndex;
+ // Invalidate query position to indicate the query has been handled, unless another
+ // point has been queried.
+ if (m_renderer->cachedClickQuery() == m_scene->selectionQueryPosition())
+ m_scene->setSelectionQueryPosition(Q3DScene::invalidSelectionPoint());
+
+ m_renderer->clearClickQueryResolved();
+
emit elementSelected(m_clickedType);
}
void Abstract3DController::handlePendingGraphPositionQuery()
{
m_queriedGraphPosition = m_renderer->queriedGraphPosition();
+
+ // Invalidate query position to indicate the query has been handled, unless another
+ // point has been queried.
+ if (m_renderer->cachedGraphPositionQuery() == m_scene->graphPositionQuery())
+ m_scene->setGraphPositionQuery(Q3DScene::invalidSelectionPoint());
+
+ m_renderer->clearGraphPositionQueryResolved();
+
emit queriedGraphPositionChanged(m_queriedGraphPosition);
}