aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2017-12-05 11:45:08 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2017-12-05 13:12:36 +0000
commit89bb540a871361afdc2f46af2d752ce4b5c3637e (patch)
treef75014a7f91289e4b312065ffe2a0e2090a11a14
parent49d74e19d44293dfa79079a6116f7d83f260ad17 (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.cpp20
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)