summaryrefslogtreecommitdiffstats
path: root/src/Authoring/Studio/Render/StudioRenderer.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2018-08-06 16:15:22 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2018-08-07 07:49:03 +0000
commitcf7c0d36f6a7496b8179c75ab9b0eb171227593b (patch)
tree952580372808457bef6ca91461f4f373b63eef45 /src/Authoring/Studio/Render/StudioRenderer.cpp
parentc50ccd9499195a740cd8e9faf8211b7e1209cffe (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.cpp107
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;