diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp index 4e0f19c4b5648140e96a1b5ef6a2e99c4b554a0b..ee55ff4edd9a1885d3d47caaefc4c5f7a1fb547c 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp @@ -314,7 +314,7 @@ void DragTool::move(QPointF scenePos) /* if (event->modifiers().testFlag(Qt::ControlModifier) != view()->isSnapButtonChecked()) useSnapping = MoveManipulator::UseSnapping;*/ - m_moveManipulator.update(scenePos, useSnapping); + m_moveManipulator.update(scenePos, useSnapping, MoveManipulator::UseBaseState); } diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp index 80449c8778d817a30c024089c1d3045a237a4528..b318a3037f2bf7882c8dec054f24fb4bb1f0fa43 100644 --- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp +++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp @@ -200,7 +200,7 @@ QList<QRectF> MoveManipulator::tanslatedBoundingRects(const QList<QRectF> &bound /* /brief updates the position of the items. */ -void MoveManipulator::update(const QPointF& updatePoint, Snapping useSnapping) +void MoveManipulator::update(const QPointF& updatePoint, Snapping useSnapping, State stateToBeManipulated) { deleteSnapLines(); //Since they position is changed and the item is moved the snapping lines are //are obsolete. The new updated snapping lines (color and visibility) will be @@ -226,36 +226,41 @@ void MoveManipulator::update(const QPointF& updatePoint, Snapping useSnapping) foreach (FormEditorItem* item, m_itemList) { QPointF positionInContainerSpace(m_beginPositionHash.value(item) + offsetVector); - QmlAnchors anchors(item->qmlItemNode().anchors()); - if (anchors.instanceHasAnchor(AnchorLine::Top)) { - anchors.setMargin(AnchorLine::Top, m_beginTopMarginHash.value(item) + offsetVector.y()); - } + // don't support anchors for base state because it is not needed by the droptool + if (stateToBeManipulated == UseActualState) { + QmlAnchors anchors(item->qmlItemNode().anchors()); - if (anchors.instanceHasAnchor(AnchorLine::Left)) { - anchors.setMargin(AnchorLine::Left, m_beginLeftMarginHash.value(item) + offsetVector.x()); - } + if (anchors.instanceHasAnchor(AnchorLine::Top)) { + anchors.setMargin(AnchorLine::Top, m_beginTopMarginHash.value(item) + offsetVector.y()); + } - if (anchors.instanceHasAnchor(AnchorLine::Bottom)) { - anchors.setMargin(AnchorLine::Bottom, m_beginBottomMarginHash.value(item) - offsetVector.y()); - } - - if (anchors.instanceHasAnchor(AnchorLine::Right)) { - anchors.setMargin(AnchorLine::Right, m_beginRightMarginHash.value(item) - offsetVector.x()); - } + if (anchors.instanceHasAnchor(AnchorLine::Left)) { + anchors.setMargin(AnchorLine::Left, m_beginLeftMarginHash.value(item) + offsetVector.x()); + } - if (anchors.instanceHasAnchor(AnchorLine::HorizontalCenter)) { - anchors.setMargin(AnchorLine::HorizontalCenter, m_beginHorizontalCenterHash.value(item) + offsetVector.x()); - } + if (anchors.instanceHasAnchor(AnchorLine::Bottom)) { + anchors.setMargin(AnchorLine::Bottom, m_beginBottomMarginHash.value(item) - offsetVector.y()); + } - if (anchors.instanceHasAnchor(AnchorLine::VerticalCenter)) { - anchors.setMargin(AnchorLine::VerticalCenter, m_beginVerticalCenterHash.value(item) + offsetVector.y()); - } + if (anchors.instanceHasAnchor(AnchorLine::Right)) { + anchors.setMargin(AnchorLine::Right, m_beginRightMarginHash.value(item) - offsetVector.x()); + } - item->qmlItemNode().setPosition(positionInContainerSpace); - } + if (anchors.instanceHasAnchor(AnchorLine::HorizontalCenter)) { + anchors.setMargin(AnchorLine::HorizontalCenter, m_beginHorizontalCenterHash.value(item) + offsetVector.x()); + } + if (anchors.instanceHasAnchor(AnchorLine::VerticalCenter)) { + anchors.setMargin(AnchorLine::VerticalCenter, m_beginVerticalCenterHash.value(item) + offsetVector.y()); + } + item->qmlItemNode().setPosition(positionInContainerSpace); + } else { + item->qmlItemNode().modelNode().variantProperty("x").setValue(qRound(positionInContainerSpace.x())); + item->qmlItemNode().modelNode().variantProperty("y").setValue(qRound(positionInContainerSpace.y())); + } + } } } diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.h b/src/plugins/qmldesigner/components/formeditor/movemanipulator.h index eb6fb221ea613717002d9920717df481f62805dd..976a4e71ac02a92ae61f170f1066403b33b00cc8 100644 --- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.h +++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.h @@ -57,13 +57,18 @@ public: NoSnapping }; + enum State { + UseActualState, + UseBaseState + }; + MoveManipulator(LayerItem *layerItem, FormEditorView *view); ~MoveManipulator(); void setItems(const QList<FormEditorItem*> &itemList); void setItem(FormEditorItem* item); void begin(const QPointF& beginPoint); - void update(const QPointF& updatePoint, Snapping useSnapping); + void update(const QPointF& updatePoint, Snapping useSnapping, State stateToBeManipulated = UseActualState); void reparentTo(FormEditorItem *newParent); void end(const QPointF& endPoint);