From cc22cc40e889b5b2f0e49ce32f660395cef865b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kera=CC=88nen=20Pasi?= Date: Tue, 12 Nov 2013 09:24:56 +0200 Subject: Changes scene to be proxy for input position and selection communication. Change-Id: I83729508c8a0281569be5f43791d44d36d800ca2 Reviewed-by: Miikka Heikkinen --- src/datavisualization/engine/q3dscene.cpp | 37 +++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'src/datavisualization/engine/q3dscene.cpp') diff --git a/src/datavisualization/engine/q3dscene.cpp b/src/datavisualization/engine/q3dscene.cpp index 70c8ffd6..3cda41b7 100644 --- a/src/datavisualization/engine/q3dscene.cpp +++ b/src/datavisualization/engine/q3dscene.cpp @@ -177,6 +177,34 @@ void Q3DScene::setSecondarySubViewport(const QRect &secondarySubViewport) } } +/*! + * \property Q3DScene::selectionQueryPosition + * This property contains the coordinates for the user input that should be processed + * by the scene as selection. If this is set to value other than Q3DScene()::noSelectionPoint() the + * graph tries to select a data item at the given \a point within the main viewport. + * After the rendering pass the property is returned to its default state of Q3DScene()::noSelectionPoint(). + */ +void Q3DScene::setSelectionQueryPosition(const QPoint &point) +{ + if (point != d_ptr->m_selectionQueryPosition) { + d_ptr->m_selectionQueryPosition = point; + d_ptr->m_changeTracker.selectionQueryPositionChanged = true; + emit selectionQueryPositionChanged(point); + emitNeedRender(); + } +} + +QPoint Q3DScene::selectionQueryPosition() const +{ + return d_ptr->m_selectionQueryPosition; +} + +const QPoint Q3DScene::noSelectionPoint() +{ + static const QPoint noSelectionPos(-1, -1); + return noSelectionPos; +} + /*! * \property Q3DScene::slicingActive * @@ -329,7 +357,6 @@ void Q3DScene::setLightPositionRelativeToCamera(const QVector3D &relativePositio * \fn Q3DScene::needRender() * \internal */ - Q3DScenePrivate::Q3DScenePrivate(Q3DScene *q) : q_ptr(q), m_isSecondarySubviewOnTop(true), @@ -337,7 +364,8 @@ Q3DScenePrivate::Q3DScenePrivate(Q3DScene *q) : m_camera(), m_light(), m_isUnderSideCameraEnabled(false), - m_isSlicingActive(false) + m_isSlicingActive(false), + m_selectionQueryPosition(Q3DScene::noSelectionPoint()) { } @@ -371,6 +399,11 @@ void Q3DScenePrivate::sync(Q3DScenePrivate &other) m_changeTracker.secondarySubViewportChanged = false; other.m_changeTracker.secondarySubViewportChanged = false; } + if (m_changeTracker.selectionQueryPositionChanged) { + other.q_ptr->setSelectionQueryPosition(q_ptr->selectionQueryPosition()); + m_changeTracker.selectionQueryPositionChanged = false; + other.m_changeTracker.selectionQueryPositionChanged = false; + } if (m_changeTracker.cameraChanged) { m_camera->setDirty(true); m_changeTracker.cameraChanged = false; -- cgit v1.2.3