diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2018-08-06 16:15:22 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2018-08-07 07:49:03 +0000 |
commit | cf7c0d36f6a7496b8179c75ab9b0eb171227593b (patch) | |
tree | 952580372808457bef6ca91461f4f373b63eef45 /src/Authoring/Studio/Render/StudioRenderer.cpp | |
parent | c50ccd9499195a740cd8e9faf8211b7e1209cffe (diff) |
Prevent dragging selected object when matte is clicked
Now clicking outside presentation area deselects all objects like
clicking empty space inside the presentation area.
Task-number: QT3DS-2034
Change-Id: I447393f224b9d87123a34d4d30a856c7f795d6b8
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/Authoring/Studio/Render/StudioRenderer.cpp')
-rw-r--r-- | src/Authoring/Studio/Render/StudioRenderer.cpp | 107 |
1 files changed, 56 insertions, 51 deletions
diff --git a/src/Authoring/Studio/Render/StudioRenderer.cpp b/src/Authoring/Studio/Render/StudioRenderer.cpp index a54cd47c..373d7cf8 100644 --- a/src/Authoring/Studio/Render/StudioRenderer.cpp +++ b/src/Authoring/Studio/Render/StudioRenderer.cpp @@ -716,61 +716,66 @@ struct SRendererImpl : public IStudioRenderer, inPoint.setY(inPoint.y() * m_pixelRatio); m_PickResult = SStudioPickValue(); - TranslationSelectMode::Enum theSelectMode = TranslationSelectMode::Group; - switch (g_StudioApp.GetSelectMode()) { - case STUDIO_SELECTMODE_ENTITY: - theSelectMode = TranslationSelectMode::Single; - break; - case STUDIO_SELECTMODE_GROUP: - theSelectMode = TranslationSelectMode::Group; - break; - default: - QT3DS_ASSERT(false); - break; - } - if (inSenderType == SceneDragSenderType::SceneWindow - && m_Translation->GetPickArea(inPoint) == PickTargetAreas::Presentation) { - m_RenderContext->BeginRender(); - m_PickResult = m_Translation->Pick(inPoint, theSelectMode); - m_RenderContext->EndRender(); - // If we definitely did not pick a widget. - if (m_PickResult.getType() == StudioPickValueTypes::Instance) { - qt3dsdm::Qt3DSDMInstanceHandle theHandle( - m_PickResult.getData<Qt3DSDMInstanceHandle>()); - if (QApplication::keyboardModifiers() & Qt::ControlModifier) { - m_Doc.ToggleDataModelObjectToSelection(theHandle); + if (inSenderType == SceneDragSenderType::SceneWindow) { + PickTargetAreas::Enum pickArea = m_Translation->GetPickArea(inPoint); + if (pickArea == PickTargetAreas::Presentation) { + TranslationSelectMode::Enum theSelectMode = TranslationSelectMode::Group; + switch (g_StudioApp.GetSelectMode()) { + case STUDIO_SELECTMODE_ENTITY: + theSelectMode = TranslationSelectMode::Single; + break; + case STUDIO_SELECTMODE_GROUP: + theSelectMode = TranslationSelectMode::Group; + break; + default: + QT3DS_ASSERT(false); + break; + } + m_RenderContext->BeginRender(); + m_PickResult = m_Translation->Pick(inPoint, theSelectMode); + m_RenderContext->EndRender(); + // If we definitely did not pick a widget. + if (m_PickResult.getType() == StudioPickValueTypes::Instance) { + qt3dsdm::Qt3DSDMInstanceHandle theHandle( + m_PickResult.getData<Qt3DSDMInstanceHandle>()); + if (QApplication::keyboardModifiers() & Qt::ControlModifier) { + m_Doc.ToggleDataModelObjectToSelection(theHandle); + } else { + if (m_Doc.getSelectedInstancesCount() > 1) + m_Doc.DeselectAllItems(true); + + if (theHandle != m_Doc.GetSelectedInstance()) + m_Doc.SelectDataModelObject(theHandle); + } + } else if (m_PickResult.getType() == StudioPickValueTypes::Guide) { + m_Doc.NotifySelectionChanged( + m_PickResult.getData<qt3dsdm::Qt3DSDMGuideHandle>()); + } else if (m_PickResult.getType() == StudioPickValueTypes::Path) { + SPathPick thePick = m_PickResult.getData<SPathPick>(); + qt3dsdm::Qt3DSDMInstanceHandle theAnchorHandle = + m_Translation->GetAnchorPoint(thePick); + if (theAnchorHandle.Valid() && theAnchorHandle != m_Doc.GetSelectedInstance()) + m_Doc.SelectDataModelObject(theAnchorHandle); + } else if (m_PickResult.getType() == StudioPickValueTypes::UnknownValueType) { + m_Doc.DeselectAllItems(true); + } + RequestRender(); + } else if (pickArea == PickTargetAreas::Matte) { + qt3ds::foundation::Option<qt3dsdm::SGuideInfo> pickResult = + m_Translation->PickRulers(inPoint); + if (pickResult.hasValue()) { + Q3DStudio::IDocumentEditor &docEditor( + m_UpdatableEditor.EnsureEditor(L"Create Guide", + __FILE__, __LINE__)); + Qt3DSDMGuideHandle newGuide = docEditor.CreateGuide(*pickResult); + m_PickResult = SStudioPickValue(newGuide); + m_Doc.NotifySelectionChanged(newGuide); } else { - if (m_Doc.getSelectedInstancesCount() > 1) - m_Doc.DeselectAllItems(true); - - if (theHandle != m_Doc.GetSelectedInstance()) - m_Doc.SelectDataModelObject(theHandle); + m_Doc.DeselectAllItems(true); } - } else if (m_PickResult.getType() == StudioPickValueTypes::Guide) { - m_Doc.NotifySelectionChanged(m_PickResult.getData<qt3dsdm::Qt3DSDMGuideHandle>()); - } else if (m_PickResult.getType() == StudioPickValueTypes::Path) { - SPathPick thePick = m_PickResult.getData<SPathPick>(); - qt3dsdm::Qt3DSDMInstanceHandle theAnchorHandle = - m_Translation->GetAnchorPoint(thePick); - if (theAnchorHandle.Valid() && theAnchorHandle != m_Doc.GetSelectedInstance()) - m_Doc.SelectDataModelObject(theAnchorHandle); - } else if (m_PickResult.getType() == StudioPickValueTypes::UnknownValueType) { - m_Doc.DeselectAllItems(true); - } - RequestRender(); - } else { - qt3ds::foundation::Option<qt3dsdm::SGuideInfo> pickResult = - m_Translation->PickRulers(inPoint); - if (!pickResult.hasValue()) { - m_Translation->PrepareForDrag(); - } else { - Q3DStudio::IDocumentEditor &docEditor( - m_UpdatableEditor.EnsureEditor(L"Create Guide", __FILE__, __LINE__)); - Qt3DSDMGuideHandle newGuide = docEditor.CreateGuide(*pickResult); - m_PickResult = SStudioPickValue(newGuide); - m_Doc.NotifySelectionChanged(newGuide); } } + m_LastDragToolMode = MovementTypes::Unknown; m_MaybeDragStart = true; m_MouseDownPoint = inPoint; |