From aa5ce3b9dab4f3d877c0b112c43fb17b6d681d55 Mon Sep 17 00:00:00 2001 From: Marco Bubke <marco.bubke@nokia.com> Date: Mon, 11 Jan 2010 18:34:58 +0100 Subject: [PATCH] Fix the border handling Task-number: BAUHAUS-259 --- .../components/formeditor/resizemanipulator.cpp | 10 +++++----- src/plugins/qmldesigner/core/include/nodeinstance.h | 2 ++ src/plugins/qmldesigner/core/include/qmlitemnode.h | 1 + .../qmldesigner/core/instances/nodeinstance.cpp | 5 +++++ .../qmldesigner/core/instances/objectnodeinstance.cpp | 5 +++++ .../qmldesigner/core/instances/objectnodeinstance.h | 2 ++ .../core/instances/qmlgraphicsitemnodeinstance.cpp | 10 +++++++++- .../core/instances/qmlgraphicsitemnodeinstance.h | 2 ++ src/plugins/qmldesigner/core/model/qmlitemnode.cpp | 11 +++++++++-- 9 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp index b0f21896461..24e9ef43bd1 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 d417b0eef9a..e0cb37b63b9 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 643dea042e2..4b40c827333 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 00c4d556e48..5798c681c89 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 ca1716200fe..f5b5ab48d2e 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 16b6af3a42f..10ddef70472 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 d2abed4752e..7593da3862a 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 da1275b282c..4eb87068605 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 3613b392eb3..00786029837 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(); -- GitLab