diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-01-23 10:56:01 +0000 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-01-27 12:34:51 +0000 |
commit | c1e425920331325f889053b921e66ea572234784 (patch) | |
tree | 75c205d117776a55d24be851fee0e40af4bfe3fe /src/quick3d | |
parent | 0070276340e15872362858928d6858ae31e07f7e (diff) |
Add API to map animation channels to properties
Change-Id: I98aecf101eb052979f7a2e98c8bfcf899f27fb02
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/quick3d')
5 files changed, 194 insertions, 0 deletions
diff --git a/src/quick3d/imports/animation/qt3dquick3danimationplugin.cpp b/src/quick3d/imports/animation/qt3dquick3danimationplugin.cpp index efaee2509..537c49b21 100644 --- a/src/quick3d/imports/animation/qt3dquick3danimationplugin.cpp +++ b/src/quick3d/imports/animation/qt3dquick3danimationplugin.cpp @@ -42,7 +42,9 @@ #include <Qt3DAnimation/qblendedclipanimator.h> #include <Qt3DAnimation/qclipanimator.h> #include <Qt3DAnimation/qconductedclipanimator.h> +#include <Qt3DAnimation/qchannelmapping.h> #include <Qt3DQuickAnimation/private/qt3dquickanimation_global_p.h> +#include <Qt3DQuickAnimation/private/quick3dchannelmapper_p.h> QT_BEGIN_NAMESPACE @@ -55,6 +57,9 @@ void Qt3DQuick3DAnimationPlugin::registerTypes(const char *uri) qmlRegisterType<Qt3DAnimation::QClipAnimator>(uri, 2, 2, "ClipAnimator"); qmlRegisterType<Qt3DAnimation::QBlendedClipAnimator>(uri, 2, 2, "BlendedClipAnimator"); qmlRegisterType<Qt3DAnimation::QConductedClipAnimator>(uri, 2, 2, "ConductedClipAnimator"); + qmlRegisterType<Qt3DAnimation::QChannelMapping>(uri, 2, 2, "ChannelMapping"); + qmlRegisterExtendedType<Qt3DAnimation::QChannelMapper, + Qt3DAnimation::Animation::Quick::Quick3DChannelMapper>(uri, 2, 2, "ChannelMapper"); } QT_END_NAMESPACE diff --git a/src/quick3d/quick3danimation/items/items.pri b/src/quick3d/quick3danimation/items/items.pri new file mode 100644 index 000000000..c57a44de8 --- /dev/null +++ b/src/quick3d/quick3danimation/items/items.pri @@ -0,0 +1,7 @@ +SOURCES += \ + $$PWD/quick3dchannelmapper.cpp + +HEADERS += \ + $$PWD/quick3dchannelmapper_p.h + +INCLUDEPATH += $$PWD diff --git a/src/quick3d/quick3danimation/items/quick3dchannelmapper.cpp b/src/quick3d/quick3danimation/items/quick3dchannelmapper.cpp new file mode 100644 index 000000000..55eb04be1 --- /dev/null +++ b/src/quick3d/quick3danimation/items/quick3dchannelmapper.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2015 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$ +** +****************************************************************************/ + +#include "quick3dchannelmapper_p.h" + +QT_BEGIN_NAMESPACE + +namespace Qt3DAnimation { +namespace Animation { +namespace Quick { + +Quick3DChannelMapper::Quick3DChannelMapper(QObject *parent) + : QObject(parent) +{ +} + +QQmlListProperty<QChannelMapping> Quick3DChannelMapper::qmlMappings() +{ + return QQmlListProperty<QChannelMapping>(this, 0, + &Quick3DChannelMapper::appendMapping, + &Quick3DChannelMapper::mappingCount, + &Quick3DChannelMapper::mappingAt, + &Quick3DChannelMapper::clearMappings); +} + +void Quick3DChannelMapper::appendMapping(QQmlListProperty<QChannelMapping> *list, QChannelMapping *mapping) +{ + Quick3DChannelMapper *extension = qobject_cast<Quick3DChannelMapper *>(list->object); + extension->parentMapper()->addMapping(mapping); +} + +QChannelMapping *Quick3DChannelMapper::mappingAt(QQmlListProperty<QChannelMapping> *list, int index) +{ + Quick3DChannelMapper *extension = qobject_cast<Quick3DChannelMapper *>(list->object); + return extension->parentMapper()->mappings().at(index); +} + +int Quick3DChannelMapper::mappingCount(QQmlListProperty<QChannelMapping> *list) +{ + Quick3DChannelMapper *extension = qobject_cast<Quick3DChannelMapper *>(list->object); + return extension->parentMapper()->mappings().count(); +} + +void Quick3DChannelMapper::clearMappings(QQmlListProperty<QChannelMapping> *list) +{ + Quick3DChannelMapper *extension = qobject_cast<Quick3DChannelMapper *>(list->object); + const auto mappings = extension->parentMapper()->mappings(); + for (QChannelMapping *mapping : mappings) + extension->parentMapper()->removeMapping(mapping); +} + +} // namespace Quick +} // namespace Animation +} // namespace Qt3DAnimation + +QT_END_NAMESPACE diff --git a/src/quick3d/quick3danimation/items/quick3dchannelmapper_p.h b/src/quick3d/quick3danimation/items/quick3dchannelmapper_p.h new file mode 100644 index 000000000..fddaae72d --- /dev/null +++ b/src/quick3d/quick3danimation/items/quick3dchannelmapper_p.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2015 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_QUICK_QUICK3DBASICANIMATION_H +#define QT3DANIMATION_ANIMATION_QUICK_QUICK3DBASICANIMATION_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 <Qt3DQuickAnimation/private/qt3dquickanimation_global_p.h> +#include <Qt3DAnimation/qchannelmapping.h> +#include <Qt3DAnimation/qchannelmapper.h> +#include <QQmlListProperty> + +QT_BEGIN_NAMESPACE + +namespace Qt3DAnimation { +namespace Animation { +namespace Quick { + +class QT3DQUICKANIMATIONSHARED_PRIVATE_EXPORT Quick3DChannelMapper : public QObject +{ + Q_OBJECT + Q_PROPERTY(QQmlListProperty<Qt3DAnimation::QChannelMapping> mappings READ qmlMappings CONSTANT) +public: + explicit Quick3DChannelMapper(QObject *parent = nullptr); + + inline QChannelMapper *parentMapper() const { return qobject_cast<QChannelMapper *>(parent()); } + QQmlListProperty<QChannelMapping> qmlMappings(); + +private: + static void appendMapping(QQmlListProperty<QChannelMapping> *list, QChannelMapping *mapping); + static QChannelMapping *mappingAt(QQmlListProperty<QChannelMapping> *list, int index); + static int mappingCount(QQmlListProperty<QChannelMapping> *list); + static void clearMappings(QQmlListProperty<QChannelMapping> *list); +}; + +} // namespace Quick +} // namespace Animation +} // namespace Qt3DAnimation + +QT_END_NAMESPACE + +#endif // QT3DANIMATION_ANIMATION_QUICK_QUICK3DBASICANIMATION_H diff --git a/src/quick3d/quick3danimation/quick3danimation.pro b/src/quick3d/quick3danimation/quick3danimation.pro index 213ba564b..770cbcdb1 100644 --- a/src/quick3d/quick3danimation/quick3danimation.pro +++ b/src/quick3d/quick3danimation/quick3danimation.pro @@ -25,4 +25,6 @@ HEADERS += \ # otherwise mingw headers do not declare common functions like ::strcasecmp win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x +include(./items/items.pri) + load(qt_module) |