diff --git a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp index b0f218964614da50c21587719793602dc23e0a00..24e9ef43bd185b113e9083b896de06fc33caf83e 100644 --- a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp +++ b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp @@ -185,7 +185,7 @@ void ResizeManipulator::update(const QPointF& updatePoint, Snapping useSnapping) boundingRect.setTop(boundingRect.top() - minimumHeight + boundingRect.height()); formEditorItem->qmlItemNode().setSize(boundingRect.size()); - formEditorItem->qmlItemNode().setPosition(m_beginToParentTransform.map(boundingRect.topLeft())); + formEditorItem->qmlItemNode().setPositionWithBorder(m_beginToParentTransform.map(boundingRect.topLeft())); if (anchors.instanceHasAnchor(AnchorLine::Top)) { @@ -226,7 +226,7 @@ void ResizeManipulator::update(const QPointF& updatePoint, Snapping useSnapping) boundingRect.setWidth(minimumWidth); formEditorItem->qmlItemNode().setSize(boundingRect.size()); - formEditorItem->qmlItemNode().setPosition(m_beginToParentTransform.map(boundingRect.topLeft())); + formEditorItem->qmlItemNode().setPositionWithBorder(m_beginToParentTransform.map(boundingRect.topLeft())); if (anchors.instanceHasAnchor(AnchorLine::Top)) { anchors.setMargin(AnchorLine::Top, @@ -266,7 +266,7 @@ void ResizeManipulator::update(const QPointF& updatePoint, Snapping useSnapping) boundingRect.setLeft(boundingRect.left() - minimumWidth + boundingRect.width()); formEditorItem->qmlItemNode().setSize(boundingRect.size()); - formEditorItem->qmlItemNode().setPosition(m_beginToParentTransform.map(boundingRect.topLeft())); + formEditorItem->qmlItemNode().setPositionWithBorder(m_beginToParentTransform.map(boundingRect.topLeft())); if (anchors.instanceHasAnchor(AnchorLine::Left)) { anchors.setMargin(AnchorLine::Left, @@ -320,7 +320,7 @@ void ResizeManipulator::update(const QPointF& updatePoint, Snapping useSnapping) boundingRect.setTop(boundingRect.top() - minimumHeight + boundingRect.height()); formEditorItem->qmlItemNode().setSize(boundingRect.size()); - formEditorItem->qmlItemNode().setPosition(m_beginToParentTransform.map(boundingRect.topLeft())); + formEditorItem->qmlItemNode().setPositionWithBorder(m_beginToParentTransform.map(boundingRect.topLeft())); if (anchors.instanceHasAnchor(AnchorLine::Top)) { anchors.setMargin(AnchorLine::Top, @@ -370,7 +370,7 @@ void ResizeManipulator::update(const QPointF& updatePoint, Snapping useSnapping) boundingRect.setLeft(boundingRect.left() - minimumWidth + boundingRect.width()); formEditorItem->qmlItemNode().setSize(boundingRect.size()); - formEditorItem->qmlItemNode().setPosition(m_beginToParentTransform.map(boundingRect.topLeft())); + formEditorItem->qmlItemNode().setPositionWithBorder(m_beginToParentTransform.map(boundingRect.topLeft())); if (anchors.instanceHasAnchor(AnchorLine::Left)) { anchors.setMargin(AnchorLine::Left, diff --git a/src/plugins/qmldesigner/core/include/nodeinstance.h b/src/plugins/qmldesigner/core/include/nodeinstance.h index d417b0eef9a8d973b6c63a832744e9e34b809ee3..e0cb37b63b9fb1684eb2d1e36742dc57785d4a67 100644 --- a/src/plugins/qmldesigner/core/include/nodeinstance.h +++ b/src/plugins/qmldesigner/core/include/nodeinstance.h @@ -129,6 +129,8 @@ public: bool isAnchoredBy() const; QPair<QString, NodeInstance> anchor(const QString &name) const; + int penWidth() const; + private: // functions NodeInstance(const QSharedPointer<Internal::ObjectNodeInstance> &abstractInstance); diff --git a/src/plugins/qmldesigner/core/include/qmlitemnode.h b/src/plugins/qmldesigner/core/include/qmlitemnode.h index 643dea042e256acd5b407d110c66ed522fdf0318..4b40c827333d28f25fbd27d9d3a7365571a4d130 100644 --- a/src/plugins/qmldesigner/core/include/qmlitemnode.h +++ b/src/plugins/qmldesigner/core/include/qmlitemnode.h @@ -76,6 +76,7 @@ public: void setSize(const QSizeF &size); void setPosition(const QPointF &position); + void setPositionWithBorder(const QPointF &position); void selectNode(); void deselectNode(); diff --git a/src/plugins/qmldesigner/core/instances/nodeinstance.cpp b/src/plugins/qmldesigner/core/instances/nodeinstance.cpp index 00c4d556e488c18b7703e5659f8959130d8f76b6..5798c681c8997974e6a9cf4db355edd90989d45a 100644 --- a/src/plugins/qmldesigner/core/instances/nodeinstance.cpp +++ b/src/plugins/qmldesigner/core/instances/nodeinstance.cpp @@ -455,6 +455,11 @@ bool NodeInstance::hasAnchor(const QString &name) const return m_nodeInstance->hasAnchor(name); } +int NodeInstance::penWidth() const +{ + return m_nodeInstance->penWidth(); +} + bool NodeInstance::isAnchoredBy() const { return m_nodeInstance->isAnchoredBy(); diff --git a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp index ca1716200fe561fce9049fb4064c94d9f8be6ff2..f5b5ab48d2ea4ab5ea8de3919a5c71e86bc44a53 100644 --- a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp +++ b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp @@ -661,6 +661,11 @@ QSizeF ObjectNodeInstance::size() const return QSizeF(); } +int ObjectNodeInstance::penWidth() const +{ + return 0; +} + bool ObjectNodeInstance::isVisible() const { return false; diff --git a/src/plugins/qmldesigner/core/instances/objectnodeinstance.h b/src/plugins/qmldesigner/core/instances/objectnodeinstance.h index 16b6af3a42f48894ce1f7be4aeb5ad88fe9e15cb..10ddef70472feb228e42612008dd17a273e3c862 100644 --- a/src/plugins/qmldesigner/core/instances/objectnodeinstance.h +++ b/src/plugins/qmldesigner/core/instances/objectnodeinstance.h @@ -122,6 +122,8 @@ public: virtual QTransform sceneTransform() const; virtual double opacity() const; + virtual int penWidth() const; + virtual bool hasAnchor(const QString &name) const; virtual QPair<QString, NodeInstance> anchor(const QString &name) const; virtual bool isAnchoredBy() const; diff --git a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp index d2abed4752eb1683d742754112e25919d7213c4c..7593da3862a4c0233e5a2ccf48600060698c591a 100644 --- a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp +++ b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp @@ -40,7 +40,7 @@ #include <private/qmlgraphicsanchors_p.h> #include <private/qmlgraphicsanchors_p_p.h> - +#include <private/qmlgraphicsrectangle_p.h> #include <private/qmlexpression_p.h> #include <cmath> @@ -226,6 +226,14 @@ void QmlGraphicsItemNodeInstance::resetVertical() setPropertyVariant("height", qmlGraphicsItem()->implicitHeight()); } +int QmlGraphicsItemNodeInstance::penWidth() const +{ + QmlGraphicsRectangle *qmlGraphcisRectangle = qobject_cast<QmlGraphicsRectangle*>(object()); + if (qmlGraphcisRectangle) + return qmlGraphcisRectangle->border()->width(); + + return GraphicsObjectNodeInstance::penWidth(); +} void QmlGraphicsItemNodeInstance::resetProperty(const QString &name) { diff --git a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.h b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.h index da1275b282c2bda643b6a6e3db89b5b30030407f..4eb870686058dd4400c7d02240556078e494c0e4 100644 --- a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.h +++ b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.h @@ -60,6 +60,8 @@ public: QVariant property(const QString &name) const; void resetProperty(const QString &name); + int penWidth() const; + bool hasAnchor(const QString &name) const; QPair<QString, NodeInstance> anchor(const QString &name) const; bool isAnchoredBy() const; diff --git a/src/plugins/qmldesigner/core/model/qmlitemnode.cpp b/src/plugins/qmldesigner/core/model/qmlitemnode.cpp index 3613b392eb3bef6dd9c2c7484b5791a91d75efaa..0078602983739724614f16701a34e9b21fe27b13 100644 --- a/src/plugins/qmldesigner/core/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/core/model/qmlitemnode.cpp @@ -200,8 +200,8 @@ void QmlItemNode::paintInstance(QPainter *painter) const void QmlItemNode::setSize(const QSizeF &size) { RewriterTransaction transaction = qmlModelView()->beginRewriterTransaction(); - setVariantProperty("width", qRound(size.width())); - setVariantProperty("height", qRound(size.height())); + setVariantProperty("width", qRound(size.width()) - (nodeInstance().penWidth())); + setVariantProperty("height", qRound(size.height()) - (nodeInstance().penWidth())); } void QmlItemNode::setPosition(const QPointF &position) @@ -211,6 +211,13 @@ void QmlItemNode::setPosition(const QPointF &position) setVariantProperty("y", qRound(position.y())); } +void QmlItemNode::setPositionWithBorder(const QPointF &position) +{ + RewriterTransaction transaction = qmlModelView()->beginRewriterTransaction(); + setVariantProperty("x", qRound(position.x()) + (nodeInstance().penWidth() / 2)); + setVariantProperty("y", qRound(position.y()) + (nodeInstance().penWidth() / 2)); +} + void QmlItemNode::selectNode() { modelNode().selectNode();