diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-04-10 09:42:51 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-04-12 16:19:55 +0000 |
commit | 7f92abdd1492560bca7b8f95dbedc1514e5a1a54 (patch) | |
tree | 42393e9180d949a713b627917d6e9df55c514c5a /src/core/aspects/qabstractaspect.cpp | |
parent | 15b1a1ba41bda22b624d806cadd6873be8403097 (diff) |
Add branches to optionally use the no cloning approach in aspects
For creating/destroying nodes dynamically.
Change-Id: I6328bc2f71d30c43b54f10a8f5667c3ac70f0153
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core/aspects/qabstractaspect.cpp')
-rw-r--r-- | src/core/aspects/qabstractaspect.cpp | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp index b5712a33a..12dcb33e1 100644 --- a/src/core/aspects/qabstractaspect.cpp +++ b/src/core/aspects/qabstractaspect.cpp @@ -122,21 +122,31 @@ void QAbstractAspect::registerBackendType(const QMetaObject &obj, const QBackend d->m_backendCreatorFunctors.insert(&obj, functor); } -void QAbstractAspectPrivate::sceneNodeAdded(QSceneChangePtr &e) +void QAbstractAspectPrivate::sceneNodeAdded(QSceneChangePtr &change) { - QScenePropertyChangePtr propertyChange = e.staticCast<QScenePropertyChange>(); - QNodePtr nodePtr = propertyChange->value().value<QNodePtr>(); - QNode *n = nodePtr.data(); - QNodeVisitor visitor; - visitor.traverse(n, this, &QAbstractAspectPrivate::createBackendNode); + if (m_useCloning) { + QScenePropertyChangePtr propertyChange = change.staticCast<QScenePropertyChange>(); + QNodePtr nodePtr = propertyChange->value().value<QNodePtr>(); + QNode *n = nodePtr.data(); + QNodeVisitor visitor; + visitor.traverse(n, this, &QAbstractAspectPrivate::createBackendNode); + } else { + QNodeCreatedChangeBasePtr creationChange = qSharedPointerCast<QNodeCreatedChangeBase>(change); + createBackendNodeNoClone(creationChange); + } } -void QAbstractAspectPrivate::sceneNodeRemoved(QSceneChangePtr &e) +void QAbstractAspectPrivate::sceneNodeRemoved(QSceneChangePtr &change) { - QScenePropertyChangePtr propertyChange = e.staticCast<QScenePropertyChange>(); - QNodePtr nodePtr = propertyChange->value().value<QNodePtr>(); - QNode *n = nodePtr.data(); - clearBackendNode(n); + if (m_useCloning) { + QScenePropertyChangePtr propertyChange = change.staticCast<QScenePropertyChange>(); + QNodePtr nodePtr = propertyChange->value().value<QNodePtr>(); + QNode *n = nodePtr.data(); + clearBackendNode(n); + } else { + QNodeDestroyedChangePtr destructionChange = qSharedPointerCast<QNodeDestroyedChange>(change); + clearBackendNodeNoClone(destructionChange); + } } QVariant QAbstractAspect::executeCommand(const QStringList &args) |