diff options
Diffstat (limited to 'src/core/transforms/qskeletonloader.cpp')
-rw-r--r-- | src/core/transforms/qskeletonloader.cpp | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/src/core/transforms/qskeletonloader.cpp b/src/core/transforms/qskeletonloader.cpp index d5296ecc9..b1a311a0c 100644 --- a/src/core/transforms/qskeletonloader.cpp +++ b/src/core/transforms/qskeletonloader.cpp @@ -68,6 +68,27 @@ void QSkeletonLoaderPrivate::setStatus(QSkeletonLoader::Status status) } } +void QSkeletonLoaderPrivate::setRootJoint(QJoint *rootJoint) +{ + Q_Q(QSkeletonLoader); + if (rootJoint == m_rootJoint) + return; + + if (m_rootJoint) + unregisterDestructionHelper(m_rootJoint); + + if (rootJoint && !rootJoint->parent()) + rootJoint->setParent(q); + + m_rootJoint = rootJoint; + + // Ensures proper bookkeeping + if (m_rootJoint) + registerPrivateDestructionHelper(m_rootJoint, &QSkeletonLoaderPrivate::setRootJoint); + + emit q->rootJointChanged(m_rootJoint); +} + /*! \qmltype SkeletonLoader \inqmlmodule Qt3D.Core @@ -217,39 +238,12 @@ void QSkeletonLoader::setCreateJointsEnabled(bool createJoints) void QSkeletonLoader::setRootJoint(QJoint *rootJoint) { Q_D(QSkeletonLoader); - if (rootJoint == d->m_rootJoint) - return; - - if (d->m_rootJoint) - d->unregisterDestructionHelper(d->m_rootJoint); - - if (rootJoint && !rootJoint->parent()) - rootJoint->setParent(this); - - d->m_rootJoint = rootJoint; - - // Ensures proper bookkeeping - if (d->m_rootJoint) - d->registerDestructionHelper(d->m_rootJoint, &QSkeletonLoader::setRootJoint, d->m_rootJoint); - - emit rootJointChanged(d->m_rootJoint); + d->setRootJoint(rootJoint); } /*! \internal */ void QSkeletonLoader::sceneChangeEvent(const QSceneChangePtr &change) { - Q_D(QSkeletonLoader); - if (change->type() == Qt3DCore::PropertyUpdated) { - auto propertyChange = qSharedPointerCast<QStaticPropertyUpdatedChangeBase>(change); - if (propertyChange->propertyName() == QByteArrayLiteral("status")) { - const auto e = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(change); - d->setStatus(static_cast<QSkeletonLoader::Status>(e->value().toInt())); - } else if (propertyChange->propertyName() == QByteArrayLiteral("rootJoint")) { - auto typedChange = qSharedPointerCast<QJointChange>(propertyChange); - auto rootJoint = std::move(typedChange->data); - setRootJoint(rootJoint.release()); - } - } QAbstractSkeleton::sceneChangeEvent(change); } |