diff options
Diffstat (limited to 'tests/benchmarks/qanimation/rectanimation.cpp')
-rw-r--r-- | tests/benchmarks/qanimation/rectanimation.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/benchmarks/qanimation/rectanimation.cpp b/tests/benchmarks/qanimation/rectanimation.cpp new file mode 100644 index 0000000..66c7a33 --- /dev/null +++ b/tests/benchmarks/qanimation/rectanimation.cpp @@ -0,0 +1,58 @@ +#include "rectanimation.h" +#include "dummyobject.h" + +static inline int interpolateInteger(int from, int to, qreal progress) +{ + return from + (to - from) * progress; +} + + +RectAnimation::RectAnimation(DummyObject *obj) : object(obj), dura(250) +{ +} + +void RectAnimation::setEndValue(const QRect &rect) +{ + end = rect; +} + +void RectAnimation::setStartValue(const QRect &rect) +{ + start = rect; +} + +void RectAnimation::setDuration(int d) +{ + dura = d; +} + +int RectAnimation::duration() const +{ + return dura; +} + + +void RectAnimation::updateCurrentTime(int msecs) +{ + qreal progress = easing.valueForProgress( qreal(msecs) / qreal(dura) ); + QRect now; + now.setCoords(interpolateInteger(start.left(), end.left(), progress), + interpolateInteger(start.top(), end.top(), progress), + interpolateInteger(start.right(), end.right(), progress), + interpolateInteger(start.bottom(), end.bottom(), progress)); + + bool changed = (now != current); + if (changed) + current = now; + + if (state() == Stopped) + return; + + if (object) + object->setRect(current); +} + +void RectAnimation::updateState(QAbstractAnimation::State state) +{ + Q_UNUSED(state); +} |