From 1f18e01d391cc3baaadabb6fd716d7f8fa889995 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Wed, 21 Oct 2020 14:40:23 -0500 Subject: Make ObjectPicker optional for Scene2D Don't require it if mouseEnabled is false. Change-Id: I901e53b9df2f51e507af3c4423ebd71b253d1a6b Reviewed-by: Mike Krus --- src/quick3d/quick3dscene2d/items/scene2d.cpp | 48 +++++++++++++++------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/quick3d/quick3dscene2d/items/scene2d.cpp b/src/quick3d/quick3dscene2d/items/scene2d.cpp index d3cacda3e..bee6c5ca5 100644 --- a/src/quick3d/quick3dscene2d/items/scene2d.cpp +++ b/src/quick3d/quick3dscene2d/items/scene2d.cpp @@ -190,31 +190,33 @@ void Scene2D::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) if (id != m_outputId) setOutput(id); - auto ids = Qt3DCore::qIdsForNodes(node->entities()); - std::sort(std::begin(ids), std::end(ids)); - Qt3DCore::QNodeIdVector addedEntities; - Qt3DCore::QNodeIdVector removedEntities; - std::set_difference(std::begin(ids), std::end(ids), - std::begin(m_entities), std::end(m_entities), - std::inserter(addedEntities, addedEntities.end())); - std::set_difference(std::begin(m_entities), std::end(m_entities), - std::begin(ids), std::end(ids), - std::inserter(removedEntities, removedEntities.end())); - for (const auto &id: addedEntities) { - Qt3DCore::QEntity *entity = qobject_cast(dnode->m_scene->lookupNode(id)); - if (!entity) - return; + if (m_mouseEnabled) { + auto ids = Qt3DCore::qIdsForNodes(node->entities()); + std::sort(std::begin(ids), std::end(ids)); + Qt3DCore::QNodeIdVector addedEntities; + Qt3DCore::QNodeIdVector removedEntities; + std::set_difference(std::begin(ids), std::end(ids), + std::begin(m_entities), std::end(m_entities), + std::inserter(addedEntities, addedEntities.end())); + std::set_difference(std::begin(m_entities), std::end(m_entities), + std::begin(ids), std::end(ids), + std::inserter(removedEntities, removedEntities.end())); + for (const auto &id: addedEntities) { + Qt3DCore::QEntity *entity = qobject_cast(dnode->m_scene->lookupNode(id)); + if (!entity) + return; - if (registerObjectPickerEvents(entity)) - m_entities.push_back(id); - else - Qt3DCore::QNodePrivate::get(const_cast(frontEnd))->update(); - } - for (const auto &id: removedEntities) { - m_entities.removeOne(id); - unregisterObjectPickerEvents(id); + if (registerObjectPickerEvents(entity)) + m_entities.push_back(id); + else + Qt3DCore::QNodePrivate::get(const_cast(frontEnd))->update(); + } + for (const auto &id: removedEntities) { + m_entities.removeOne(id); + unregisterObjectPickerEvents(id); + } + std::sort(std::begin(m_entities), std::end(m_entities)); } - std::sort(std::begin(m_entities), std::end(m_entities)); if (firstTime) setSharedObject(dnode->m_renderManager->m_sharedObject); -- cgit v1.2.3