Make sure animation drivers knows about the temporal offset after a pause

Change-Id: I932e469389241f6a12816b52180936f061cd78f8
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@nokia.com>
Reviewed-by: J-P Nurmi <j-p.nurmi@nokia.com>
This commit is contained in:
Gunnar Sletta 2012-05-10 10:39:42 +02:00 committed by Qt by Nokia
parent b6e4c859d3
commit 7226361aed
3 changed files with 33 additions and 1 deletions

View File

@ -317,6 +317,7 @@ void QUnifiedTimer::localRestart()
} else if (!driver->isRunning()) { } else if (!driver->isRunning()) {
if (pauseTimer.isActive()) if (pauseTimer.isActive())
pauseTimer.stop(); pauseTimer.stop();
driver->setStartTime(time.isValid() ? time.elapsed() : 0);
driver->start(); driver->start();
} }
@ -339,6 +340,7 @@ void QUnifiedTimer::setTimingInterval(int interval)
if (driver->isRunning() && !pauseTimer.isActive()) { if (driver->isRunning() && !pauseTimer.isActive()) {
//we changed the timing interval //we changed the timing interval
driver->stop(); driver->stop();
driver->setStartTime(time.isValid() ? time.elapsed() : 0);
driver->start(); driver->start();
} }
} }
@ -477,6 +479,7 @@ void QUnifiedTimer::installAnimationDriver(QAnimationDriver *d)
if (driver->isRunning()) { if (driver->isRunning()) {
driver->stop(); driver->stop();
d->setStartTime(time.isValid() ? time.elapsed() : 0);
d->start(); d->start();
} }
@ -495,6 +498,7 @@ void QUnifiedTimer::uninstallAnimationDriver(QAnimationDriver *d)
if (d->isRunning()) { if (d->isRunning()) {
d->stop(); d->stop();
driver->setStartTime(time.isValid() ? time.elapsed() : 0);
driver->start(); driver->start();
} }
} }
@ -732,6 +736,28 @@ QAnimationDriver::~QAnimationDriver()
} }
/*!
Sets the time at which an animation driver should start at.
This is to take into account that pauses can occur in running
animations which will stop the driver, but the time still
increases.
*/
void QAnimationDriver::setStartTime(qint64 startTime)
{
Q_D(QAnimationDriver);
d->startTime = startTime;
}
/*!
Returns the start time of the animation.
*/
qint64 QAnimationDriver::startTime() const
{
Q_D(const QAnimationDriver);
return d->startTime;
}
/*! /*!
Advances the animation based to the specified \a timeStep. This function should Advances the animation based to the specified \a timeStep. This function should
@ -821,6 +847,8 @@ void QAnimationDriver::stop()
qint64 QAnimationDriver::elapsed() const qint64 QAnimationDriver::elapsed() const
{ {
// The default implementation picks up the elapsed time from the
// unified timer and can ignore the time offset.
return QUnifiedTimer::instance()->time.elapsed(); return QUnifiedTimer::instance()->time.elapsed();
} }

View File

@ -151,6 +151,9 @@ public:
virtual qint64 elapsed() const; virtual qint64 elapsed() const;
void setStartTime(qint64 startTime);
qint64 startTime() const;
Q_SIGNALS: Q_SIGNALS:
void started(); void started();
void stopped(); void stopped();

View File

@ -132,8 +132,9 @@ private:
class Q_CORE_EXPORT QAnimationDriverPrivate : public QObjectPrivate class Q_CORE_EXPORT QAnimationDriverPrivate : public QObjectPrivate
{ {
public: public:
QAnimationDriverPrivate() : running(false) {} QAnimationDriverPrivate() : running(false), startTime(0) {}
bool running; bool running;
qint64 startTime;
}; };
class Q_CORE_EXPORT QAbstractAnimationTimer : public QObject class Q_CORE_EXPORT QAbstractAnimationTimer : public QObject