Esempio n. 1
0
void ProgrammaticScrollAnimator::tickAnimation(double monotonicTime) {
  if (m_runState != RunState::RunningOnMainThread)
    return;

  if (!m_startTime)
    m_startTime = monotonicTime;
  double elapsedTime = monotonicTime - m_startTime;
  bool isFinished = (elapsedTime > m_animationCurve->duration());
  ScrollOffset offset =
      blinkOffsetFromCompositorOffset(m_animationCurve->getValue(elapsedTime));
  notifyOffsetChanged(offset);

  if (isFinished) {
    m_runState = RunState::PostAnimationCleanup;
  } else if (!m_scrollableArea->scheduleAnimation()) {
    notifyOffsetChanged(offset);
    resetAnimationState();
  }
}
Esempio n. 2
0
void ScrollAnimator::tickAnimation(double monotonicTime) {
  if (m_runState != RunState::RunningOnMainThread)
    return;

  TRACE_EVENT0("blink", "ScrollAnimator::tickAnimation");
  double elapsedTime = monotonicTime - m_startTime;

  bool isFinished = (elapsedTime > m_animationCurve->duration());
  ScrollOffset offset = blinkOffsetFromCompositorOffset(
      isFinished ? m_animationCurve->targetValue()
                 : m_animationCurve->getValue(elapsedTime));

  offset = m_scrollableArea->clampScrollOffset(offset);

  m_currentOffset = offset;

  if (isFinished)
    m_runState = RunState::PostAnimationCleanup;
  else
    getScrollableArea()->scheduleAnimation();

  TRACE_EVENT0("blink", "ScrollAnimator::notifyOffsetChanged");
  notifyOffsetChanged();
}