summaryrefslogtreecommitdiffstats
path: root/src/corelib/animation
diff options
context:
space:
mode:
authorAndreas Aardal Hanssen <andreas@hanssen.name>2012-11-13 19:06:25 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-15 08:14:21 +0100
commite6f3c6c3741cbd7f4f0af3c04303fa1d60a55c49 (patch)
tree51ea57cf5db116dbacab327d620354e220e4a0a6 /src/corelib/animation
parentb6db048a63ed2f861201324bdbc0257736f4ddde (diff)
Fix zero-duration animations running Backwards.
If you set the duration of any variant or property animation to 0, its progress will be stuck at 1 (0..1), and its "end" value set on the target object, after start() has been called. If you change the direction of the animation to QAbstractAnimation::Backward, you would expect the progress to be 0 after start. Instead it's still 1; the code seems to assume that if the duration is 0, the progress must be 1 always. The fix is that if the duration is 0, the direction is checked to determine whether progress should be 0 (Backward) or 1 (Forward). Task-number: QTBUG-27969 Change-Id: Ibeca084bbbce41df1dca7b7d96c15b6b54394996 (cherry-picked from qtbase/f3597af5adcd2275503e9e4bfb425549f9ab3ced) Reviewed-by: Thierry Bastian <thierryb@filewave.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/animation')
-rw-r--r--src/corelib/animation/qvariantanimation.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp
index 355207e52b..f8d7ea527b 100644
--- a/src/corelib/animation/qvariantanimation.cpp
+++ b/src/corelib/animation/qvariantanimation.cpp
@@ -237,7 +237,8 @@ void QVariantAnimationPrivate::recalculateCurrentInterval(bool force/*=false*/)
if ((keyValues.count() + (defaultStartEndValue.isValid() ? 1 : 0)) < 2)
return;
- const qreal progress = easing.valueForProgress(((duration == 0) ? qreal(1) : qreal(currentTime) / qreal(duration)));
+ const qreal endProgress = (direction == QAbstractAnimation::Forward) ? qreal(1) : qreal(0);
+ const qreal progress = easing.valueForProgress(((duration == 0) ? endProgress : qreal(currentTime) / qreal(duration)));
//0 and 1 are still the boundaries
if (force || (currentInterval.start.first > 0 && progress < currentInterval.start.first)