From cdeee01c73695b9aba1be4cf8326749b5a2b74e4 Mon Sep 17 00:00:00 2001 From: Marco Bubke <marco.bubke@nokia.com> Date: Tue, 18 May 2010 21:24:33 +0200 Subject: [PATCH] Generate a style option for the paint function in the node instances WebView is expecting a valid QStyleOptionGraphicsItem argument. Reviewed-by: kkoehne --- .../instances/graphicsobjectnodeinstance.cpp | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.cpp index 4fe80a1fcde..926d4465dde 100644 --- a/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.cpp @@ -31,6 +31,8 @@ #include "invalidnodeinstanceexception.h" #include <QGraphicsObject> +#include "private/qgraphicsitem_p.h" +#include <QStyleOptionGraphicsItem> #include "nodemetainfo.h" namespace QmlDesigner { @@ -153,13 +155,21 @@ bool GraphicsObjectNodeInstance::equalGraphicsItem(QGraphicsItem *item) const return item == graphicsObject(); } +void initOption(QGraphicsItem *item, QStyleOptionGraphicsItem *option, const QTransform &transform) +{ + QGraphicsItemPrivate *privateItem = QGraphicsItemPrivate::get(item); + privateItem->initStyleOption(option, transform, QRegion()); +} + void GraphicsObjectNodeInstance::paintRecursively(QGraphicsItem *graphicsItem, QPainter *painter) const { if (graphicsItem->isVisible()) { painter->save(); painter->setTransform(graphicsItem->itemTransform(graphicsItem->parentItem()), true); painter->setOpacity(graphicsItem->opacity() * painter->opacity()); - graphicsItem->paint(painter, 0); + QStyleOptionGraphicsItem option; + initOption(graphicsItem, &option, painter->transform()); + graphicsItem->paint(painter, &option); foreach(QGraphicsItem *childItem, graphicsItem->childItems()) { paintRecursively(childItem, painter); } @@ -171,12 +181,16 @@ void GraphicsObjectNodeInstance::paint(QPainter *painter) const { painter->save(); Q_ASSERT(graphicsObject()); - if (hasContent()) - graphicsObject()->paint(painter, 0); + if (hasContent()) { + QStyleOptionGraphicsItem option; + initOption(graphicsObject(), &option, painter->transform()); + graphicsObject()->paint(painter, &option); + } foreach(QGraphicsItem *graphicsItem, graphicsObject()->childItems()) { QGraphicsObject *graphicsObject = qgraphicsitem_cast<QGraphicsObject*>(graphicsItem); - if (graphicsObject && !nodeInstanceView()->hasInstanceForObject(graphicsObject)) + if (graphicsObject + && !nodeInstanceView()->hasInstanceForObject(graphicsObject)) paintRecursively(graphicsItem, painter); } -- GitLab