diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-09-19 14:46:09 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-09-20 08:18:33 +0100 |
commit | 7ec980c9487fc046ef8bfa2220c149442f9d9aab (patch) | |
tree | 8aaa99935e24f6b0e507afc955ed7f81d9ed62b8 /src/animation | |
parent | 577defa7b0664ca547ef6708a9e0b832670aec78 (diff) |
Update QAnimationClip (and Loader) to use direct sync
Change-Id: I22713a75f59075b1fe997405ad770f3a95ec37ac
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/animation')
-rw-r--r-- | src/animation/backend/animationclip.cpp | 61 | ||||
-rw-r--r-- | src/animation/backend/animationclip_p.h | 3 | ||||
-rw-r--r-- | src/animation/frontend/qanimationaspect.cpp | 2 |
3 files changed, 25 insertions, 41 deletions
diff --git a/src/animation/backend/animationclip.cpp b/src/animation/backend/animationclip.cpp index 3e0b8ce2b..690972075 100644 --- a/src/animation/backend/animationclip.cpp +++ b/src/animation/backend/animationclip.cpp @@ -72,29 +72,6 @@ AnimationClip::AnimationClip() { } -void AnimationClip::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) -{ - const auto loaderTypedChange = qSharedPointerDynamicCast<Qt3DCore::QNodeCreatedChange<QAnimationClipLoaderData>>(change); - if (loaderTypedChange) { - const auto &data = loaderTypedChange->data; - m_dataType = File; - m_source = data.source; - if (!m_source.isEmpty()) - setDirty(Handler::AnimationClipDirty); - return; - } - - const auto clipTypedChange = qSharedPointerDynamicCast<Qt3DCore::QNodeCreatedChange<QAnimationClipChangeData>>(change); - if (clipTypedChange) { - const auto &data = clipTypedChange->data; - m_dataType = Data; - m_clipData = data.clipData; - if (m_clipData.isValid()) - setDirty(Handler::AnimationClipDirty); - return; - } -} - void AnimationClip::cleanup() { setEnabled(false); @@ -121,28 +98,36 @@ void AnimationClip::setStatus(QAnimationClipLoader::Status status) } } -void AnimationClip::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) +void AnimationClip::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { - switch (e->type()) { - case Qt3DCore::PropertyUpdated: { - const auto change = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(e); - if (change->propertyName() == QByteArrayLiteral("source")) { - Q_ASSERT(m_dataType == File); - m_source = change->value().toUrl(); - setDirty(Handler::AnimationClipDirty); - } else if (change->propertyName() == QByteArrayLiteral("clipData")) { - Q_ASSERT(m_dataType == Data); - m_clipData = change->value().value<Qt3DAnimation::QAnimationClipData>(); + BackendNode::syncFromFrontEnd(frontEnd, firstTime); + const QAbstractAnimationClip *node = qobject_cast<const QAbstractAnimationClip *>(frontEnd); + if (!node) + return; + + const QAnimationClip *clipNode = qobject_cast<const QAnimationClip *>(frontEnd); + if (clipNode) { + if (firstTime) + m_dataType = Data; + Q_ASSERT(m_dataType == Data); + if (m_clipData != clipNode->clipData()) { + m_clipData = clipNode->clipData(); if (m_clipData.isValid()) setDirty(Handler::AnimationClipDirty); } - break; } - default: - break; + const QAnimationClipLoader *loaderNode = qobject_cast<const QAnimationClipLoader *>(frontEnd); + if (loaderNode) { + if (firstTime) + m_dataType = File; + Q_ASSERT(m_dataType == File); + if (m_source != loaderNode->source()) { + m_source = loaderNode->source(); + if (m_clipData.isValid()) + setDirty(Handler::AnimationClipDirty); + } } - QBackendNode::sceneChangeEvent(e); } /*! diff --git a/src/animation/backend/animationclip_p.h b/src/animation/backend/animationclip_p.h index 0b8298723..22f589f72 100644 --- a/src/animation/backend/animationclip_p.h +++ b/src/animation/backend/animationclip_p.h @@ -72,7 +72,7 @@ public: QUrl source() const { return m_source; } void setStatus(QAnimationClipLoader::Status status); QAnimationClipLoader::Status status() const { return m_status; } - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; void addDependingClipAnimator(const Qt3DCore::QNodeId &id); void addDependingBlendedClipAnimator(const Qt3DCore::QNodeId &id); @@ -103,7 +103,6 @@ public: #endif private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; void loadAnimationFromUrl(); void loadAnimationFromData(); void clearData(); diff --git a/src/animation/frontend/qanimationaspect.cpp b/src/animation/frontend/qanimationaspect.cpp index b44ceaef4..ad0929284 100644 --- a/src/animation/frontend/qanimationaspect.cpp +++ b/src/animation/frontend/qanimationaspect.cpp @@ -104,7 +104,7 @@ QAnimationAspect::QAnimationAspect(QAnimationAspectPrivate &dd, QObject *parent) qRegisterMetaType<QVector<Qt3DCore::Sqt>>(); qRegisterMetaType<Qt3DAnimation::QAbstractAnimationClip*>(); - registerBackendType<QAbstractAnimationClip>( + registerBackendType<QAbstractAnimationClip, true>( QSharedPointer<Animation::NodeFunctor<Animation::AnimationClip, Animation::AnimationClipLoaderManager>>::create(d->m_handler.data(), d->m_handler->animationClipLoaderManager())); registerBackendType<QClock>( |