double Animation::calculateTimeToEffectChange(bool forwards, double localTime, double timeToNextIteration) const { const double start = startTimeInternal() + specifiedTiming().startDelay; const double end = start + activeDurationInternal(); switch (phase()) { case PhaseBefore: ASSERT(start >= localTime); return forwards ? start - localTime : std::numeric_limits<double>::infinity(); case PhaseActive: if (forwards && hasActiveAnimationsOnCompositor()) { ASSERT(specifiedTiming().playbackRate == 1); // Need service to apply fill / fire events. const double timeToEnd = end - localTime; if (hasEvents()) { return std::min(timeToEnd, timeToNextIteration); } else { return timeToEnd; } } return 0; case PhaseAfter: ASSERT(localTime >= end); // If this Animation is still in effect then it will need to update // when its parent goes out of effect. We have no way of knowing when // that will be, however, so the parent will need to supply it. return forwards ? std::numeric_limits<double>::infinity() : localTime - end; default: ASSERT_NOT_REACHED(); return std::numeric_limits<double>::infinity(); } }
void DummyEventLoop::processEvents() { while(hasEvents()) { hasEvents_ = false; handleNextEvents(); } }
DummyEventLoop::~DummyEventLoop() { if (hasEvents()) { std::cerr << "DummyEventLoop: Unhandled events at destruction time" << std::endl; } }