Use a dedicated timer for the animation driver.

QUnifiedTimer::elapsed() was implemented using
driverStartTime + time.elapsed() while the driver
was running, but time.elapsed already contains
driverStartTime so that was counted twice. This caused
repeating timers to fire immediately once they first
had fired, if the animation driver was started while
it was running.

Separate the two timers. Animation driver time restarts
from 0 every time it starts.

Change-Id: Icf5cd0381b121b2355d7c6ec3edd0997721cbcdf
Task-number: QTBUG-41198
Reviewed-by: Michael Brasser <michael.brasser@live.com>
This commit is contained in:
Gunnar Sletta 2014-09-11 14:36:53 +02:00
parent f40b4cd89c
commit 0db3ea4048
2 changed files with 4 additions and 3 deletions

View File

@ -877,6 +877,7 @@ void QAnimationDriver::start()
Q_D(QAnimationDriver); Q_D(QAnimationDriver);
if (!d->running) { if (!d->running) {
d->running = true; d->running = true;
d->timer.start();
emit started(); emit started();
} }
} }
@ -900,9 +901,8 @@ void QAnimationDriver::stop()
qint64 QAnimationDriver::elapsed() const qint64 QAnimationDriver::elapsed() const
{ {
// The default implementation picks up the elapsed time from the Q_D(const QAnimationDriver);
// unified timer and can ignore the time offset. return d->running ? d->timer.elapsed() : 0;
return QUnifiedTimer::instance()->time.elapsed();
} }
/*! /*!

View File

@ -133,6 +133,7 @@ class Q_CORE_EXPORT QAnimationDriverPrivate : public QObjectPrivate
{ {
public: public:
QAnimationDriverPrivate() : running(false) {} QAnimationDriverPrivate() : running(false) {}
QElapsedTimer timer;
bool running; bool running;
}; };