int QSequentialAnimationGroupJob::animationActualTotalDuration(QAbstractAnimationJob *anim) const { int ret = anim->totalDuration(); if (ret == -1) ret = uncontrolledAnimationFinishTime(anim); //we can try the actual duration there return ret; }
int QSequentialAnimationGroupJob::animationActualTotalDuration(QAbstractAnimationJob *anim) const { int ret = anim->totalDuration(); if (ret == -1) { int done = uncontrolledAnimationFinishTime(anim); // If the animation has reached the end, use the uncontrolledFinished value. if (done >= 0 && (anim->loopCount() - 1 == anim->currentLoop() || anim->state() == Stopped)) return done; } return ret; }
void QContinuingAnimationGroupJob::uncontrolledAnimationFinished(QAbstractAnimationJob *animation) { Q_ASSERT(animation && (animation->duration() == -1)); int uncontrolledRunningCount = 0; for (QAbstractAnimationJob *child = firstChild(); child; child = child->nextSibling()) { if (child == animation) setUncontrolledAnimationFinishTime(animation, animation->currentTime()); else if (uncontrolledAnimationFinishTime(child) == -1) ++uncontrolledRunningCount; } if (uncontrolledRunningCount > 0) return; setUncontrolledAnimationFinishTime(this, currentTime()); stop(); }