diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-04-05 16:10:59 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-04-11 09:27:28 +0000 |
commit | e8c351478fe9f2b8bb5381480fbb3637855f145e (patch) | |
tree | ab90bd9d6edd14c49797efe28e3d778b7007b289 | |
parent | da71fc62cd84053ec033a468902e52f8e8632c49 (diff) |
Start adding support for programmatic clips to the backend node
Change-Id: I7503f87550487528956cd97606a24e25cf2e5144
Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r-- | src/animation/backend/animationcliploader.cpp | 30 | ||||
-rw-r--r-- | src/animation/backend/animationcliploader_p.h | 3 | ||||
-rw-r--r-- | src/animation/frontend/qanimationclip.cpp | 2 | ||||
-rw-r--r-- | src/animation/frontend/qanimationclip_p.h | 2 | ||||
-rw-r--r-- | src/animation/frontend/qanimationclipdata.cpp | 7 | ||||
-rw-r--r-- | src/animation/frontend/qanimationclipdata.h | 2 |
6 files changed, 39 insertions, 7 deletions
diff --git a/src/animation/backend/animationcliploader.cpp b/src/animation/backend/animationcliploader.cpp index 809fbbb69..2ea54acc8 100644 --- a/src/animation/backend/animationcliploader.cpp +++ b/src/animation/backend/animationcliploader.cpp @@ -35,7 +35,9 @@ ****************************************************************************/ #include "animationcliploader_p.h" +#include <Qt3DAnimation/qanimationclip.h> #include <Qt3DAnimation/qanimationcliploader.h> +#include <Qt3DAnimation/private/qanimationclip_p.h> #include <Qt3DAnimation/private/qanimationcliploader_p.h> #include <Qt3DAnimation/private/animationlogging_p.h> #include <Qt3DRender/private/qurlhelper_p.h> @@ -56,6 +58,7 @@ AnimationClipLoader::AnimationClipLoader() : BackendNode(ReadWrite) , m_source() , m_status(QAnimationClipLoader::NotReady) + , m_clipData() , m_name() , m_channels() , m_duration(0.0f) @@ -64,11 +67,23 @@ AnimationClipLoader::AnimationClipLoader() void AnimationClipLoader::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) { - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QAnimationClipLoaderData>>(change); - const auto &data = typedChange->data; - m_source = data.source; - if (!m_source.isEmpty()) - setDirty(Handler::AnimationClipDirty); + const auto loaderTypedChange = qSharedPointerDynamicCast<Qt3DCore::QNodeCreatedChange<QAnimationClipLoaderData>>(change); + if (loaderTypedChange) { + const auto &data = loaderTypedChange->data; + 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_clipData = data.clipData; + if (m_clipData.isValid()) + setDirty(Handler::AnimationClipDirty); + return; + } } void AnimationClipLoader::cleanup() @@ -76,6 +91,7 @@ void AnimationClipLoader::cleanup() setEnabled(false); m_handler = nullptr; m_source.clear(); + m_clipData.clearChannels(); m_status = QAnimationClipLoader::NotReady; m_channels.clear(); m_duration = 0.0f; @@ -103,6 +119,10 @@ void AnimationClipLoader::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) if (change->propertyName() == QByteArrayLiteral("source")) { m_source = change->value().toUrl(); setDirty(Handler::AnimationClipDirty); + } else if (change->propertyName() == QByteArrayLiteral("clipData")) { + m_clipData = change->value().value<Qt3DAnimation::QAnimationClipData>(); + if (m_clipData.isValid()) + setDirty(Handler::AnimationClipDirty); } break; } diff --git a/src/animation/backend/animationcliploader_p.h b/src/animation/backend/animationcliploader_p.h index f8ba72f40..077c543ae 100644 --- a/src/animation/backend/animationcliploader_p.h +++ b/src/animation/backend/animationcliploader_p.h @@ -49,6 +49,7 @@ // #include <Qt3DAnimation/private/backendnode_p.h> +#include <Qt3DAnimation/qanimationclipdata.h> #include <Qt3DAnimation/qanimationcliploader.h> #include <Qt3DAnimation/private/fcurve_p.h> #include <QtCore/qurl.h> @@ -92,6 +93,8 @@ private: QUrl m_source; QAnimationClipLoader::Status m_status; + QAnimationClipData m_clipData; + QString m_name; QVector<Channel> m_channels; float m_duration; diff --git a/src/animation/frontend/qanimationclip.cpp b/src/animation/frontend/qanimationclip.cpp index d9a1eb979..c21d94b02 100644 --- a/src/animation/frontend/qanimationclip.cpp +++ b/src/animation/frontend/qanimationclip.cpp @@ -85,7 +85,7 @@ Qt3DCore::QNodeCreatedChangeBasePtr QAnimationClip::createNodeCreationChange() c auto creationChange = Qt3DCore::QNodeCreatedChangePtr<QAnimationClipChangeData>::create(this); auto &data = creationChange->data; Q_D(const QAnimationClip); - // TODO: Send data members in creation change + data.clipData = d->m_clipData; return creationChange; } diff --git a/src/animation/frontend/qanimationclip_p.h b/src/animation/frontend/qanimationclip_p.h index 490c08a4e..514d568af 100644 --- a/src/animation/frontend/qanimationclip_p.h +++ b/src/animation/frontend/qanimationclip_p.h @@ -70,7 +70,7 @@ public: struct QAnimationClipChangeData { - // TODO: Add members that should be sent to the backend + QAnimationClipData clipData; }; } // namespace Qt3DAnimation diff --git a/src/animation/frontend/qanimationclipdata.cpp b/src/animation/frontend/qanimationclipdata.cpp index 4ae9f36d7..ef3b59012 100644 --- a/src/animation/frontend/qanimationclipdata.cpp +++ b/src/animation/frontend/qanimationclipdata.cpp @@ -109,6 +109,12 @@ void QAnimationClipData::clearChannels() d->m_channels.clear(); } +bool QAnimationClipData::isValid() const Q_DECL_NOTHROW +{ + // TODO: Perform more thorough checks + return !d->m_channels.isEmpty(); +} + QAnimationClipData::const_iterator QAnimationClipData::begin() const Q_DECL_NOTHROW { return d->m_channels.begin(); @@ -119,6 +125,7 @@ QAnimationClipData::const_iterator QAnimationClipData::end() const Q_DECL_NOTHRO return d->m_channels.end(); } + bool operator==(const QAnimationClipData &lhs, const QAnimationClipData &rhs) Q_DECL_NOTHROW { return lhs.d->m_name == rhs.d->m_name && diff --git a/src/animation/frontend/qanimationclipdata.h b/src/animation/frontend/qanimationclipdata.h index 433c80f94..605b17208 100644 --- a/src/animation/frontend/qanimationclipdata.h +++ b/src/animation/frontend/qanimationclipdata.h @@ -68,6 +68,8 @@ public: void removeChannel(int index); void clearChannels(); + bool isValid() const Q_DECL_NOTHROW; + // Iterator API typedef const QChannel *const_iterator; typedef std::reverse_iterator<const_iterator> const_reverse_iterator; |