summaryrefslogtreecommitdiffstats
path: root/src/core/aspects/qabstractaspect.cpp
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2016-04-10 09:42:51 +0100
committerSean Harmer <sean.harmer@kdab.com>2016-04-12 16:19:55 +0000
commit7f92abdd1492560bca7b8f95dbedc1514e5a1a54 (patch)
tree42393e9180d949a713b627917d6e9df55c514c5a /src/core/aspects/qabstractaspect.cpp
parent15b1a1ba41bda22b624d806cadd6873be8403097 (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.cpp32
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)