summaryrefslogtreecommitdiffstats
path: root/src/render/frontend/qrenderpass.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2014-07-30 08:35:44 +0200
committerSean Harmer <sean.harmer@kdab.com>2014-08-14 15:17:41 +0200
commit4444673206845a81291adf88c26f2a162b4ac6a7 (patch)
treeb2104189bb8bdf97297474cf24e6e60cf8c09f9d /src/render/frontend/qrenderpass.cpp
parent2b831e7547e8e51f0ce04b5dedf8dc1eaafeef5d (diff)
QRenderPass criterion added as child if declared inline
Change-Id: I26243e23941ea3f512c0c4e83a2d973ba9e1d46a Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/frontend/qrenderpass.cpp')
-rw-r--r--src/render/frontend/qrenderpass.cpp32
1 files changed, 22 insertions, 10 deletions
diff --git a/src/render/frontend/qrenderpass.cpp b/src/render/frontend/qrenderpass.cpp
index f67413604..676bc345f 100644
--- a/src/render/frontend/qrenderpass.cpp
+++ b/src/render/frontend/qrenderpass.cpp
@@ -74,8 +74,8 @@ QRenderPass *QRenderPass::doClone(QNode *clonedParent) const
Q_FOREACH (QCriterion *crit, d->m_criteriaList)
pass->addCriterion(qobject_cast<QCriterion *>(crit->clone(pass)));
// TO DO : Make QParameterMapper a QNode
-// Q_FOREACH (QParameterMapper *mapper, d->m_bindings)
-// pass->addBinding(qobject_cast<QParameterMapper *>(mapper->cl));
+ // Q_FOREACH (QParameterMapper *mapper, d->m_bindings)
+ // pass->addBinding(qobject_cast<QParameterMapper *>(mapper->cl));
return pass;
}
@@ -109,21 +109,33 @@ void QRenderPass::addCriterion(QCriterion *criterion)
Q_D(QRenderPass);
if (!d->m_criteriaList.contains(criterion)) {
d->m_criteriaList.append(criterion);
- QScenePropertyChangePtr change(new QScenePropertyChange(ComponentAdded, this));
- change->setPropertyName(QByteArrayLiteral("criterion"));
- change->setValue(QVariant::fromValue(criterion));
- notifyObservers(change);
+
+ // We need to add it as a child of the current node if it has been declared inline
+ // Or not previously added as a child of the current node so that
+ // 1) The backend gets notified about it's creation
+ // 2) When the current node is destroyed, it gets destroyed as well
+ if (!criterion->parent() || criterion->parent() == this)
+ QNode::addChild(criterion);
+
+ if (d->m_changeArbiter != Q_NULLPTR) {
+ QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this));
+ change->setPropertyName(QByteArrayLiteral("criterion"));
+ change->setValue(QVariant::fromValue(criterion));
+ notifyObservers(change);
+ }
}
}
void QRenderPass::removeCriterion(QCriterion *criterion)
{
Q_D(QRenderPass);
+ if (d->m_changeArbiter != Q_NULLPTR) {
+ QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this));
+ change->setPropertyName(QByteArrayLiteral("criterion"));
+ change->setValue(QVariant::fromValue(criterion->uuid()));
+ notifyObservers(change);
+ }
d->m_criteriaList.removeOne(criterion);
- QScenePropertyChangePtr change(new QScenePropertyChange(ComponentAdded, this));
- change->setPropertyName(QByteArrayLiteral("criterion"));
- change->setValue(QVariant::fromValue(criterion->uuid()));
- notifyObservers(change);
}
QList<QCriterion *> QRenderPass::criteria() const