summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-09-20 07:09:45 +0100
committerMike Krus <mike.krus@kdab.com>2019-09-23 06:27:45 +0100
commit5815bb74788f9c0f355754d6a56cfa527684ea98 (patch)
tree692cfd678d5fe4dc2d727bfb3dba352884400347
parentc7f10617a0be44cf2b61fdc0809fafe7a0aef49a (diff)
Update QChannelMapper to use direct sync
Change-Id: I066b6742cc272155f55322e3aaf73e28980341d0 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/animation/backend/channelmapper.cpp47
-rw-r--r--src/animation/backend/channelmapper_p.h3
-rw-r--r--src/animation/frontend/qanimationaspect.cpp2
-rw-r--r--src/animation/frontend/qchannelmapper.cpp12
-rw-r--r--tests/auto/animation/channelmapper/tst_channelmapper.cpp34
5 files changed, 34 insertions, 64 deletions
diff --git a/src/animation/backend/channelmapper.cpp b/src/animation/backend/channelmapper.cpp
index 48a1335fa..7ea07557b 100644
--- a/src/animation/backend/channelmapper.cpp
+++ b/src/animation/backend/channelmapper.cpp
@@ -36,6 +36,7 @@
#include "channelmapper_p.h"
#include <Qt3DAnimation/qchannelmapper.h>
+#include <Qt3DAnimation/qchannelmapping.h>
#include <Qt3DAnimation/private/qchannelmapper_p.h>
#include <Qt3DAnimation/private/animationlogging_p.h>
#include <Qt3DAnimation/private/managers_p.h>
@@ -43,6 +44,8 @@
#include <Qt3DCore/qpropertynodeaddedchange.h>
#include <Qt3DCore/qpropertynoderemovedchange.h>
+#include <algorithm>
+
QT_BEGIN_NAMESPACE
namespace Qt3DAnimation {
@@ -55,14 +58,6 @@ ChannelMapper::ChannelMapper()
{
}
-void ChannelMapper::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change)
-{
- const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QChannelMapperData>>(change);
- const auto &data = typedChange->data;
- m_mappingIds = data.mappingIds;
- m_isDirty = true;
-}
-
void ChannelMapper::cleanup()
{
setEnabled(false);
@@ -71,33 +66,21 @@ void ChannelMapper::cleanup()
m_isDirty = true;
}
-void ChannelMapper::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
+void ChannelMapper::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime)
{
- switch (e->type()) {
- case Qt3DCore::PropertyValueAdded: {
- const auto change = qSharedPointerCast<Qt3DCore::QPropertyNodeAddedChange>(e);
- if (change->propertyName() == QByteArrayLiteral("mappings")) {
- m_mappingIds.push_back(change->addedNodeId());
- setDirty(Handler::ChannelMappingsDirty);
- m_isDirty = true;
- }
- break;
- }
-
- case Qt3DCore::PropertyValueRemoved: {
- const auto change = qSharedPointerCast<Qt3DCore::QPropertyNodeRemovedChange>(e);
- if (change->propertyName() == QByteArrayLiteral("mappings")) {
- m_mappingIds.removeOne(change->removedNodeId());
- setDirty(Handler::ChannelMappingsDirty);
- m_isDirty = true;
- }
- break;
- }
+ BackendNode::syncFromFrontEnd(frontEnd, firstTime);
+ const QChannelMapper *node = qobject_cast<const QChannelMapper *>(frontEnd);
+ if (!node)
+ return;
- default:
- break;
+ auto ids = Qt3DCore::qIdsForNodes(node->mappings());
+ std::sort(std::begin(ids), std::end(ids));
+ m_isDirty = firstTime;
+ if (m_mappingIds != ids) {
+ m_mappingIds = ids;
+ setDirty(Handler::ChannelMappingsDirty);
+ m_isDirty = true;
}
- QBackendNode::sceneChangeEvent(e);
}
void ChannelMapper::updateMappings() const
diff --git a/src/animation/backend/channelmapper_p.h b/src/animation/backend/channelmapper_p.h
index fd99c8dbd..45a3e789e 100644
--- a/src/animation/backend/channelmapper_p.h
+++ b/src/animation/backend/channelmapper_p.h
@@ -69,7 +69,7 @@ public:
void cleanup();
- void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override;
+ void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override;
void setMappingIds(const QVector<Qt3DCore::QNodeId> &mappingIds) { m_mappingIds = mappingIds; }
QVector<Qt3DCore::QNodeId> mappingIds() const { return m_mappingIds; }
@@ -82,7 +82,6 @@ public:
}
private:
- void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final;
void updateMappings() const;
QVector<Qt3DCore::QNodeId> m_mappingIds;
diff --git a/src/animation/frontend/qanimationaspect.cpp b/src/animation/frontend/qanimationaspect.cpp
index c0659a809..744346e1f 100644
--- a/src/animation/frontend/qanimationaspect.cpp
+++ b/src/animation/frontend/qanimationaspect.cpp
@@ -119,7 +119,7 @@ QAnimationAspect::QAnimationAspect(QAnimationAspectPrivate &dd, QObject *parent)
registerBackendType<QAbstractChannelMapping, true>(
QSharedPointer<Animation::NodeFunctor<Animation::ChannelMapping, Animation::ChannelMappingManager>>::create(d->m_handler.data(),
d->m_handler->channelMappingManager()));
- registerBackendType<QChannelMapper>(
+ registerBackendType<QChannelMapper, true>(
QSharedPointer<Animation::NodeFunctor<Animation::ChannelMapper, Animation::ChannelMapperManager>>::create(d->m_handler.data(),
d->m_handler->channelMapperManager()));
registerBackendType<QLerpClipBlend, true>(
diff --git a/src/animation/frontend/qchannelmapper.cpp b/src/animation/frontend/qchannelmapper.cpp
index 82ce5ebbe..34b5ffbe6 100644
--- a/src/animation/frontend/qchannelmapper.cpp
+++ b/src/animation/frontend/qchannelmapper.cpp
@@ -87,11 +87,7 @@ void QChannelMapper::addMapping(QAbstractChannelMapping *mapping)
if (!mapping->parent())
mapping->setParent(this);
- if (d->m_changeArbiter != nullptr) {
- const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(id(), mapping);
- change->setPropertyName("mappings");
- d->notifyObservers(change);
- }
+ d->update();
}
}
@@ -99,12 +95,8 @@ void QChannelMapper::removeMapping(QAbstractChannelMapping *mapping)
{
Q_ASSERT(mapping);
Q_D(QChannelMapper);
- if (d->m_changeArbiter != nullptr) {
- const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(id(), mapping);
- change->setPropertyName("mappings");
- d->notifyObservers(change);
- }
d->m_mappings.removeOne(mapping);
+ d->update();
// Remove bookkeeping connection
d->unregisterDestructionHelper(mapping);
}
diff --git a/tests/auto/animation/channelmapper/tst_channelmapper.cpp b/tests/auto/animation/channelmapper/tst_channelmapper.cpp
index 446e1a0c5..2dfa07a43 100644
--- a/tests/auto/animation/channelmapper/tst_channelmapper.cpp
+++ b/tests/auto/animation/channelmapper/tst_channelmapper.cpp
@@ -60,7 +60,7 @@ private Q_SLOTS:
mapper.addMapping(new Qt3DAnimation::QChannelMapping);
// WHEN
- simulateInitialization(&mapper, &backendMapper);
+ simulateInitializationSync(&mapper, &backendMapper);
// THEN
QCOMPARE(backendMapper.peerId(), mapper.id());
@@ -90,7 +90,7 @@ private Q_SLOTS:
mapper.addMapping(new Qt3DAnimation::QChannelMapping());
// WHEN
- simulateInitialization(&mapper, &backendMapper);
+ simulateInitializationSync(&mapper, &backendMapper);
backendMapper.cleanup();
// THEN
@@ -101,19 +101,18 @@ private Q_SLOTS:
void checkPropertyChanges()
{
// GIVEN
+ Qt3DAnimation::QChannelMapper mapper;
Qt3DAnimation::Animation::Handler handler;
Qt3DAnimation::Animation::ChannelMapper backendMapper;
backendMapper.setHandler(&handler);
- Qt3DCore::QPropertyUpdatedChangePtr updateChange;
+ simulateInitializationSync(&mapper, &backendMapper);
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("enabled");
- updateChange->setValue(true);
- backendMapper.sceneChangeEvent(updateChange);
+ mapper.setEnabled(false);
+ backendMapper.syncFromFrontEnd(&mapper, false);
// THEN
- QCOMPARE(backendMapper.isEnabled(), true);
+ QCOMPARE(backendMapper.isEnabled(), false);
// WHEN
Qt3DAnimation::QChannelMapping mapping;
@@ -121,11 +120,10 @@ private Q_SLOTS:
Qt3DAnimation::Animation::ChannelMapping *backendMapping
= handler.channelMappingManager()->getOrCreateResource(mappingId);
backendMapping->setHandler(&handler);
- simulateInitialization(&mapping, backendMapping);
+ simulateInitializationSync(&mapping, backendMapping);
- auto nodeAddedChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &mapping);
- nodeAddedChange->setPropertyName("mappings");
- backendMapper.sceneChangeEvent(nodeAddedChange);
+ mapper.addMapping(&mapping);
+ backendMapper.syncFromFrontEnd(&mapper, false);
// THEN
QCOMPARE(backendMapper.mappingIds().size(), 1);
@@ -139,11 +137,10 @@ private Q_SLOTS:
Qt3DAnimation::Animation::ChannelMapping *backendMapping2
= handler.channelMappingManager()->getOrCreateResource(mappingId2);
backendMapping2->setHandler(&handler);
- simulateInitialization(&mapping2, backendMapping2);
+ simulateInitializationSync(&mapping2, backendMapping2);
- nodeAddedChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &mapping2);
- nodeAddedChange->setPropertyName("mappings");
- backendMapper.sceneChangeEvent(nodeAddedChange);
+ mapper.addMapping(&mapping2);
+ backendMapper.syncFromFrontEnd(&mapper, false);
// THEN
QCOMPARE(backendMapper.mappingIds().size(), 2);
@@ -154,9 +151,8 @@ private Q_SLOTS:
QCOMPARE(backendMapper.mappings().last(), backendMapping2);
// WHEN
- const auto nodeRemovedChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &mapping);
- nodeRemovedChange->setPropertyName("mappings");
- backendMapper.sceneChangeEvent(nodeRemovedChange);
+ mapper.removeMapping(&mapping);
+ backendMapper.syncFromFrontEnd(&mapper, false);
// THEN
QCOMPARE(backendMapper.mappingIds().size(), 1);