summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2017-04-05 16:10:59 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-04-11 09:27:28 +0000
commite8c351478fe9f2b8bb5381480fbb3637855f145e (patch)
treeab90bd9d6edd14c49797efe28e3d778b7007b289
parentda71fc62cd84053ec033a468902e52f8e8632c49 (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.cpp30
-rw-r--r--src/animation/backend/animationcliploader_p.h3
-rw-r--r--src/animation/frontend/qanimationclip.cpp2
-rw-r--r--src/animation/frontend/qanimationclip_p.h2
-rw-r--r--src/animation/frontend/qanimationclipdata.cpp7
-rw-r--r--src/animation/frontend/qanimationclipdata.h2
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;