diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-02-15 13:37:31 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-02-18 08:51:49 +0000 |
commit | 3b0e89e9c24be6901562dd12aef8edae02f9409f (patch) | |
tree | 02cae9c8bfb10e9975852ac015c0275bfe278975 /src/Authoring/Studio/Render/Q3DSTranslation.cpp | |
parent | f6d6d3c415a3f440eb53a8f826ea0f355b02d705 (diff) |
Fix crash when rotating directional edit views
Now we don't send drag/mouse up to renderer unless mouse down was also
sent. Also some minor cleanup of related code.
Task-number: QT3DS-3064
Change-Id: I8c01bb05a0a8e8817b38d7bbc8d69b4b2af3af13
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Jere Tuliniemi <jere.tuliniemi@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/Authoring/Studio/Render/Q3DSTranslation.cpp')
-rw-r--r-- | src/Authoring/Studio/Render/Q3DSTranslation.cpp | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/src/Authoring/Studio/Render/Q3DSTranslation.cpp b/src/Authoring/Studio/Render/Q3DSTranslation.cpp index fe3df8d8..236920c9 100644 --- a/src/Authoring/Studio/Render/Q3DSTranslation.cpp +++ b/src/Authoring/Studio/Render/Q3DSTranslation.cpp @@ -1747,31 +1747,36 @@ void Q3DSTranslation::prepareWidgetDrag(const QPoint &mousePos, Q3DSGraphObject void Q3DSTranslation::endDrag(bool dragReset, CUpdateableDocumentEditor &inEditor) { - m_dragTranslator->enableAutoUpdates(true); - if (!dragReset) { - // send drag state to document - IDocumentEditor &editor = inEditor.EnsureEditor(QObject::tr("Set Transformation"), - __FILE__, __LINE__); - editor.SetInstancePropertyValue(m_doc.GetSelectedInstance(), - objectDefinitions().m_Node.m_Position, - qt3dsdm::SValue(QVariant::fromValue(m_currentDragState.t))); - editor.SetInstancePropertyValue(m_doc.GetSelectedInstance(), - objectDefinitions().m_Node.m_Rotation, - qt3dsdm::SValue(QVariant::fromValue(m_currentDragState.r))); - editor.SetInstancePropertyValue(m_doc.GetSelectedInstance(), - objectDefinitions().m_Node.m_Scale, - qt3dsdm::SValue(QVariant::fromValue(m_currentDragState.s))); - inEditor.FireImmediateRefresh(m_doc.GetSelectedInstance()); - } else { - // reset node to beginning - Q3DSNode &node = static_cast<Q3DSNode &>(m_dragTranslator->graphObject()); - Q3DSPropertyChangeList list; - list.append(node.setPosition(m_beginDragState.t)); - list.append(node.setScale(m_beginDragState.s)); - list.append(node.setRotation(m_beginDragState.r)); - node.notifyPropertyChanges(list); + if (m_dragTranslator) { + m_dragTranslator->enableAutoUpdates(true); + if (!dragReset) { + // send drag state to document + IDocumentEditor &editor = inEditor.EnsureEditor(QObject::tr("Set Transformation"), + __FILE__, __LINE__); + editor.SetInstancePropertyValue( + m_doc.GetSelectedInstance(), + objectDefinitions().m_Node.m_Position, + qt3dsdm::SValue(QVariant::fromValue(m_currentDragState.t))); + editor.SetInstancePropertyValue( + m_doc.GetSelectedInstance(), + objectDefinitions().m_Node.m_Rotation, + qt3dsdm::SValue(QVariant::fromValue(m_currentDragState.r))); + editor.SetInstancePropertyValue( + m_doc.GetSelectedInstance(), + objectDefinitions().m_Node.m_Scale, + qt3dsdm::SValue(QVariant::fromValue(m_currentDragState.s))); + inEditor.FireImmediateRefresh(m_doc.GetSelectedInstance()); + } else { + // reset node to beginning + Q3DSNode &node = static_cast<Q3DSNode &>(m_dragTranslator->graphObject()); + Q3DSPropertyChangeList list; + list.append(node.setPosition(m_beginDragState.t)); + list.append(node.setScale(m_beginDragState.s)); + list.append(node.setRotation(m_beginDragState.r)); + node.notifyPropertyChanges(list); + } + m_dragTranslator = nullptr; } - m_dragTranslator = nullptr; endPickWidget(); } |