diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-07-31 20:47:53 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-08-09 13:04:51 +0000 |
commit | 91783b495928b5896aa2e4246ea8748b5fd7aaf8 (patch) | |
tree | 4186097c7a25c66f9e005ec27cf43c0bd2b0aded /src/core | |
parent | d6ec5fbc54a1adbfd6b7405c96fc5f7eb88c2480 (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.cpp | 34 | ||||
-rw-r--r-- | src/core/transforms/qabstractskeleton.h | 7 | ||||
-rw-r--r-- | src/core/transforms/qabstractskeleton_p.h | 4 | ||||
-rw-r--r-- | src/core/transforms/qskeletonloader.cpp | 1 |
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 */ |