From 0fcc6afd8f28150f7c6db18a7558eade9c405e90 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 27 Jun 2011 21:56:01 +0200 Subject: [PATCH] QmlDesigner: Split between bounding rectangle and painted bounding rectangle In qml the interactive bounding rectangle is always QRectF(0, 0, width, height). The painted bounding rectangle can differ from this logical one. This change is much more near to the qml description. Change-Id: I139cb70512fa1ed003b28ca2ae512f4e33e915e5 Reviewed-on: http://codereview.qt.nokia.com/812 Reviewed-by: Qt Sanity Bot Reviewed-by: Thomas Hartmann --- .../instances/qmlgraphicsitemnodeinstance.cpp | 85 ------------------- .../components/formeditor/formeditoritem.cpp | 2 +- .../formeditor/resizemanipulator.cpp | 10 +-- .../designercore/include/qmlitemnode.h | 1 + .../designercore/model/qmlitemnode.cpp | 5 ++ 5 files changed, 11 insertions(+), 92 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp index 13c8a105f52..09e32ce33c8 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp @@ -90,9 +90,6 @@ QmlGraphicsItemNodeInstance::Pointer QmlGraphicsItemNodeInstance::create(QObject instance->setHasContent(anyItemHasContent(qmlGraphicsItem)); qmlGraphicsItem->setFlag(QGraphicsItem::ItemHasNoContents, false); - if (qmlGraphicsItem->inherits("QDeclarativeText")) - instance->setResizable(false); - static_cast(qmlGraphicsItem)->classBegin(); instance->populateResetValueHash(); @@ -107,93 +104,11 @@ bool QmlGraphicsItemNodeInstance::isQmlGraphicsItem() const QSizeF QmlGraphicsItemNodeInstance::size() const { - if (isValid()) { - double implicitWidth = qmlGraphicsItem()->implicitWidth(); - if (!m_hasWidth - && implicitWidth // WORKAROUND - && qmlGraphicsItem()->width() <= 0 - && implicitWidth != qmlGraphicsItem()->width() - && !hasBindingForProperty("width")) { - qmlGraphicsItem()->blockSignals(true); - qmlGraphicsItem()->setWidth(implicitWidth); - qmlGraphicsItem()->blockSignals(false); - } - - double implicitHeight = qmlGraphicsItem()->implicitHeight(); - if (!m_hasHeight - && implicitWidth // WORKAROUND - && qmlGraphicsItem()->height() <= 0 - && implicitHeight != qmlGraphicsItem()->height() - && !hasBindingForProperty("height")) { - qmlGraphicsItem()->blockSignals(true); - qmlGraphicsItem()->setHeight(implicitHeight); - qmlGraphicsItem()->blockSignals(false); - } - - } - - if (isRootNodeInstance()) { - if (!m_hasWidth) { - qmlGraphicsItem()->blockSignals(true); - if (qmlGraphicsItem()->width() < 10.) - qmlGraphicsItem()->setWidth(100.); - qmlGraphicsItem()->blockSignals(false); - } - - if (!m_hasHeight) { - qmlGraphicsItem()->blockSignals(true); - if (qmlGraphicsItem()->height() < 10.) - qmlGraphicsItem()->setHeight(100.); - qmlGraphicsItem()->blockSignals(false); - } - } - return QSizeF(qmlGraphicsItem()->width(), qmlGraphicsItem()->height()); } QRectF QmlGraphicsItemNodeInstance::boundingRect() const { - if (isValid()) { - double implicitWidth = qmlGraphicsItem()->implicitWidth(); - if (!m_hasWidth - && implicitWidth // WORKAROUND - && qmlGraphicsItem()->width() <= 0 - && implicitWidth != qmlGraphicsItem()->width() - && !hasBindingForProperty("width")) { - qmlGraphicsItem()->blockSignals(true); - qmlGraphicsItem()->setWidth(implicitWidth); - qmlGraphicsItem()->blockSignals(false); - } - - double implicitHeight = qmlGraphicsItem()->implicitHeight(); - if (!m_hasHeight - && implicitWidth // WORKAROUND - && qmlGraphicsItem()->height() <= 0 - && implicitHeight != qmlGraphicsItem()->height() - && !hasBindingForProperty("height")) { - qmlGraphicsItem()->blockSignals(true); - qmlGraphicsItem()->setHeight(implicitHeight); - qmlGraphicsItem()->blockSignals(false); - } - - } - - if (isRootNodeInstance()) { - if (!m_hasWidth) { - qmlGraphicsItem()->blockSignals(true); - if (qmlGraphicsItem()->width() < 10.) - qmlGraphicsItem()->setWidth(100.); - qmlGraphicsItem()->blockSignals(false); - } - - if (!m_hasHeight) { - qmlGraphicsItem()->blockSignals(true); - if (qmlGraphicsItem()->height() < 10.) - qmlGraphicsItem()->setHeight(100.); - qmlGraphicsItem()->blockSignals(false); - } - } - if (qmlGraphicsItem()) return qmlGraphicsItem()->boundingRect(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 8ea38a21b09..bedfac68d9a 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -99,7 +99,7 @@ QRectF FormEditorItem::boundingRect() const void FormEditorItem::updateGeometry() { prepareGeometryChange(); - m_boundingRect = qmlItemNode().instanceBoundingRect().adjusted(0, 0, 1., 1.); + m_boundingRect = qmlItemNode().instancePaintedBoundingRect().adjusted(0, 0, 1., 1.); setTransform(qmlItemNode().instanceTransform()); setTransform(m_attentionTransform, true); //the property for zValue is called z in QGraphicsObject diff --git a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp index c670b403068..1864bbafac4 100644 --- a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp +++ b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp @@ -518,21 +518,19 @@ bool ResizeManipulator::isActive() const void ResizeManipulator::setSize(QmlItemNode itemNode, const QSizeF &size) { - int penWidth = (itemNode.instancePenWidth() / 2) * 2; - if (!itemNode.hasBindingProperty("width")) - itemNode.setVariantProperty("width", qRound(size.width()) - penWidth); + itemNode.setVariantProperty("width", qRound(size.width())); if (!itemNode.hasBindingProperty("height")) - itemNode.setVariantProperty("height", qRound(size.height()) - penWidth); + itemNode.setVariantProperty("height", qRound(size.height())); } void ResizeManipulator::setPosition(QmlItemNode itemNode, const QPointF &position) { if (!itemNode.hasBindingProperty("x")) - itemNode.setVariantProperty("x", qRound(position.x()) + (itemNode.instancePenWidth() / 2)); + itemNode.setVariantProperty("x", qRound(position.x())); if (!itemNode.hasBindingProperty("y")) - itemNode.setVariantProperty("y", qRound(position.y()) + (itemNode.instancePenWidth() / 2)); + itemNode.setVariantProperty("y", qRound(position.y())); } } diff --git a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h index df995186aeb..68d8ba7b6fc 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h @@ -76,6 +76,7 @@ public: bool instanceIsInPositioner() const; QRectF instanceBoundingRect() const; + QRectF instancePaintedBoundingRect() const; QTransform instanceTransform() const; QTransform instanceSceneTransform() const; QPointF instancePosition() const; diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index bd539ba9340..4b40789b0ab 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -220,6 +220,11 @@ bool QmlItemNode::instanceIsInPositioner() const } QRectF QmlItemNode::instanceBoundingRect() const +{ + return QRectF(QPointF(0, 0), nodeInstance().size()); +} + +QRectF QmlItemNode::instancePaintedBoundingRect() const { return nodeInstance().boundingRect(); }