summaryrefslogtreecommitdiffstats
path: root/src/render/geometry
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2016-04-24 09:37:45 +0100
committerSean Harmer <sean.harmer@kdab.com>2016-04-27 11:19:52 +0000
commitc620bbc80513fac7f7fcf354c49c1197bde5f1c2 (patch)
tree25fd07348971530f8f36c2db54fa1e5540b9805e /src/render/geometry
parent64fd989313baaa6dc10185af3d298869a0794670 (diff)
GeometryRenderer use new added/removed change types
I think it may be possible to avoid this for single value QNode* properties and just rely upon the automatic notifications done by QNodePrivate. Needs investigating and testing. Change-Id: Id978e8501dc229ba4eb73a5be3b3480b967562b0 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/geometry')
-rw-r--r--src/render/geometry/geometryrenderer.cpp22
-rw-r--r--src/render/geometry/qgeometryrenderer.cpp10
2 files changed, 16 insertions, 16 deletions
diff --git a/src/render/geometry/geometryrenderer.cpp b/src/render/geometry/geometryrenderer.cpp
index 7a07102eb..e396cdf6e 100644
--- a/src/render/geometry/geometryrenderer.cpp
+++ b/src/render/geometry/geometryrenderer.cpp
@@ -38,12 +38,14 @@
****************************************************************************/
#include "geometryrenderer_p.h"
-#include <Qt3DCore/private/qnode_p.h>
-#include <Qt3DCore/qnodepropertychange.h>
#include <Qt3DRender/private/geometryrenderermanager_p.h>
-#include <Qt3DCore/qbackendnodepropertychange.h>
#include <Qt3DRender/private/qboundingvolume_p.h>
#include <Qt3DRender/private/qgeometryrenderer_p.h>
+#include <Qt3DCore/qbackendnodepropertychange.h>
+#include <Qt3DCore/qnodepropertychange.h>
+#include <Qt3DCore/qnodeaddedpropertychange.h>
+#include <Qt3DCore/qnoderemovedpropertychange.h>
+#include <Qt3DCore/private/qnode_p.h>
QT_BEGIN_NAMESPACE
@@ -178,21 +180,17 @@ void GeometryRenderer::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
}
case NodeAdded: {
- QNodePropertyChangePtr propertyChange = qSharedPointerCast<QNodePropertyChange>(e);
- QByteArray propertyName = propertyChange->propertyName();
-
- if (propertyName == QByteArrayLiteral("geometry")) {
- m_geometryId = propertyChange->value().value<QNodeId>();
+ const auto change = qSharedPointerCast<QNodeAddedPropertyChange>(e);
+ if (change->propertyName() == QByteArrayLiteral("geometry")) {
+ m_geometryId = change->addedNodeId();
m_dirty = true;
}
break;
}
case NodeRemoved: {
- QNodePropertyChangePtr propertyChange = qSharedPointerCast<QNodePropertyChange>(e);
- QByteArray propertyName = propertyChange->propertyName();
-
- if (propertyName == QByteArrayLiteral("geometry")) {
+ const auto change = qSharedPointerCast<QNodeAddedPropertyChange>(e);
+ if (change->propertyName() == QByteArrayLiteral("geometry")) {
m_geometryId = QNodeId();
m_dirty = true;
}
diff --git a/src/render/geometry/qgeometryrenderer.cpp b/src/render/geometry/qgeometryrenderer.cpp
index 1dc654aa6..aa6d96043 100644
--- a/src/render/geometry/qgeometryrenderer.cpp
+++ b/src/render/geometry/qgeometryrenderer.cpp
@@ -42,6 +42,8 @@
#include <private/qcomponent_p.h>
#include <Qt3DCore/qnodepropertychange.h>
+#include <Qt3DCore/qnodeaddedpropertychange.h>
+#include <Qt3DCore/qnoderemovedpropertychange.h>
QT_BEGIN_NAMESPACE
@@ -349,10 +351,11 @@ void QGeometryRenderer::setGeometry(QGeometry *geometry)
if (d->m_geometry == geometry)
return;
+ // TODO: Investigate if we can rely upon the automatic property change notifications
+ // rather than having to manually send a NodeRemoved followed by a NodeAdded change.
if (d->m_geometry && d->m_changeArbiter) {
- QNodePropertyChangePtr change(new QNodePropertyChange(NodeRemoved, QSceneChange::Node, id()));
+ const auto change = QNodeRemovedPropertyChangePtr::create(id(), d->m_geometry->id());
change->setPropertyName("geometry");
- change->setValue(QVariant::fromValue(d->m_geometry->id()));
d->notifyObservers(change);
}
@@ -365,9 +368,8 @@ void QGeometryRenderer::setGeometry(QGeometry *geometry)
blockNotifications(blocked);
if (d->m_geometry && d->m_changeArbiter) {
- QNodePropertyChangePtr change(new QNodePropertyChange(NodeAdded, QSceneChange::Node, id()));
+ const auto change = QNodeAddedPropertyChangePtr::create(id(), d->m_geometry->id());
change->setPropertyName("geometry");
- change->setValue(QVariant::fromValue(d->m_geometry->id()));
d->notifyObservers(change);
}
}