summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2017-07-31 20:47:53 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-08-09 13:04:51 +0000
commit91783b495928b5896aa2e4246ea8748b5fd7aaf8 (patch)
tree4186097c7a25c66f9e005ec27cf43c0bd2b0aded /src/core
parentd6ec5fbc54a1adbfd6b7405c96fc5f7eb88c2480 (diff)
Add jointCount property to QAbstractSkeleton
Set this from the backend when a skeleton is loaded. Change-Id: I752670b93b6ae1fad70534b5f8983ae2ca86fd78 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/transforms/qabstractskeleton.cpp34
-rw-r--r--src/core/transforms/qabstractskeleton.h7
-rw-r--r--src/core/transforms/qabstractskeleton_p.h4
-rw-r--r--src/core/transforms/qskeletonloader.cpp1
4 files changed, 46 insertions, 0 deletions
diff --git a/src/core/transforms/qabstractskeleton.cpp b/src/core/transforms/qabstractskeleton.cpp
index 289f3749d..d780987ee 100644
--- a/src/core/transforms/qabstractskeleton.cpp
+++ b/src/core/transforms/qabstractskeleton.cpp
@@ -39,6 +39,7 @@
#include "qabstractskeleton.h"
#include "qabstractskeleton_p.h"
+#include <Qt3DCore/qpropertyupdatedchange.h>
QT_BEGIN_NAMESPACE
@@ -46,6 +47,7 @@ namespace Qt3DCore {
QAbstractSkeletonPrivate::QAbstractSkeletonPrivate()
: Qt3DCore::QNodePrivate()
+ , m_jointCount(0)
{
}
@@ -95,6 +97,38 @@ QAbstractSkeleton::~QAbstractSkeleton()
{
}
+/*!
+ \property Qt3DCore::QAbstractSkeleton::jointCount
+
+ Holds the number of joints contained in the skeleton
+*/
+int QAbstractSkeleton::jointCount() const
+{
+ Q_D(const QAbstractSkeleton);
+ return d->m_jointCount;
+}
+
+void QAbstractSkeletonPrivate::setJointCount(int jointCount)
+{
+ Q_Q(QAbstractSkeleton);
+ if (m_jointCount == jointCount)
+ return;
+ m_jointCount = jointCount;
+ const bool block = q->blockNotifications(true);
+ emit q->jointCountChanged(jointCount);
+ q->blockNotifications(block);
+}
+
+void QAbstractSkeleton::sceneChangeEvent(const QSceneChangePtr &change)
+{
+ Q_D(QAbstractSkeleton);
+ if (change->type() == Qt3DCore::PropertyUpdated) {
+ const Qt3DCore::QPropertyUpdatedChangePtr e = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(change);
+ if (e->propertyName() == QByteArrayLiteral("jointCount"))
+ d->setJointCount(e->value().toInt());
+ }
+}
+
} // namespace Qt3DCore
QT_END_NAMESPACE
diff --git a/src/core/transforms/qabstractskeleton.h b/src/core/transforms/qabstractskeleton.h
index 3dbf37bed..3fc13fb70 100644
--- a/src/core/transforms/qabstractskeleton.h
+++ b/src/core/transforms/qabstractskeleton.h
@@ -52,12 +52,19 @@ class QAbstractSkeletonPrivate;
class QT3DCORESHARED_EXPORT QAbstractSkeleton : public Qt3DCore::QNode
{
Q_OBJECT
+ Q_PROPERTY(int jointCount READ jointCount NOTIFY jointCountChanged)
public:
~QAbstractSkeleton();
+ int jointCount() const;
+
+Q_SIGNALS:
+ void jointCountChanged(int jointCount);
+
protected:
QAbstractSkeleton(QAbstractSkeletonPrivate &dd, Qt3DCore::QNode *parent = nullptr);
+ void sceneChangeEvent(const QSceneChangePtr &change) override;
private:
Q_DECLARE_PRIVATE(QAbstractSkeleton)
diff --git a/src/core/transforms/qabstractskeleton_p.h b/src/core/transforms/qabstractskeleton_p.h
index e116b3f63..51d57f8c4 100644
--- a/src/core/transforms/qabstractskeleton_p.h
+++ b/src/core/transforms/qabstractskeleton_p.h
@@ -63,10 +63,14 @@ class QAbstractSkeletonPrivate : public Qt3DCore::QNodePrivate
public:
QAbstractSkeletonPrivate();
+ void setJointCount(int jointCount);
+
Q_DECLARE_PUBLIC(QAbstractSkeleton)
static const QAbstractSkeletonPrivate *get(const QAbstractSkeleton *q);
QSkeletonCreatedChangeBase::SkeletonType m_type;
+
+ int m_jointCount;
};
} // namespace Qt3DCore
diff --git a/src/core/transforms/qskeletonloader.cpp b/src/core/transforms/qskeletonloader.cpp
index be4fb6203..d069a2a0b 100644
--- a/src/core/transforms/qskeletonloader.cpp
+++ b/src/core/transforms/qskeletonloader.cpp
@@ -187,6 +187,7 @@ void QSkeletonLoader::sceneChangeEvent(const QSceneChangePtr &change)
if (e->propertyName() == QByteArrayLiteral("status"))
d->setStatus(static_cast<QSkeletonLoader::Status>(e->value().toInt()));
}
+ QAbstractSkeleton::sceneChangeEvent(change);
}
/*! \internal */