diff options
Diffstat (limited to 'src/imports/timeline/qquickkeyframemutator.cpp')
-rw-r--r-- | src/imports/timeline/qquickkeyframemutator.cpp | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/src/imports/timeline/qquickkeyframemutator.cpp b/src/imports/timeline/qquickkeyframemutator.cpp new file mode 100644 index 0000000..ab4b593 --- /dev/null +++ b/src/imports/timeline/qquickkeyframemutator.cpp @@ -0,0 +1,219 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd +** All rights reserved. +** For any questions to The Qt Company, please use contact form at http://www.qt.io/contact-us +** +** This file is part of the Qt Enterprise Qt Quick Timeline Add-on. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. +** +** If you have questions regarding the use of this file, please use +** contact form at http://www.qt.io/contact-us +** +****************************************************************************/ + +#include "qquickkeyframemutator_p.h" + +#include <QtCore/qmath.h> +#include <QtGui/qpainter.h> +#include <QtQuick/private/qquickitem_p.h> + +QT_BEGIN_NAMESPACE + +class QQuickKeyframeMutatorPrivate : public QObjectPrivate +{ + Q_DECLARE_PUBLIC(QQuickKeyframeMutator) +public: + QQuickKeyframeMutatorPrivate() + : startFrame(0), + endFrame(0), + currentFrame(0), + enabled(false), + componentComplete(true) + { + } + + qreal startFrame; + qreal endFrame; + qreal currentFrame; + + bool enabled:1; + bool componentComplete:1; + +protected: + void init(); + void disable(); + + static void append_keyframe(QQmlListProperty<QQuickKeyframes> *list, QQuickKeyframes *a); + static int keyframe_count(QQmlListProperty<QQuickKeyframes> *list); + static QQuickKeyframes* keyframe_at(QQmlListProperty<QQuickKeyframes> *list, int pos); + static void clear_keyframes(QQmlListProperty<QQuickKeyframes> *list); + + QList<QQuickKeyframes *> keyframes; +}; + +void QQuickKeyframeMutatorPrivate::init() +{ + for (auto keyFrames : keyframes) { + keyFrames->init(); + keyFrames->setProperty(currentFrame); + } +} + +void QQuickKeyframeMutatorPrivate::disable() +{ + for (auto keyFrames : keyframes) + keyFrames->resetDefaultValue(); +} + +void QQuickKeyframeMutatorPrivate::append_keyframe(QQmlListProperty<QQuickKeyframes> *list, QQuickKeyframes *a) +{ + QQuickKeyframeMutator *q = static_cast<QQuickKeyframeMutator *>(list->object); + q->d_func()->keyframes.append(a); +} + +int QQuickKeyframeMutatorPrivate::keyframe_count(QQmlListProperty<QQuickKeyframes> *list) +{ + QQuickKeyframeMutator *q = static_cast<QQuickKeyframeMutator *>(list->object); + return q->d_func()->keyframes.count(); +} + +QQuickKeyframes* QQuickKeyframeMutatorPrivate::keyframe_at(QQmlListProperty<QQuickKeyframes> *list, int pos) +{ + QQuickKeyframeMutator *q = static_cast<QQuickKeyframeMutator *>(list->object); + return q->d_func()->keyframes.at(pos); +} + +void QQuickKeyframeMutatorPrivate::clear_keyframes(QQmlListProperty<QQuickKeyframes> *list) +{ + QQuickKeyframeMutator *q = static_cast<QQuickKeyframeMutator *>(list->object); + while (q->d_func()->keyframes.count()) { + QQuickKeyframes *firstKeyframe = q->d_func()->keyframes.at(0); + q->d_func()->keyframes.removeAll(firstKeyframe); + } +} + +QQuickKeyframeMutator::QQuickKeyframeMutator(QObject *parent) : QObject(*(new QQuickKeyframeMutatorPrivate), parent) +{ + +} + +QQmlListProperty<QQuickKeyframes> QQuickKeyframeMutator::keyframes() +{ + Q_D(QQuickKeyframeMutator); + + return QQmlListProperty<QQuickKeyframes>(this, &d->keyframes, QQuickKeyframeMutatorPrivate::append_keyframe, + QQuickKeyframeMutatorPrivate::keyframe_count, + QQuickKeyframeMutatorPrivate::keyframe_at, + QQuickKeyframeMutatorPrivate::clear_keyframes); +} + +bool QQuickKeyframeMutator::enabled() const +{ + Q_D(const QQuickKeyframeMutator); + return d->enabled; +} + +void QQuickKeyframeMutator::setEnabled(bool b) +{ + Q_D(QQuickKeyframeMutator); + if (d->enabled == b) + return; + d->enabled = b; + + if (d->componentComplete) { + if (b) + init(); + else + reset(); + } + + emit enabledChanged(); +} + +qreal QQuickKeyframeMutator::startFrame() const +{ + Q_D(const QQuickKeyframeMutator); + return d->startFrame; +} + +void QQuickKeyframeMutator::setStartFrame(qreal frame) +{ + Q_D(QQuickKeyframeMutator); + if (d->startFrame == frame) + return; + d->startFrame = frame; + emit startFrameChanged(); +} + +qreal QQuickKeyframeMutator::endFrame() const +{ + Q_D(const QQuickKeyframeMutator); + return d->endFrame; +} + +void QQuickKeyframeMutator::setEndFrame(qreal frame) +{ + Q_D(QQuickKeyframeMutator); + if (d->endFrame == frame) + return; + d->endFrame = frame; + emit endFrameChanged(); +} + +qreal QQuickKeyframeMutator::currentFrame() const +{ + Q_D(const QQuickKeyframeMutator); + return d->currentFrame; +} + +void QQuickKeyframeMutator::setCurrentFrame(qreal frame) +{ + Q_D(QQuickKeyframeMutator); + if (d->currentFrame == frame) + return; + d->currentFrame = frame; + + if (d->componentComplete && d->enabled) + for (auto keyFrames : d->keyframes) + keyFrames->setProperty(d->currentFrame); + + emit currentFrameChanged(); +} + +void QQuickKeyframeMutator::init() +{ + Q_D(QQuickKeyframeMutator); + + if (d->componentComplete) + d->init(); +} + +void QQuickKeyframeMutator::reset() +{ + Q_D(QQuickKeyframeMutator); + + if (d->componentComplete) + d->disable(); +} + +void QQuickKeyframeMutator::classBegin() +{ + Q_D(QQuickKeyframeMutator); + d->componentComplete = false; +} + +void QQuickKeyframeMutator::componentComplete() +{ + Q_D(QQuickKeyframeMutator); + d->componentComplete = true; + + if (d->enabled) + init(); +} + +QT_END_NAMESPACE |