diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-01-14 16:37:49 +0000 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-01-25 09:22:07 +0000 |
commit | 4f6bf6d53c50221977d3f6e2c04ced70d815e6ac (patch) | |
tree | 403e0f3f2b52dc72cc161ba9eedacfa1f132e4c9 /src/animation | |
parent | 1ed4f9d68bc2e02a761eff77552fa05a1583d84b (diff) |
Add in the usual plumbing and register QAnimationClip
Change-Id: I7bbfb9e282f1a59cbb7f211dd5cebff8e30f3779
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/animation')
-rw-r--r-- | src/animation/backend/animationclip.cpp | 2 | ||||
-rw-r--r-- | src/animation/backend/animationclip_p.h | 5 | ||||
-rw-r--r-- | src/animation/backend/backend.pri | 9 | ||||
-rw-r--r-- | src/animation/backend/handle_types_p.h | 70 | ||||
-rw-r--r-- | src/animation/backend/handler.cpp | 65 | ||||
-rw-r--r-- | src/animation/backend/handler_p.h | 92 | ||||
-rw-r--r-- | src/animation/backend/managers_p.h | 82 | ||||
-rw-r--r-- | src/animation/backend/nodefunctor_p.h | 101 | ||||
-rw-r--r-- | src/animation/frontend/qanimationaspect.cpp | 15 | ||||
-rw-r--r-- | src/animation/frontend/qanimationaspect_p.h | 6 |
10 files changed, 442 insertions, 5 deletions
diff --git a/src/animation/backend/animationclip.cpp b/src/animation/backend/animationclip.cpp index 003f09e32..d5244e8c5 100644 --- a/src/animation/backend/animationclip.cpp +++ b/src/animation/backend/animationclip.cpp @@ -46,6 +46,7 @@ namespace Animation { AnimationClip::AnimationClip() : Qt3DCore::QBackendNode(ReadOnly) + , m_handler(nullptr) , m_source() { } @@ -60,6 +61,7 @@ void AnimationClip::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr void AnimationClip::cleanup() { setEnabled(false); + m_handler = nullptr; m_source.clear(); } diff --git a/src/animation/backend/animationclip_p.h b/src/animation/backend/animationclip_p.h index cf8c653d4..9a2da5ed0 100644 --- a/src/animation/backend/animationclip_p.h +++ b/src/animation/backend/animationclip_p.h @@ -56,6 +56,8 @@ QT_BEGIN_NAMESPACE namespace Qt3DAnimation { namespace Animation { +class Handler; + class Q_AUTOTEST_EXPORT AnimationClip : public Qt3DCore::QBackendNode { public: @@ -66,9 +68,12 @@ public: QUrl source() const { return m_source; } void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE; + void setHandler(Handler *handler) { m_handler = handler; } + private: void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL; + Handler *m_handler; QUrl m_source; }; diff --git a/src/animation/backend/backend.pri b/src/animation/backend/backend.pri index a28e7f42e..41857c253 100644 --- a/src/animation/backend/backend.pri +++ b/src/animation/backend/backend.pri @@ -2,7 +2,12 @@ INCLUDEPATH += $$PWD HEADERS += \ - $$PWD/animationclip_p.h + $$PWD/animationclip_p.h \ + $$PWD/handle_types_p.h \ + $$PWD/handler_p.h \ + $$PWD/nodefunctor_p.h \ + $$PWD/managers_p.h SOURCES += \ - $$PWD/animationclip.cpp + $$PWD/animationclip.cpp \ + $$PWD/handler.cpp diff --git a/src/animation/backend/handle_types_p.h b/src/animation/backend/handle_types_p.h new file mode 100644 index 000000000..874b197a9 --- /dev/null +++ b/src/animation/backend/handle_types_p.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT3DANIMATION_ANIMATION_HANDLE_TYPES_P_H +#define QT3DANIMATION_ANIMATION_HANDLE_TYPES_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <Qt3DCore/private/qhandle_p.h> + +QT_BEGIN_NAMESPACE + +namespace Qt3DAnimation { +namespace Animation { + +class AnimationClip; + +typedef Qt3DCore::QHandle<AnimationClip, 16> HAnimationClip; + +} // namespace Animation +} // namespace Qt3DAnimation + +QT_END_NAMESPACE + +#endif // QT3DANIMATION_ANIMATION_HANDLE_TYPES_P_H diff --git a/src/animation/backend/handler.cpp b/src/animation/backend/handler.cpp new file mode 100644 index 000000000..3a6f9d590 --- /dev/null +++ b/src/animation/backend/handler.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "handler_p.h" +#include <Qt3DAnimation/private/managers_p.h> + + +QT_BEGIN_NAMESPACE + +namespace Qt3DAnimation { +namespace Animation { + +Handler::Handler() + : m_animationClipManager(new AnimationClipManager) +{ +} + +Handler::~Handler() +{ +} + +QVector<Qt3DCore::QAspectJobPtr> Handler::jobsToExecute(qint64 time) +{ + Q_UNUSED(time); + QVector<Qt3DCore::QAspectJobPtr> jobs; + return jobs; +} + +} // namespace Animation +} // namespace Qt3DAnimation + +QT_END_NAMESPACE diff --git a/src/animation/backend/handler_p.h b/src/animation/backend/handler_p.h new file mode 100644 index 000000000..164494c0e --- /dev/null +++ b/src/animation/backend/handler_p.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT3DANIMATION_ANIMATION_HANDLER_H +#define QT3DANIMATION_ANIMATION_HANDLER_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtGlobal> +#include <Qt3DAnimation/private/handle_types_p.h> +#include <Qt3DCore/qaspectjob.h> +#include <Qt3DCore/qnodeid.h> +#include <QtCore/qscopedpointer.h> + +QT_BEGIN_NAMESPACE + +#if defined(QT_BUILD_INTERNAL) +class tst_Handler; +#endif + +namespace Qt3DAnimation { +namespace Animation { + +class AnimationClip; +class AnimationClipManager; + +class Q_AUTOTEST_EXPORT Handler +{ +public: + Handler(); + ~Handler(); + + AnimationClipManager *animationClipManager() const Q_DECL_NOTHROW { return m_animationClipManager.data(); } + + QVector<Qt3DCore::QAspectJobPtr> jobsToExecute(qint64 time); + +private: + QScopedPointer<AnimationClipManager> m_animationClipManager; + +#if defined(QT_BUILD_INTERNAL) + friend class QT_PREPEND_NAMESPACE(tst_Handler); +#endif +}; + +} // namespace Animation +} // namespace Qt3DAnimation + +QT_END_NAMESPACE + +#endif // QT3DANIMATION_ANIMATION_HANDLER_H diff --git a/src/animation/backend/managers_p.h b/src/animation/backend/managers_p.h new file mode 100644 index 000000000..c13fd18ac --- /dev/null +++ b/src/animation/backend/managers_p.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT3DANIMATION_ANIMATION_MANAGERS_P_H +#define QT3DANIMATION_ANIMATION_MANAGERS_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtGlobal> +#include <Qt3DAnimation/private/handle_types_p.h> +#include <Qt3DAnimation/private/animationclip_p.h> + +#include <Qt3DCore/private/qresourcemanager_p.h> + +QT_BEGIN_NAMESPACE + +namespace Qt3DAnimation { +namespace Animation { + +class AnimationClipManager : public Qt3DCore::QResourceManager< + AnimationClip, + Qt3DCore::QNodeId, + 16, + Qt3DCore::ArrayAllocatingPolicy> +{ +public: + AnimationClipManager() {} +}; + +} // namespace Animation +} // namespace Qt3DAnimation + +Q_DECLARE_RESOURCE_INFO(Qt3DAnimation::Animation::AnimationClip, Q_REQUIRES_CLEANUP) + +QT_END_NAMESPACE + +#endif // QT3DANIMATION_ANIMATION_MANAGERS_P_H diff --git a/src/animation/backend/nodefunctor_p.h b/src/animation/backend/nodefunctor_p.h new file mode 100644 index 000000000..5f2bbcc8e --- /dev/null +++ b/src/animation/backend/nodefunctor_p.h @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT3DANIMATION_ANIMATION_NODEFUNCTOR_P_H +#define QT3DANIMATION_ANIMATION_NODEFUNCTOR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <Qt3DCore/qnode.h> +#include <Qt3DCore/qbackendnode.h> + +QT_BEGIN_NAMESPACE + +namespace Qt3DAnimation { +namespace Animation { + +class Handler; + +template<class Backend, class Manager> +class NodeFunctor : public Qt3DCore::QBackendNodeMapper +{ +public: + explicit NodeFunctor(Handler *handler, Manager *manager) + : m_handler(handler) + , m_manager(manager) + { + } + + Qt3DCore::QBackendNode *create(const Qt3DCore::QNodeCreatedChangeBasePtr &change) const Q_DECL_FINAL + { + Backend *backend = m_manager->getOrCreateResource(change->subjectId()); + backend->setHandler(m_handler); + return backend; + } + + Qt3DCore::QBackendNode *get(Qt3DCore::QNodeId id) const Q_DECL_FINAL + { + return m_manager->lookupResource(id); + } + + void destroy(Qt3DCore::QNodeId id) const Q_DECL_FINAL + { + m_manager->releaseResource(id); + } + +private: + Handler *m_handler; + Manager *m_manager; +}; + +} // namespace Animation +} // namespace Qt3DAnimation + +QT_END_NAMESPACE + +#endif // QT3DANIMATION_ANIMATION_NODEFUNCTOR_P_H diff --git a/src/animation/frontend/qanimationaspect.cpp b/src/animation/frontend/qanimationaspect.cpp index e8d5a158a..86fd9bb2b 100644 --- a/src/animation/frontend/qanimationaspect.cpp +++ b/src/animation/frontend/qanimationaspect.cpp @@ -39,6 +39,10 @@ #include "qanimationaspect.h" #include "qanimationaspect_p.h" +#include <Qt3DAnimation/qanimationclip.h> +#include <Qt3DAnimation/private/handler_p.h> +#include <Qt3DAnimation/private/managers_p.h> +#include <Qt3DAnimation/private/nodefunctor_p.h> QT_BEGIN_NAMESPACE @@ -48,6 +52,7 @@ namespace Qt3DAnimation { QAnimationAspectPrivate::QAnimationAspectPrivate() : QAbstractAspectPrivate() + , m_handler(new Animation::Handler) { } @@ -74,6 +79,10 @@ QAnimationAspect::QAnimationAspect(QAnimationAspectPrivate &dd, QObject *parent) : QAbstractAspect(dd, parent) { setObjectName(QStringLiteral("Animation Aspect")); + Q_D(QAnimationAspect); + registerBackendType<QAnimationClip>( + QSharedPointer<Animation::NodeFunctor<Animation::AnimationClip, Animation::AnimationClipManager>>::create(d->m_handler.data(), + d->m_handler->animationClipManager())); } /*! \internal */ @@ -86,9 +95,9 @@ QAnimationAspect::~QAnimationAspect() */ QVector<QAspectJobPtr> QAnimationAspect::jobsToExecute(qint64 time) { - Q_UNUSED(time); - QVector<QAspectJobPtr> jobs; - return jobs; + Q_D(QAnimationAspect); + Q_ASSERT(d->m_handler); + return d->m_handler->jobsToExecute(time); } } // namespace Qt3DAnimation diff --git a/src/animation/frontend/qanimationaspect_p.h b/src/animation/frontend/qanimationaspect_p.h index 43cc314a5..2ecc8fdb8 100644 --- a/src/animation/frontend/qanimationaspect_p.h +++ b/src/animation/frontend/qanimationaspect_p.h @@ -59,12 +59,18 @@ namespace Qt3DAnimation { class QAnimationAspect; +namespace Animation { +class Handler; +} + class QAnimationAspectPrivate : public Qt3DCore::QAbstractAspectPrivate { public: QAnimationAspectPrivate(); Q_DECLARE_PUBLIC(QAnimationAspect) + + QScopedPointer<Animation::Handler> m_handler; }; } // namespace Qt3DAnimation |