ScrollAnimatorSmooth.cpp [plain text]
#include "config.h"
#include "ScrollAnimatorSmooth.h"
#if ENABLE(SMOOTH_SCROLLING)
#include "ScrollAnimationSmooth.h"
#include "ScrollableArea.h"
namespace WebCore {
std::unique_ptr<ScrollAnimator> ScrollAnimator::create(ScrollableArea& scrollableArea)
{
if (scrollableArea.scrollAnimatorEnabled())
return std::make_unique<ScrollAnimatorSmooth>(scrollableArea);
return std::make_unique<ScrollAnimator>(scrollableArea);
}
ScrollAnimatorSmooth::ScrollAnimatorSmooth(ScrollableArea& scrollableArea)
: ScrollAnimator(scrollableArea)
, m_animation(std::make_unique<ScrollAnimationSmooth>(scrollableArea, m_currentPosition, [this](FloatPoint&& position) {
FloatSize delta = position - m_currentPosition;
m_currentPosition = WTFMove(position);
notifyPositionChanged(delta);
}))
{
}
ScrollAnimatorSmooth::~ScrollAnimatorSmooth() = default;
bool ScrollAnimatorSmooth::scroll(ScrollbarOrientation orientation, ScrollGranularity granularity, float step, float multiplier)
{
if (!m_scrollableArea.scrollAnimatorEnabled() || granularity == ScrollByPrecisePixel)
return ScrollAnimator::scroll(orientation, granularity, step, multiplier);
return m_animation->scroll(orientation, granularity, step, multiplier);
}
void ScrollAnimatorSmooth::scrollToOffsetWithoutAnimation(const FloatPoint& offset)
{
FloatPoint position = ScrollableArea::scrollPositionFromOffset(offset, toFloatSize(m_scrollableArea.scrollOrigin()));
m_animation->setCurrentPosition(position);
FloatSize delta = position - m_currentPosition;
m_currentPosition = position;
notifyPositionChanged(delta);
}
#if !USE(REQUEST_ANIMATION_FRAME_TIMER)
void ScrollAnimatorSmooth::cancelAnimations()
{
m_animation->stop();
}
void ScrollAnimatorSmooth::serviceScrollAnimations()
{
m_animation->serviceAnimation();
}
#endif
void ScrollAnimatorSmooth::willEndLiveResize()
{
m_animation->updateVisibleLengths();
}
void ScrollAnimatorSmooth::didAddVerticalScrollbar(Scrollbar*)
{
m_animation->updateVisibleLengths();
}
void ScrollAnimatorSmooth::didAddHorizontalScrollbar(Scrollbar*)
{
m_animation->updateVisibleLengths();
}
}
#endif // ENABLE(SMOOTH_SCROLLING)