diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp index 0e02eb717b51a5b2842de8bf9ddec9ee651322b3..36625edafff75c43a4fd091fc40b14c479bdf164 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp @@ -46,8 +46,8 @@ FormEditorGraphicsView::FormEditorGraphicsView(QWidget *parent) : { setTransformationAnchor(QGraphicsView::AnchorUnderMouse); setResizeAnchor(QGraphicsView::AnchorViewCenter); -// setCacheMode(QGraphicsView::CacheNone); - setCacheMode(QGraphicsView::CacheBackground); + setCacheMode(QGraphicsView::CacheNone); +// setCacheMode(QGraphicsView::CacheBackground); setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); setOptimizationFlags(QGraphicsView::DontSavePainterState); // setViewportUpdateMode(QGraphicsView::NoViewportUpdate); @@ -110,6 +110,16 @@ void FormEditorGraphicsView::keyPressEvent(QKeyEvent *event) QGraphicsView::keyPressEvent(event); } +void FormEditorGraphicsView::setRootItemRect(const QRectF &rect) +{ + m_rootItemRect = rect; + qDebug() << __FUNCTION__ << m_rootItemRect; +} + +QRectF FormEditorGraphicsView::rootItemRect() const +{ + return m_rootItemRect; +} void FormEditorGraphicsView::mouseReleaseEvent(QMouseEvent *event) { @@ -298,11 +308,10 @@ void FormEditorGraphicsView::drawBackground(QPainter *painter, const QRectF &rec { painter->save(); painter->setBrushOrigin(0, 0); - painter->fillRect(rect.intersected(sceneRect()), backgroundBrush()); + painter->fillRect(rect.intersected(rootItemRect()), backgroundBrush()); // paint rect around editable area painter->setPen(Qt::black); - QRectF frameRect = sceneRect().adjusted(0, 0, 0, 0); - painter->drawRect(frameRect); + painter->drawRect( rootItemRect()); painter->restore(); } diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h index 4974396fbf7c35b724adec17720dcefefd7d5a18..d04f5621a6a82a2803773e386456553d7e44b29f 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h @@ -46,6 +46,8 @@ public: explicit FormEditorGraphicsView(QWidget *parent = 0); void setFeedbackNode(const QmlItemNode &node); + void setRootItemRect(const QRectF &rect); + QRectF rootItemRect() const; protected: void drawForeground(QPainter *painter, const QRectF &rect ); @@ -55,6 +57,8 @@ protected: void mouseReleaseEvent(QMouseEvent *event); void leaveEvent(QEvent *); void keyPressEvent(QKeyEvent *event); + + private: QmlItemNode m_feedbackNode; QmlObjectNode m_parentNode; @@ -72,6 +76,7 @@ private: bool m_beginHeightHasExpression; QPoint m_feedbackOriginPoint; QPixmap m_bubblePixmap; + QRectF m_rootItemRect; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp index 80d8d35134bd52469e139c232cf113129e0d3863..ed2ed7877450c6c80d06a0d2e51628bf53d00e4b 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp @@ -65,8 +65,6 @@ FormEditorScene::FormEditorScene(FormEditorWidget *view, FormEditorView *editorV m_paintMode(NormalMode), m_showBoundingRects(true) { - setSceneRect(0, 0, 1, 1); // prevent automatic calculation (causing a recursion), right size will be set later - m_manipulatorLayerItem->setZValue(1.0); m_formLayerItem->setZValue(0.0); m_formLayerItem->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false); @@ -150,9 +148,6 @@ void FormEditorScene::synchronizeTransformation(const QmlItemNode &qmlItemNode) item->updateGeometry(); if (qmlItemNode.isRootNode()) { - QRectF sceneRect(qmlItemNode.instanceBoundingRect()); - - setSceneRect(sceneRect); formLayerItem()->update(); manipulatorLayerItem()->update(); } @@ -198,9 +193,6 @@ FormEditorItem *FormEditorScene::addFormEditorItem(const QmlItemNode &qmlItemNod m_qmlItemNodeItemHash.insert(qmlItemNode, formEditorItem); if (qmlItemNode.isRootNode()) { - QRectF sceneRect(qmlItemNode.instanceBoundingRect()); - - setSceneRect(sceneRect); formLayerItem()->update(); manipulatorLayerItem()->update(); } diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index e5a4368a0086ad76a746d9ec996d9171b5048326..83e828259d663d6c62252500abada37af035342a 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -486,6 +486,9 @@ void FormEditorView::customNotification(const AbstractView *view, const QString QmlItemNode qmlItemNode(node); if (qmlItemNode.isValid() && scene()->hasItemForQmlItemNode(qmlItemNode)) { scene()->synchronizeTransformation(qmlItemNode); + if (qmlItemNode.isRootModelNode()) + widget()->setRootItemRect(qmlItemNode.instanceBoundingRect()); + itemNodeList.append(scene()->itemForQmlItemNode(qmlItemNode)); } } diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp index a54369dc5ac0ea78d51dad8eb94b010f5e98a1e6..12ff53071fab45c602e49e6a0d0474710b384e5a 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp @@ -280,6 +280,16 @@ QString FormEditorWidget::contextHelpId() const return helpId; } +void FormEditorWidget::setRootItemRect(const QRectF &rect) +{ + m_graphicsView->setRootItemRect(rect); +} + +QRectF FormEditorWidget::rootItemRect() const +{ + return m_graphicsView->rootItemRect(); +} + } diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h index 0e0f99b3f829f7fe58e90ee6ee3cdf059cf45683..7ea15ba423e4cfcc71fee430edff65c106c80b3d 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h @@ -74,6 +74,9 @@ public: QString contextHelpId() const; + void setRootItemRect(const QRectF &rect); + QRectF rootItemRect() const; + protected: void enterEvent(QEvent *event); void wheelEvent(QWheelEvent *event);