diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2017-12-05 11:45:08 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2017-12-05 13:12:36 +0000 |
commit | 89bb540a871361afdc2f46af2d752ce4b5c3637e (patch) | |
tree | f75014a7f91289e4b312065ffe2a0e2090a11a14 | |
parent | 49d74e19d44293dfa79079a6116f7d83f260ad17 (diff) |
Ensure we interpolate from the default value to the first keyframe
This allows the user to just add a single keyframe.
The default value of the item is implictly interpreted
as a keyframe at startFrame.
Change-Id: I3a87cf6af8c52be9792b8b48a571034f1f74725e
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
-rw-r--r-- | src/imports/timeline/qquickkeyframe.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/imports/timeline/qquickkeyframe.cpp b/src/imports/timeline/qquickkeyframe.cpp index 944fae8..8984cba 100644 --- a/src/imports/timeline/qquickkeyframe.cpp +++ b/src/imports/timeline/qquickkeyframe.cpp @@ -173,6 +173,10 @@ void QQuickKeyframes::setTargetObject(QObject *o) if (d->target == o) return; d->target = o; + + if (!property().isEmpty()) + init(); + emit targetChanged(); } @@ -188,6 +192,10 @@ void QQuickKeyframes::setProperty(const QString &n) if (d->propertyName == n) return; d->propertyName = n; + + if (target()) + init(); + emit propertyChanged(); } @@ -198,15 +206,21 @@ QVariant QQuickKeyframes::evaluate(qreal frame) const if (d->sortedKeyframes.isEmpty()) return QVariant(); - QQuickKeyframe *lastFrame = nullptr; + static QQuickKeyframe dummy; + QQuickKeyframeMutator *timeline = qobject_cast<QQuickKeyframeMutator*>(parent()); + if (timeline) + dummy.setFrame(timeline->startFrame() - 0.0001); + dummy.setValue(d->originalValue); + + QQuickKeyframe *lastFrame = &dummy; for (auto keyFrame : qAsConst(d->sortedKeyframes)) { - if (frame <= keyFrame->frame()) + if (qFuzzyCompare(frame, keyFrame->frame()) || frame < keyFrame->frame()) return keyFrame->evaluate(lastFrame, frame, QQmlProperty(target(), property()).property().userType()); lastFrame = keyFrame; } - return QVariant(); + return lastFrame->value(); } void QQuickKeyframes::setProperty(qreal frame) |