forked from qt-creator/qt-creator
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user