bool ScrollAnimatorNone::scroll(ScrollbarOrientation orientation, ScrollGranularity granularity, float step, float multiplier) { if (!m_scrollableArea->scrollAnimatorEnabled()) return ScrollAnimator::scroll(orientation, granularity, step, multiplier); #if PLATFORM(CHROMIUM) TRACE_EVENT("ScrollAnimatorNone::scroll", this, 0); #endif // FIXME: get the type passed in. MouseWheel could also be by line, but should still have different // animation parameters than the keyboard. Parameters parameters; switch (granularity) { case ScrollByDocument: parameters = Parameters(true, 20 * kTickTime, 10 * kTickTime, Cubic, 10 * kTickTime, Cubic, 10 * kTickTime, Linear, 1); break; case ScrollByLine: parameters = Parameters(true, 10 * kTickTime, 7 * kTickTime, Cubic, 3 * kTickTime, Cubic, 3 * kTickTime, Linear, 1); break; case ScrollByPage: parameters = Parameters(true, 15 * kTickTime, 10 * kTickTime, Cubic, 5 * kTickTime, Cubic, 5 * kTickTime, Linear, 1); break; case ScrollByPixel: parameters = Parameters(true, 11 * kTickTime, 2 * kTickTime, Cubic, 3 * kTickTime, Cubic, 3 * kTickTime, Quadratic, 1.25); break; case ScrollByPixelVelocity: // FIXME: Generalize the scroll interface to support a richer set of parameters. if (m_firstVelocitySet) { float x = m_firstVelocityIsVertical ? multiplier : m_firstVelocity; float y = m_firstVelocityIsVertical ? m_firstVelocity : multiplier; FloatPoint fp(x, y); fireUpAnAnimation(fp); m_firstVelocitySet = false; m_firstVelocityIsVertical = false; } else { m_firstVelocitySet = true; m_firstVelocityIsVertical = orientation == VerticalScrollbar; m_firstVelocity = multiplier; } return true; } // If the individual input setting is disabled, bail. if (!parameters.m_isEnabled) return ScrollAnimator::scroll(orientation, granularity, step, multiplier); // This is an animatable scroll. Set the animation in motion using the appropriate parameters. float scrollableSize = static_cast<float>(m_scrollableArea->scrollSize(orientation)); PerAxisData& data = (orientation == VerticalScrollbar) ? m_verticalData : m_horizontalData; bool needToScroll = data.updateDataFromParameters(step, multiplier, scrollableSize, WTF::monotonicallyIncreasingTime(), ¶meters); if (needToScroll && !animationTimerActive()) { m_startTime = data.m_startTime; animationTimerFired(); } return needToScroll; }
bool ScrollAnimatorNone::scroll(ScrollbarOrientation orientation, ScrollGranularity granularity, float step, float multiplier) { if (!m_scrollableArea->scrollAnimatorEnabled()) return ScrollAnimator::scroll(orientation, granularity, step, multiplier); // FIXME: get the type passed in. MouseWheel could also be by line, but should still have different // animation parameters than the keyboard. Parameters parameters; switch (granularity) { case ScrollByDocument: parameters = Parameters(true, 20 * kTickTime, 10 * kTickTime, Cubic, 10 * kTickTime, Cubic, 10 * kTickTime, Linear, 1); break; case ScrollByLine: parameters = Parameters(true, 10 * kTickTime, 7 * kTickTime, Cubic, 3 * kTickTime, Cubic, 3 * kTickTime, Linear, 1); break; case ScrollByPage: parameters = Parameters(true, 15 * kTickTime, 10 * kTickTime, Cubic, 5 * kTickTime, Cubic, 5 * kTickTime, Linear, 1); break; case ScrollByPixel: parameters = Parameters(true, 11 * kTickTime, 2 * kTickTime, Cubic, 3 * kTickTime, Cubic, 3 * kTickTime, Quadratic, 1.25); break; default: break; } // If the individual input setting is disabled, bail. if (!parameters.m_isEnabled) return ScrollAnimator::scroll(orientation, granularity, step, multiplier); // This is an animatable scroll. Set the animation in motion using the appropriate parameters. float scrollableSize = static_cast<float>(m_scrollableArea->scrollSize(orientation)); PerAxisData& data = (orientation == VerticalScrollbar) ? m_verticalData : m_horizontalData; bool needToScroll = data.updateDataFromParameters(step, multiplier, scrollableSize, WTF::monotonicallyIncreasingTime(), ¶meters); if (needToScroll && !m_animationTimer.isActive()) { m_startTime = data.m_startTime; animationTimerFired(&m_animationTimer); } return needToScroll; }
ScrollResultOneDimensional ScrollAnimator::userScroll(ScrollbarOrientation orientation, ScrollGranularity granularity, float step, float delta) { if (!m_scrollableArea->scrollAnimatorEnabled()) return ScrollAnimatorBase::userScroll(orientation, granularity, step, delta); TRACE_EVENT0("blink", "ScrollAnimator::scroll"); // FIXME: get the type passed in. MouseWheel could also be by line, but should still have different // animation parameters than the keyboard. Parameters parameters; switch (granularity) { case ScrollByDocument: case ScrollByLine: case ScrollByPage: case ScrollByPixel: parameters = parametersForScrollGranularity(granularity); break; case ScrollByPrecisePixel: return ScrollAnimatorBase::userScroll(orientation, granularity, step, delta); } // If the individual input setting is disabled, bail. if (!parameters.m_isEnabled) return ScrollAnimatorBase::userScroll(orientation, granularity, step, delta); // This is an animatable scroll. Set the animation in motion using the appropriate parameters. float scrollableSize = static_cast<float>(m_scrollableArea->scrollSize(orientation)); PerAxisData& data = (orientation == VerticalScrollbar) ? m_verticalData : m_horizontalData; bool needToScroll = data.updateDataFromParameters(step, delta, scrollableSize, WTF::monotonicallyIncreasingTime(), ¶meters); float unusedDelta = needToScroll ? delta - (data.m_desiredPosition - *data.m_currentPosition) : delta; if (needToScroll && !animationTimerActive()) { m_startTime = data.m_startTime; animationWillStart(); animationTimerFired(); scrollableArea()->registerForAnimation(); } return ScrollResultOneDimensional(needToScroll, unusedDelta); }
void ScrollAnimatorNone::serviceScrollAnimations() { if (m_animationActive) animationTimerFired(); }
void ScrollAnimationSmooth::serviceAnimation() { if (m_animationActive) animationTimerFired(); }