| Index: third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.mm
|
| diff --git a/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.mm b/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.mm
|
| index d9f32d0ffcb73da3033f8099f8af651411817fb1..79356732195909885ce20fbac12ebf74221af731 100644
|
| --- a/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.mm
|
| +++ b/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.mm
|
| @@ -123,14 +123,15 @@ static NSSize abs(NSSize size) {
|
| if (!_animator)
|
| return NSZeroRect;
|
|
|
| - blink::FloatPoint currentPosition = _animator->currentPosition();
|
| - return NSMakeRect(currentPosition.x(), currentPosition.y(), 0, 0);
|
| + blink::ScrollOffset currentOffset = _animator->currentOffset();
|
| + return NSMakeRect(currentOffset.width(), currentOffset.height(), 0, 0);
|
| }
|
|
|
| - (void)_immediateScrollToPoint:(NSPoint)newPosition {
|
| if (!_animator)
|
| return;
|
| - _animator->immediateScrollToPointForScrollAnimation(newPosition);
|
| + _animator->immediateScrollToOffsetForScrollAnimation(
|
| + toScrollOffset(newPosition));
|
| }
|
|
|
| - (NSPoint)_pixelAlignProposedScrollPosition:(NSPoint)newOrigin {
|
| @@ -223,10 +224,14 @@ static NSSize abs(NSSize size) {
|
| scrollbar = _scrollableArea->verticalScrollbar();
|
|
|
| // It is possible to have a null scrollbar here since it is possible for this
|
| - // delegate method to be called between the moment when a scrollbar has been
|
| - // set to 0 and the moment when its destructor has been called. We should
|
| - // probably de-couple some of the clean-up work in
|
| - // ScrollbarThemeMac::unregisterScrollbar() to avoid this issue.
|
| + // delegate
|
| + // method to be called between the moment when a scrollbar has been set to 0
|
| + // and the
|
| + // moment when its destructor has been called. We should probably de-couple
|
| + // some
|
| + // of the clean-up work in ScrollbarThemeMac::unregisterScrollbar() to avoid
|
| + // this
|
| + // issue.
|
| if (!scrollbar)
|
| return NSZeroPoint;
|
|
|
| @@ -251,8 +256,9 @@ static NSSize abs(NSSize size) {
|
| updateScrollerStyleForNewRecommendedScrollerStyle:
|
| (NSScrollerStyle)newRecommendedScrollerStyle {
|
| // Chrome has a single process mode which is used for testing on Mac. In that
|
| - // mode, WebKit runs on a thread in the browser process. This notification is
|
| - // called by the OS on the main thread in the browser process, and not on the
|
| + // mode, WebKit runs on a thread in the
|
| + // browser process. This notification is called by the OS on the main thread
|
| + // in the browser process, and not on the
|
| // the WebKit thread. Better to not update the style than crash.
|
| // http://crbug.com/126514
|
| if (!isMainThread())
|
| @@ -281,9 +287,10 @@ enum FeatureToAnimate {
|
| namespace blink {
|
|
|
| // This class is used to drive the animation timer for
|
| -// BlinkScrollbarPartAnimation objects. This is used instead of NSAnimation
|
| -// because CoreAnimation establishes connections to the WindowServer, which
|
| -// should not be done in a sandboxed renderer process.
|
| +// BlinkScrollbarPartAnimation
|
| +// objects. This is used instead of NSAnimation because CoreAnimation
|
| +// establishes connections to the WindowServer, which should not be done in a
|
| +// sandboxed renderer process.
|
| class BlinkScrollbarPartAnimationTimer {
|
| public:
|
| BlinkScrollbarPartAnimationTimer(BlinkScrollbarPartAnimation* animation,
|
| @@ -498,7 +505,8 @@ class BlinkScrollbarPartAnimationTimer {
|
| animateAlphaTo:(CGFloat)newAlpha
|
| duration:(NSTimeInterval)duration {
|
| // If the user has scrolled the page, then the scrollbars must be animated
|
| - // here. This overrides the early returns.
|
| + // here.
|
| + // This overrides the early returns.
|
| bool mustAnimate = [self scrollAnimator].haveScrolledSincePageLoad();
|
|
|
| if ([self scrollAnimator].scrollbarPaintTimerIsActive() && !mustAnimate)
|
| @@ -651,9 +659,10 @@ class BlinkScrollbarPartAnimationTimer {
|
| NSScrollerStateExpanded = 2
|
| };
|
| // We do not receive notifications about the thumb un-expanding when the
|
| - // scrollbar fades away. Ensure that we re-paint the thumb the next time that
|
| - // we transition away from being invisible, so that the thumb doesn't stick
|
| - // in an expanded state.
|
| + // scrollbar fades away. Ensure
|
| + // that we re-paint the thumb the next time that we transition away from being
|
| + // invisible, so that
|
| + // the thumb doesn't stick in an expanded state.
|
| if (newOverlayScrollerState == NSScrollerStateExpanded) {
|
| _hasExpandedSinceInvisible = YES;
|
| } else if (newOverlayScrollerState != NSScrollerStateInvisible &&
|
| @@ -732,7 +741,7 @@ void ScrollAnimatorMac::dispose() {
|
| }
|
|
|
| ScrollResult ScrollAnimatorMac::userScroll(ScrollGranularity granularity,
|
| - const FloatSize& delta) {
|
| + const ScrollOffset& delta) {
|
| m_haveScrolledSincePageLoad = true;
|
|
|
| if (!m_scrollableArea->scrollAnimatorEnabled())
|
| @@ -741,66 +750,69 @@ ScrollResult ScrollAnimatorMac::userScroll(ScrollGranularity granularity,
|
| if (granularity == ScrollByPixel || granularity == ScrollByPrecisePixel)
|
| return ScrollAnimatorBase::userScroll(granularity, delta);
|
|
|
| - FloatSize consumedDelta = computeDeltaToConsume(delta);
|
| - FloatPoint newPos = m_currentPos + consumedDelta;
|
| - if (m_currentPos == newPos)
|
| + ScrollOffset consumedDelta = computeDeltaToConsume(delta);
|
| + ScrollOffset newOffset = m_currentOffset + consumedDelta;
|
| + if (m_currentOffset == newOffset)
|
| return ScrollResult();
|
|
|
| // Prevent clobbering an existing animation on an unscrolled axis.
|
| if ([m_scrollAnimationHelper.get() _isAnimating]) {
|
| NSPoint targetOrigin = [m_scrollAnimationHelper.get() targetOrigin];
|
| if (!delta.width())
|
| - newPos.setX(targetOrigin.x);
|
| + newOffset.setWidth(targetOrigin.x);
|
| if (!delta.height())
|
| - newPos.setY(targetOrigin.y);
|
| + newOffset.setHeight(targetOrigin.y);
|
| }
|
|
|
| - NSPoint newPoint = NSMakePoint(newPos.x(), newPos.y());
|
| + NSPoint newPoint = NSMakePoint(newOffset.width(), newOffset.height());
|
| [m_scrollAnimationHelper.get() scrollToPoint:newPoint];
|
|
|
| // TODO(bokan): This has different semantics on ScrollResult than
|
| - // ScrollAnimator, which only returns unused delta if there's no animation
|
| - // and we don't start one.
|
| + // ScrollAnimator,
|
| + // which only returns unused delta if there's no animation and we don't start
|
| + // one.
|
| return ScrollResult(consumedDelta.width(), consumedDelta.height(),
|
| delta.width() - consumedDelta.width(),
|
| delta.height() - consumedDelta.height());
|
| }
|
|
|
| void ScrollAnimatorMac::scrollToOffsetWithoutAnimation(
|
| - const FloatPoint& offset) {
|
| + const ScrollOffset& offset) {
|
| [m_scrollAnimationHelper.get() _stopRun];
|
| immediateScrollTo(offset);
|
| }
|
|
|
| -FloatPoint ScrollAnimatorMac::adjustScrollPositionIfNecessary(
|
| - const FloatPoint& position) const {
|
| - IntPoint minPos = m_scrollableArea->minimumScrollPosition();
|
| - IntPoint maxPos = m_scrollableArea->maximumScrollPosition();
|
| +ScrollOffset ScrollAnimatorMac::adjustScrollOffsetIfNecessary(
|
| + const ScrollOffset& offset) const {
|
| + ScrollOffset minOffset = m_scrollableArea->minimumScrollOffset();
|
| + ScrollOffset maxOffset = m_scrollableArea->maximumScrollOffset();
|
|
|
| - float newX = clampTo<float, float>(position.x(), minPos.x(), maxPos.x());
|
| - float newY = clampTo<float, float>(position.y(), minPos.y(), maxPos.y());
|
| + float newX = clampTo<float, float>(offset.width(), minOffset.width(),
|
| + maxOffset.width());
|
| + float newY = clampTo<float, float>(offset.height(), minOffset.height(),
|
| + maxOffset.height());
|
|
|
| - return FloatPoint(newX, newY);
|
| + return ScrollOffset(newX, newY);
|
| }
|
|
|
| -void ScrollAnimatorMac::immediateScrollTo(const FloatPoint& newPosition) {
|
| - FloatPoint adjustedPosition = adjustScrollPositionIfNecessary(newPosition);
|
| +void ScrollAnimatorMac::immediateScrollTo(const ScrollOffset& newOffset) {
|
| + ScrollOffset adjustedOffset = adjustScrollOffsetIfNecessary(newOffset);
|
|
|
| - bool positionChanged = adjustedPosition != m_currentPos;
|
| - if (!positionChanged && !getScrollableArea()->scrollOriginChanged())
|
| + bool offsetChanged = adjustedOffset != m_currentOffset;
|
| + if (!offsetChanged && !getScrollableArea()->scrollOriginChanged())
|
| return;
|
|
|
| - FloatSize delta = adjustedPosition - m_currentPos;
|
| + ScrollOffset delta = adjustedOffset - m_currentOffset;
|
|
|
| - m_currentPos = adjustedPosition;
|
| + m_currentOffset = adjustedOffset;
|
| notifyContentAreaScrolled(delta);
|
| - notifyPositionChanged();
|
| + notifyOffsetChanged();
|
| }
|
|
|
| -void ScrollAnimatorMac::immediateScrollToPointForScrollAnimation(
|
| - const FloatPoint& newPosition) {
|
| +void ScrollAnimatorMac::immediateScrollToOffsetForScrollAnimation(
|
| + const ScrollOffset& newOffset) {
|
| ASSERT(m_scrollAnimationHelper);
|
| - immediateScrollTo(newPosition);
|
| + immediateScrollTo(newOffset);
|
| }
|
|
|
| void ScrollAnimatorMac::contentAreaWillPaint() const {
|
| @@ -954,11 +966,12 @@ bool ScrollAnimatorMac::shouldScrollbarParticipateInHitTesting(
|
| return [painter knobAlpha] > 0;
|
| }
|
|
|
| -void ScrollAnimatorMac::notifyContentAreaScrolled(const FloatSize& delta) {
|
| +void ScrollAnimatorMac::notifyContentAreaScrolled(const ScrollOffset& delta) {
|
| // This function is called when a page is going into the page cache, but the
|
| - // page isn't really scrolling in that case. We should only pass the message
|
| - // on to the ScrollbarPainterController when we're really scrolling on an
|
| - // active page.
|
| + // page
|
| + // isn't really scrolling in that case. We should only pass the message on to
|
| + // the
|
| + // ScrollbarPainterController when we're really scrolling on an active page.
|
| if (getScrollableArea()->scrollbarsCanBeActive())
|
| sendContentAreaScrolledSoon(delta);
|
| }
|
| @@ -981,7 +994,8 @@ void ScrollAnimatorMac::cancelAnimation() {
|
|
|
| void ScrollAnimatorMac::handleWheelEventPhase(PlatformWheelEventPhase phase) {
|
| // This may not have been set to true yet if the wheel event was handled by
|
| - // the ScrollingTree, so set it to true here.
|
| + // the ScrollingTree,
|
| + // So set it to true here.
|
| m_haveScrolledSincePageLoad = true;
|
|
|
| if (phase == PlatformWheelEventPhaseBegan)
|
| @@ -1022,8 +1036,10 @@ void ScrollAnimatorMac::updateScrollerStyle() {
|
| macTheme->setNewPainterForScrollbar(*verticalScrollbar, newVerticalPainter);
|
|
|
| // The different scrollbar styles have different thicknesses, so we must
|
| - // re-set the frameRect to the new thickness, and the re-layout below will
|
| - // ensure the position and length are properly updated.
|
| + // re-set the
|
| + // frameRect to the new thickness, and the re-layout below will ensure the
|
| + // offset
|
| + // and length are properly updated.
|
| int thickness =
|
| macTheme->scrollbarThickness(verticalScrollbar->controlSize());
|
| verticalScrollbar->setFrameRect(IntRect(0, 0, thickness, thickness));
|
| @@ -1046,16 +1062,19 @@ void ScrollAnimatorMac::updateScrollerStyle() {
|
| newHorizontalPainter);
|
|
|
| // The different scrollbar styles have different thicknesses, so we must
|
| - // re-set the frameRect to the new thickness, and the re-layout below will
|
| - // ensure the position and length are properly updated.
|
| + // re-set the
|
| + // frameRect to the new thickness, and the re-layout below will ensure the
|
| + // offset
|
| + // and length are properly updated.
|
| int thickness =
|
| macTheme->scrollbarThickness(horizontalScrollbar->controlSize());
|
| horizontalScrollbar->setFrameRect(IntRect(0, 0, thickness, thickness));
|
| }
|
|
|
| // If m_needsScrollerStyleUpdate is true, then the page is restoring from the
|
| - // page cache, and a relayout will happen on its own. Otherwise, we must
|
| - // initiate a re-layout ourselves.
|
| + // page cache, and
|
| + // a relayout will happen on its own. Otherwise, we must initiate a re-layout
|
| + // ourselves.
|
| if (!m_needsScrollerStyleUpdate)
|
| getScrollableArea()->scrollbarStyleChanged();
|
|
|
| @@ -1078,13 +1097,13 @@ void ScrollAnimatorMac::stopScrollbarPaintTimer() {
|
|
|
| void ScrollAnimatorMac::initialScrollbarPaintTask() {
|
| // To force the scrollbars to flash, we have to call hide first. Otherwise,
|
| - // the ScrollbarPainterController might think that the scrollbars are already
|
| - // showing and bail early.
|
| + // the ScrollbarPainterController
|
| + // might think that the scrollbars are already showing and bail early.
|
| [m_scrollbarPainterController.get() hideOverlayScrollers];
|
| [m_scrollbarPainterController.get() flashScrollers];
|
| }
|
|
|
| -void ScrollAnimatorMac::sendContentAreaScrolledSoon(const FloatSize& delta) {
|
| +void ScrollAnimatorMac::sendContentAreaScrolledSoon(const ScrollOffset& delta) {
|
| m_contentAreaScrolledTimerScrollDelta = delta;
|
|
|
| if (!m_sendContentAreaScrolledTaskFactory->isPending())
|
| @@ -1101,7 +1120,7 @@ void ScrollAnimatorMac::sendContentAreaScrolledTask() {
|
| .width(),
|
| m_contentAreaScrolledTimerScrollDelta
|
| .height())];
|
| - m_contentAreaScrolledTimerScrollDelta = FloatSize();
|
| + m_contentAreaScrolledTimerScrollDelta = ScrollOffset();
|
| } else
|
| [m_scrollbarPainterController.get() contentAreaScrolled];
|
| }
|
|
|