QmlDesigner.NodeInstances: Create effect items only in the render process

Change-Id: I0506bf898582ba8e26a22f51737eae4d82f06c63
Reviewed-on: http://codereview.qt.nokia.com/4004
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com>
This commit is contained in:
Marco Bubke
2011-08-31 18:19:45 +02:00
parent d9b10dca48
commit 7fa9e52d70
3 changed files with 27 additions and 6 deletions
@@ -60,6 +60,8 @@
#include "completecomponentcommand.h"
#include "componentcompletedcommand.h"
#include "createscenecommand.h"
#include "sgitemnodeinstance.h"
#include "dummycontextobject.h"
@@ -70,6 +72,7 @@ namespace QmlDesigner {
Qt5RenderNodeInstanceServer::Qt5RenderNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) :
Qt5NodeInstanceServer(nodeInstanceClient)
{
Internal::SGItemNodeInstance::createEffectItem(true);
}
void Qt5RenderNodeInstanceServer::collectItemChangesAndSendChangeCommands()
@@ -45,6 +45,8 @@
namespace QmlDesigner {
namespace Internal {
bool SGItemNodeInstance::s_createEffectItem = false;
SGItemNodeInstance::SGItemNodeInstance(QSGItem *item)
: ObjectNodeInstance(item),
m_hasHeight(false),
@@ -186,23 +188,27 @@ bool SGItemNodeInstance::equalSGItem(QSGItem *item) const
void SGItemNodeInstance::updateDirtyNodeRecursive(QSGItem *parentItem) const
{
DesignerSupport::updateDirtyNode(parentItem);
foreach (QSGItem *childItem, parentItem->childItems()) {
if (!nodeInstanceServer()->hasInstanceForObject(childItem))
updateDirtyNodeRecursive(childItem);
}
DesignerSupport::updateDirtyNode(parentItem);
}
QImage SGItemNodeInstance::renderImage() const
{
updateDirtyNodeRecursive(sgItem());
QImage image = designerSupport()->renderImageForItem(sgItem(), boundingRectWithStepChilds(sgItem()));
QRectF boundingRect = boundingRectWithStepChilds(sgItem());
image = image.convertToFormat(QImage::Format_ARGB32_Premultiplied);
QImage renderImage = designerSupport()->renderImageForItem(sgItem(), boundingRect, boundingRect.size().toSize());
return image;
qDebug() << __FUNCTION__ << renderImage.size();
renderImage = renderImage.convertToFormat(QImage::Format_ARGB32_Premultiplied);
return renderImage;
}
bool SGItemNodeInstance::isMovable() const
@@ -244,7 +250,9 @@ void SGItemNodeInstance::initialize(const ObjectNodeInstance::Pointer &objectNod
sgItem()->setParentItem(qobject_cast<QSGItem*>(nodeInstanceServer()->sgView()->rootObject()));
}
designerSupport()->refFromEffectItem(sgItem());
if (s_createEffectItem || instanceId() == 0)
designerSupport()->refFromEffectItem(sgItem());
ObjectNodeInstance::initialize(objectNodeInstance);
sgItem()->update();
}
@@ -311,6 +319,8 @@ QRectF SGItemNodeInstance::boundingRect() const
void SGItemNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
{
if (name == "width" || name == "height")
qDebug() << __FUNCTION__ << name << value;
if (name == "state")
return; // states are only set by us
@@ -583,6 +593,11 @@ Qt5NodeInstanceServer *SGItemNodeInstance::qt5NodeInstanceServer() const
return qobject_cast<Qt5NodeInstanceServer*>(nodeInstanceServer());
}
void SGItemNodeInstance::createEffectItem(bool createEffectItem)
{
s_createEffectItem = createEffectItem;
}
} // namespace Internal
} // namespace QmlDesigner
@@ -109,6 +109,8 @@ public:
DesignerSupport *designerSupport() const;
Qt5NodeInstanceServer *qt5NodeInstanceServer() const;
static void createEffectItem(bool createEffectItem);
protected:
SGItemNodeInstance(QSGItem*);
QSGItem *sgItem() const;
@@ -128,6 +130,7 @@ private: //variables
double m_y;
double m_width;
double m_height;
static bool s_createEffectItem;
};
} // namespace Internal