diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index fd3d824a1533c904f6affbc408397700cbcb1642..3839662b6d1e8af7a9cb11975a9b344785c1078a 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -53,7 +53,7 @@ namespace QmlDesigner { - +QPixmap FormEditorItem::s_invisibleItemPixmap = QPixmap(); FormEditorScene *FormEditorItem::scene() const { return qobject_cast<FormEditorScene*>(QGraphicsItem::scene()); @@ -242,6 +242,7 @@ void FormEditorItem::paintBoundingRect(QPainter *painter) const QPen pen; pen.setJoinStyle(Qt::MiterJoin); + pen.setStyle(Qt::DotLine); switch(scene()->paintMode()) { case FormEditorScene::AnchorMode: { @@ -280,8 +281,55 @@ void FormEditorItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, painter->save(); - if (isContentVisible()) + if (qmlItemNode().instanceIsRenderPixmapNull()) { + if (scene()->showBoundingRects()) { + if (s_invisibleItemPixmap.isNull()) { + QImage invisibleItemImage(14, 14, QImage::Format_ARGB32_Premultiplied); + + invisibleItemImage.fill(0xFF999999); + QPainter fillPainter(&invisibleItemImage); + fillPainter.setCompositionMode(QPainter::CompositionMode_Source); + fillPainter.rotate(-45); + fillPainter.translate(-10, 0); + fillPainter.fillRect(0, -4, 20, 7, QColor(100, 100, 100, 0)); + fillPainter.translate(0, 10); + fillPainter.fillRect(0, -4, 20, 7, QColor(100, 100, 100, 0)); + fillPainter.translate(0, 9); + fillPainter.fillRect(0, -3, 20, 6, QColor(100, 100, 100, 0)); + + + + + s_invisibleItemPixmap = QPixmap::fromImage(invisibleItemImage); + } + + painter->drawTiledPixmap(boundingRect(), s_invisibleItemPixmap); + + + + QString displayText = qmlItemNode().id(); + + if (displayText.isEmpty()) + displayText = qmlItemNode().simplifiedTypeName(); + + QTextOption textOption; + textOption.setAlignment(Qt::AlignCenter); + textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); + + painter->save(); + + QFont font; + font.setPixelSize(18); + painter->setFont(font); + + painter->drawText(boundingRect(), displayText, textOption); + + painter->restore(); + } + + } else { qmlItemNode().paintInstance(painter); + } if (!qmlItemNode().isRootModelNode()) paintBoundingRect(painter); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h index b3874cabf136e99e248833dd433eed5398bc7ac2..3b1175cf3ac2b664ef3fd720b70a50f881caf6fd 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h @@ -133,6 +133,7 @@ private: // variables bool m_highlightBoundingRect; bool m_isContentVisible; bool m_isFormEditorVisible; + static QPixmap s_invisibleItemPixmap; }; diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 08e63291d53669b1ef49e70ca6e3f22cbeb991b9..a84fca20f40debc3589e5ed5ea6722d5255e5295 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -285,6 +285,12 @@ FormEditorWidget *FormEditorView::widget() const void FormEditorView::nodeIdChanged(const ModelNode& node, const QString& newId, const QString& oldId) { QmlModelView::nodeIdChanged(node, newId, oldId); + QmlItemNode itemNode(node); + + if (itemNode.isValid()) { + FormEditorItem *item = m_scene->itemForQmlItemNode(itemNode); + item->update(); + } } void FormEditorView::selectedNodesChanged(const QList<ModelNode> &selectedNodeList, diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp index 56e9060510250e1b7842c91124a1e2d1a0ea9d25..86e25caab75fc27b11842618af2c5bfcabbf4528 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp @@ -112,7 +112,7 @@ FormEditorWidget::FormEditorWidget(FormEditorView *view) addAction(separatorAction); upperActions.append(separatorAction); - m_showBoundingRectAction = new QAction(tr("Show bounding rectangles (A)"), this); + m_showBoundingRectAction = new QAction(tr("Show bounding rectangles and stripes for empty items (Press Key A)"), this); m_showBoundingRectAction->setShortcut(Qt::Key_A); m_showBoundingRectAction->setShortcutContext(Qt::WidgetWithChildrenShortcut); m_showBoundingRectAction->setCheckable(true); diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstance.h b/src/plugins/qmldesigner/designercore/include/nodeinstance.h index cb630b4fac04dc550e758d389b0cd79f7973e238..4f609c052680eb86b726633f79966d702df7f960 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstance.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstance.h @@ -83,6 +83,8 @@ public: qint32 parentId() const; qint32 instanceId() const; + QPixmap renderPixmap() const; + protected: void setProperty(const QString &name, const QVariant &value); InformationName setInformation(InformationName name, @@ -108,7 +110,7 @@ protected: InformationName setInformationHasBindingForProperty(const QString &property, bool hasProperty); void setParentId(qint32 instanceId); - void setRenderImage(const QImage &image); + void setRenderPixmap(const QImage &image); NodeInstance(ProxyNodeInstanceData *d); private: diff --git a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h index ac1dcabb6fe52bd9f353a17ea26372dddc479d02..6003f1ce7ab163f108c18872f4f2856260824844 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h @@ -84,6 +84,7 @@ public: QPointF instancePosition() const; QSizeF instanceSize() const; int instancePenWidth() const; + bool instanceIsRenderPixmapNull() const; void paintInstance(QPainter *painter); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp index cdbb363a9ed44accc52400d24c34d4bd1246e00e..072a5486195637461a18c767a373ec897135fad0 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp @@ -75,7 +75,7 @@ public: QHash<QString, bool> hasAnchors; QHash<QString, QString> instanceTypes; - QImage renderImage; + QPixmap renderPixmap; QHash<QString, QPair<QString, qint32> > anchors; }; @@ -249,8 +249,8 @@ int NodeInstance::penWidth() const void NodeInstance::paint(QPainter *painter) { - if (isValid() && !d->renderImage.isNull()) - painter->drawImage(boundingRect().topLeft(), d->renderImage); + if (isValid() && !d->renderPixmap.isNull()) + painter->drawPixmap(boundingRect().topLeft(), d->renderPixmap); } QVariant NodeInstance::property(const QString &name) const @@ -307,9 +307,15 @@ void NodeInstance::setProperty(const QString &name, const QVariant &value) d->propertyValues.insert(name, value); } -void NodeInstance::setRenderImage(const QImage &image) +QPixmap NodeInstance::renderPixmap() const { - d->renderImage = image; + return d->renderPixmap; +} + +void NodeInstance::setRenderPixmap(const QImage &image) +{ + if (!image.isNull()) + d->renderPixmap = QPixmap::fromImage(image); } void NodeInstance::setParentId(qint32 instanceId) diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 241663e70888c108435f917bd1922829a00014c8..adfdae29b3bb6c5ca378349fac5097ceb573a078 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -1069,7 +1069,7 @@ void NodeInstanceView::pixmapChanged(const PixmapChangedCommand &command) if (hasInstanceForId(container.instanceId())) { NodeInstance instance = instanceForId(container.instanceId()); if (instance.isValid()) { - instance.setRenderImage(container.image()); + instance.setRenderPixmap(container.image()); renderImageChangeSet.insert(instance.modelNode()); } } diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index c313ea9ac1e1247dccfebeceebf5127166ea6a92..a847a4385be25a354aef6a535ecbb98b3aad5040 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -270,6 +270,11 @@ int QmlItemNode::instancePenWidth() const return nodeInstance().penWidth(); } +bool QmlItemNode::instanceIsRenderPixmapNull() const +{ + return nodeInstance().renderPixmap().isNull(); +} + void QmlItemNode::paintInstance(QPainter *painter) { if (nodeInstance().isValid())