diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-07-30 08:35:44 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-08-14 15:17:41 +0200 |
commit | 4444673206845a81291adf88c26f2a162b4ac6a7 (patch) | |
tree | b2104189bb8bdf97297474cf24e6e60cf8c09f9d /src/render/frontend/qrenderpass.cpp | |
parent | 2b831e7547e8e51f0ce04b5dedf8dc1eaafeef5d (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.cpp | 32 |
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 |