| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2010, 2011 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 - (id)initWithScrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator; | 93 - (id)initWithScrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator; |
| 94 @end | 94 @end |
| 95 | 95 |
| 96 static NSSize abs(NSSize size) | 96 static NSSize abs(NSSize size) |
| 97 { | 97 { |
| 98 NSSize finalSize = size; | 98 NSSize finalSize = size; |
| 99 if (finalSize.width < 0) | 99 if (finalSize.width < 0) |
| 100 finalSize.width = -finalSize.width; | 100 finalSize.width = -finalSize.width; |
| 101 if (finalSize.height < 0) | 101 if (finalSize.height < 0) |
| 102 finalSize.height = -finalSize.height; | 102 finalSize.height = -finalSize.height; |
| 103 return finalSize; | 103 return finalSize; |
| 104 } | 104 } |
| 105 | 105 |
| 106 @implementation WebScrollAnimationHelperDelegate | 106 @implementation WebScrollAnimationHelperDelegate |
| 107 | 107 |
| 108 - (id)initWithScrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator | 108 - (id)initWithScrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator |
| 109 { | 109 { |
| 110 self = [super init]; | 110 self = [super init]; |
| 111 if (!self) | 111 if (!self) |
| 112 return nil; | 112 return nil; |
| 113 | 113 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 - (id)initWithScrollableArea:(ScrollableArea*)scrollableArea; | 189 - (id)initWithScrollableArea:(ScrollableArea*)scrollableArea; |
| 190 @end | 190 @end |
| 191 | 191 |
| 192 @implementation WebScrollbarPainterControllerDelegate | 192 @implementation WebScrollbarPainterControllerDelegate |
| 193 | 193 |
| 194 - (id)initWithScrollableArea:(ScrollableArea*)scrollableArea | 194 - (id)initWithScrollableArea:(ScrollableArea*)scrollableArea |
| 195 { | 195 { |
| 196 self = [super init]; | 196 self = [super init]; |
| 197 if (!self) | 197 if (!self) |
| 198 return nil; | 198 return nil; |
| 199 | 199 |
| 200 _scrollableArea = scrollableArea; | 200 _scrollableArea = scrollableArea; |
| 201 return self; | 201 return self; |
| 202 } | 202 } |
| 203 | 203 |
| 204 - (void)invalidate | 204 - (void)invalidate |
| 205 { | 205 { |
| 206 _scrollableArea = 0; | 206 _scrollableArea = 0; |
| 207 } | 207 } |
| 208 | 208 |
| 209 - (NSRect)contentAreaRectForScrollerImpPair:(id)scrollerImpPair | 209 - (NSRect)contentAreaRectForScrollerImpPair:(id)scrollerImpPair |
| (...skipping 23 matching lines...) Expand all Loading... |
| 233 | 233 |
| 234 - (NSPoint)scrollerImpPair:(id)scrollerImpPair convertContentPoint:(NSPoint)poin
tInContentArea toScrollerImp:(id)scrollerImp | 234 - (NSPoint)scrollerImpPair:(id)scrollerImpPair convertContentPoint:(NSPoint)poin
tInContentArea toScrollerImp:(id)scrollerImp |
| 235 { | 235 { |
| 236 | 236 |
| 237 if (!_scrollableArea || !scrollerImp) | 237 if (!_scrollableArea || !scrollerImp) |
| 238 return NSZeroPoint; | 238 return NSZeroPoint; |
| 239 | 239 |
| 240 WebCore::Scrollbar* scrollbar = 0; | 240 WebCore::Scrollbar* scrollbar = 0; |
| 241 if ([scrollerImp isHorizontal]) | 241 if ([scrollerImp isHorizontal]) |
| 242 scrollbar = _scrollableArea->horizontalScrollbar(); | 242 scrollbar = _scrollableArea->horizontalScrollbar(); |
| 243 else | 243 else |
| 244 scrollbar = _scrollableArea->verticalScrollbar(); | 244 scrollbar = _scrollableArea->verticalScrollbar(); |
| 245 | 245 |
| 246 // It is possible to have a null scrollbar here since it is possible for thi
s delegate | 246 // It is possible to have a null scrollbar here since it is possible for thi
s delegate |
| 247 // method to be called between the moment when a scrollbar has been set to 0
and the | 247 // method to be called between the moment when a scrollbar has been set to 0
and the |
| 248 // moment when its destructor has been called. We should probably de-couple
some | 248 // moment when its destructor has been called. We should probably de-couple
some |
| 249 // of the clean-up work in ScrollbarThemeMac::unregisterScrollbar() to avoid
this | 249 // of the clean-up work in ScrollbarThemeMac::unregisterScrollbar() to avoid
this |
| 250 // issue. | 250 // issue. |
| 251 if (!scrollbar) | 251 if (!scrollbar) |
| 252 return NSZeroPoint; | 252 return NSZeroPoint; |
| 253 | 253 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 394 - (void)cancelAnimations; | 394 - (void)cancelAnimations; |
| 395 @end | 395 @end |
| 396 | 396 |
| 397 @implementation WebScrollbarPainterDelegate | 397 @implementation WebScrollbarPainterDelegate |
| 398 | 398 |
| 399 - (id)initWithScrollbar:(WebCore::Scrollbar*)scrollbar | 399 - (id)initWithScrollbar:(WebCore::Scrollbar*)scrollbar |
| 400 { | 400 { |
| 401 self = [super init]; | 401 self = [super init]; |
| 402 if (!self) | 402 if (!self) |
| 403 return nil; | 403 return nil; |
| 404 | 404 |
| 405 _scrollbar = scrollbar; | 405 _scrollbar = scrollbar; |
| 406 return self; | 406 return self; |
| 407 } | 407 } |
| 408 | 408 |
| 409 - (void)cancelAnimations | 409 - (void)cancelAnimations |
| 410 { | 410 { |
| 411 BEGIN_BLOCK_OBJC_EXCEPTIONS; | 411 BEGIN_BLOCK_OBJC_EXCEPTIONS; |
| 412 [_knobAlphaAnimation.get() stopAnimation]; | 412 [_knobAlphaAnimation.get() stopAnimation]; |
| 413 [_trackAlphaAnimation.get() stopAnimation]; | 413 [_trackAlphaAnimation.get() stopAnimation]; |
| 414 [_uiStateTransitionAnimation.get() stopAnimation]; | 414 [_uiStateTransitionAnimation.get() stopAnimation]; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 436 if (!_scrollbar) | 436 if (!_scrollbar) |
| 437 return NSZeroPoint; | 437 return NSZeroPoint; |
| 438 | 438 |
| 439 ASSERT_UNUSED(scrollerImp, scrollerImp == scrollbarPainterForScrollbar(_scro
llbar)); | 439 ASSERT_UNUSED(scrollerImp, scrollerImp == scrollbarPainterForScrollbar(_scro
llbar)); |
| 440 | 440 |
| 441 return _scrollbar->convertFromContainingView(_scrollbar->scrollableArea()->l
astKnownMousePosition()); | 441 return _scrollbar->convertFromContainingView(_scrollbar->scrollableArea()->l
astKnownMousePosition()); |
| 442 } | 442 } |
| 443 | 443 |
| 444 - (void)setUpAlphaAnimation:(RetainPtr<WebScrollbarPartAnimation>&)scrollbarPart
Animation scrollerPainter:(ScrollbarPainter)scrollerPainter part:(WebCore::Scrol
lbarPart)part animateAlphaTo:(CGFloat)newAlpha duration:(NSTimeInterval)duration | 444 - (void)setUpAlphaAnimation:(RetainPtr<WebScrollbarPartAnimation>&)scrollbarPart
Animation scrollerPainter:(ScrollbarPainter)scrollerPainter part:(WebCore::Scrol
lbarPart)part animateAlphaTo:(CGFloat)newAlpha duration:(NSTimeInterval)duration |
| 445 { | 445 { |
| 446 // If the user has scrolled the page, then the scrollbars must be animated h
ere. | 446 // If the user has scrolled the page, then the scrollbars must be animated h
ere. |
| 447 // This overrides the early returns. | 447 // This overrides the early returns. |
| 448 bool mustAnimate = [self scrollAnimator]->haveScrolledSincePageLoad(); | 448 bool mustAnimate = [self scrollAnimator]->haveScrolledSincePageLoad(); |
| 449 | 449 |
| 450 if ([self scrollAnimator]->scrollbarPaintTimerIsActive() && !mustAnimate) | 450 if ([self scrollAnimator]->scrollbarPaintTimerIsActive() && !mustAnimate) |
| 451 return; | 451 return; |
| 452 | 452 |
| 453 if (_scrollbar->scrollableArea()->shouldSuspendScrollAnimations() && !mustAn
imate) { | 453 if (_scrollbar->scrollableArea()->shouldSuspendScrollAnimations() && !mustAn
imate) { |
| 454 [self scrollAnimator]->startScrollbarPaintTimer(); | 454 [self scrollAnimator]->startScrollbarPaintTimer(); |
| 455 return; | 455 return; |
| 456 } | 456 } |
| 457 | 457 |
| 458 // At this point, we are definitely going to animate now, so stop the timer. | 458 // At this point, we are definitely going to animate now, so stop the timer. |
| 459 [self scrollAnimator]->stopScrollbarPaintTimer(); | 459 [self scrollAnimator]->stopScrollbarPaintTimer(); |
| 460 | 460 |
| 461 // If we are currently animating, stop | 461 // If we are currently animating, stop |
| 462 if (scrollbarPartAnimation) { | 462 if (scrollbarPartAnimation) { |
| 463 [scrollbarPartAnimation.get() stopAnimation]; | 463 [scrollbarPartAnimation.get() stopAnimation]; |
| 464 scrollbarPartAnimation = nil; | 464 scrollbarPartAnimation = nil; |
| 465 } | 465 } |
| 466 | 466 |
| 467 if (part == WebCore::ThumbPart && _scrollbar->orientation() == VerticalScrol
lbar) { | 467 if (part == WebCore::ThumbPart && _scrollbar->orientation() == VerticalScrol
lbar) { |
| 468 if (newAlpha == 1) { | 468 if (newAlpha == 1) { |
| 469 IntRect thumbRect = IntRect([scrollerPainter rectForPart:NSScrollerK
nob]); | 469 IntRect thumbRect = IntRect([scrollerPainter rectForPart:NSScrollerK
nob]); |
| 470 [self scrollAnimator]->setVisibleScrollerThumbRect(thumbRect); | 470 [self scrollAnimator]->setVisibleScrollerThumbRect(thumbRect); |
| 471 } else | 471 } else |
| 472 [self scrollAnimator]->setVisibleScrollerThumbRect(IntRect()); | 472 [self scrollAnimator]->setVisibleScrollerThumbRect(IntRect()); |
| 473 } | 473 } |
| 474 | 474 |
| 475 scrollbarPartAnimation.adoptNS([[WebScrollbarPartAnimation alloc] initWithSc
rollbar:_scrollbar | 475 scrollbarPartAnimation.adoptNS([[WebScrollbarPartAnimation alloc] initWithSc
rollbar:_scrollbar |
| 476 featureTo
Animate:part == ThumbPart ? ThumbAlpha : TrackAlpha | 476 featureTo
Animate:part == ThumbPart ? ThumbAlpha : TrackAlpha |
| 477 anim
ateFrom:part == ThumbPart ? [scrollerPainter knobAlpha] : [scrollerPainter track
Alpha] | 477 anim
ateFrom:part == ThumbPart ? [scrollerPainter knobAlpha] : [scrollerPainter track
Alpha] |
| 478 an
imateTo:newAlpha | 478 an
imateTo:newAlpha |
| 479 d
uration:duration]); | 479 d
uration:duration]); |
| 480 [scrollbarPartAnimation.get() startAnimation]; | 480 [scrollbarPartAnimation.get() startAnimation]; |
| 481 } | 481 } |
| 482 | 482 |
| 483 - (void)scrollerImp:(id)scrollerImp animateKnobAlphaTo:(CGFloat)newKnobAlpha dur
ation:(NSTimeInterval)duration | 483 - (void)scrollerImp:(id)scrollerImp animateKnobAlphaTo:(CGFloat)newKnobAlpha dur
ation:(NSTimeInterval)duration |
| 484 { | 484 { |
| 485 if (!_scrollbar) | 485 if (!_scrollbar) |
| 486 return; | 486 return; |
| 487 | 487 |
| 488 ASSERT(scrollerImp == scrollbarPainterForScrollbar(_scrollbar)); | 488 ASSERT(scrollerImp == scrollbarPainterForScrollbar(_scrollbar)); |
| 489 | 489 |
| 490 ScrollbarPainter scrollerPainter = (ScrollbarPainter)scrollerImp; | 490 ScrollbarPainter scrollerPainter = (ScrollbarPainter)scrollerImp; |
| 491 [self setUpAlphaAnimation:_knobAlphaAnimation scrollerPainter:scrollerPainte
r part:WebCore::ThumbPart animateAlphaTo:newKnobAlpha duration:duration]; | 491 [self setUpAlphaAnimation:_knobAlphaAnimation scrollerPainter:scrollerPainte
r part:WebCore::ThumbPart animateAlphaTo:newKnobAlpha duration:duration]; |
| 492 } | 492 } |
| 493 | 493 |
| 494 - (void)scrollerImp:(id)scrollerImp animateTrackAlphaTo:(CGFloat)newTrackAlpha d
uration:(NSTimeInterval)duration | 494 - (void)scrollerImp:(id)scrollerImp animateTrackAlphaTo:(CGFloat)newTrackAlpha d
uration:(NSTimeInterval)duration |
| 495 { | 495 { |
| 496 if (!_scrollbar) | 496 if (!_scrollbar) |
| 497 return; | 497 return; |
| 498 | 498 |
| 499 ASSERT(scrollerImp == scrollbarPainterForScrollbar(_scrollbar)); | 499 ASSERT(scrollerImp == scrollbarPainterForScrollbar(_scrollbar)); |
| 500 | 500 |
| 501 ScrollbarPainter scrollerPainter = (ScrollbarPainter)scrollerImp; | 501 ScrollbarPainter scrollerPainter = (ScrollbarPainter)scrollerImp; |
| 502 [self setUpAlphaAnimation:_trackAlphaAnimation scrollerPainter:scrollerPaint
er part:WebCore::BackTrackPart animateAlphaTo:newTrackAlpha duration:duration]; | 502 [self setUpAlphaAnimation:_trackAlphaAnimation scrollerPainter:scrollerPaint
er part:WebCore::BackTrackPart animateAlphaTo:newTrackAlpha duration:duration]; |
| 503 } | 503 } |
| 504 | 504 |
| 505 - (void)scrollerImp:(id)scrollerImp animateUIStateTransitionWithDuration:(NSTime
Interval)duration | 505 - (void)scrollerImp:(id)scrollerImp animateUIStateTransitionWithDuration:(NSTime
Interval)duration |
| 506 { | 506 { |
| 507 if (!_scrollbar) | 507 if (!_scrollbar) |
| 508 return; | 508 return; |
| 509 | 509 |
| 510 if (!supportsUIStateTransitionProgress()) | 510 if (!supportsUIStateTransitionProgress()) |
| 511 return; | 511 return; |
| 512 | 512 |
| 513 ASSERT(scrollerImp == scrollbarPainterForScrollbar(_scrollbar)); | 513 ASSERT(scrollerImp == scrollbarPainterForScrollbar(_scrollbar)); |
| 514 | 514 |
| 515 ScrollbarPainter scrollbarPainter = (ScrollbarPainter)scrollerImp; | 515 ScrollbarPainter scrollbarPainter = (ScrollbarPainter)scrollerImp; |
| 516 | 516 |
| 517 // UIStateTransition always animates to 1. In case an animation is in progre
ss this avoids a hard transition. | 517 // UIStateTransition always animates to 1. In case an animation is in progre
ss this avoids a hard transition. |
| 518 [scrollbarPainter setUiStateTransitionProgress:1 - [scrollerImp uiStateTrans
itionProgress]]; | 518 [scrollbarPainter setUiStateTransitionProgress:1 - [scrollerImp uiStateTrans
itionProgress]]; |
| 519 | 519 |
| 520 if (!_uiStateTransitionAnimation) | 520 if (!_uiStateTransitionAnimation) |
| 521 _uiStateTransitionAnimation.adoptNS([[WebScrollbarPartAnimation alloc] i
nitWithScrollbar:_scrollbar | 521 _uiStateTransitionAnimation.adoptNS([[WebScrollbarPartAnimation alloc] i
nitWithScrollbar:_scrollbar |
| 522
featureToAnimate:UIStateTransition | 522
featureToAnimate:UIStateTransition |
| 523
animateFrom:[scrollbarPainter uiStateTransitionProgress] | 523
animateFrom:[scrollbarPainter uiStateTransitionProgress] |
| 524
animateTo:1.0 | 524
animateTo:1.0 |
| 525
duration:duration]); | 525
duration:duration]); |
| 526 else { | 526 else { |
| 527 // If we don't need to initialize the animation, just reset the values i
n case they have changed. | 527 // If we don't need to initialize the animation, just reset the values i
n case they have changed. |
| 528 [_uiStateTransitionAnimation.get() setStartValue:[scrollbarPainter uiSta
teTransitionProgress]]; | 528 [_uiStateTransitionAnimation.get() setStartValue:[scrollbarPainter uiSta
teTransitionProgress]]; |
| 529 [_uiStateTransitionAnimation.get() setEndValue:1.0]; | 529 [_uiStateTransitionAnimation.get() setEndValue:1.0]; |
| 530 [_uiStateTransitionAnimation.get() setDuration:duration]; | 530 [_uiStateTransitionAnimation.get() setDuration:duration]; |
| 531 } | 531 } |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 [m_scrollbarPainterController.get() setDelegate:nil]; | 616 [m_scrollbarPainterController.get() setDelegate:nil]; |
| 617 [m_horizontalScrollbarPainterDelegate.get() invalidate]; | 617 [m_horizontalScrollbarPainterDelegate.get() invalidate]; |
| 618 [m_verticalScrollbarPainterDelegate.get() invalidate]; | 618 [m_verticalScrollbarPainterDelegate.get() invalidate]; |
| 619 [m_scrollAnimationHelperDelegate.get() invalidate]; | 619 [m_scrollAnimationHelperDelegate.get() invalidate]; |
| 620 END_BLOCK_OBJC_EXCEPTIONS; | 620 END_BLOCK_OBJC_EXCEPTIONS; |
| 621 } | 621 } |
| 622 } | 622 } |
| 623 | 623 |
| 624 static bool scrollAnimationEnabledForSystem() | 624 static bool scrollAnimationEnabledForSystem() |
| 625 { | 625 { |
| 626 NSString* scrollAnimationDefaultsKey = | 626 NSString* scrollAnimationDefaultsKey = |
| 627 @"AppleScrollAnimationEnabled"; | 627 @"AppleScrollAnimationEnabled"; |
| 628 static bool enabled = [[NSUserDefaults standardUserDefaults] boolForKey:scro
llAnimationDefaultsKey]; | 628 static bool enabled = [[NSUserDefaults standardUserDefaults] boolForKey:scro
llAnimationDefaultsKey]; |
| 629 return enabled; | 629 return enabled; |
| 630 } | 630 } |
| 631 | 631 |
| 632 #if USE(RUBBER_BANDING) | 632 #if USE(RUBBER_BANDING) |
| 633 static bool rubberBandingEnabledForSystem() | 633 static bool rubberBandingEnabledForSystem() |
| 634 { | 634 { |
| 635 static bool initialized = false; | 635 static bool initialized = false; |
| 636 static bool enabled = true; | 636 static bool enabled = true; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 | 689 |
| 690 float newX = max<float>(min<float>(position.x(), maxPos.x()), minPos.x()); | 690 float newX = max<float>(min<float>(position.x(), maxPos.x()), minPos.x()); |
| 691 float newY = max<float>(min<float>(position.y(), maxPos.y()), minPos.y()); | 691 float newY = max<float>(min<float>(position.y(), maxPos.y()), minPos.y()); |
| 692 | 692 |
| 693 return FloatPoint(newX, newY); | 693 return FloatPoint(newX, newY); |
| 694 } | 694 } |
| 695 | 695 |
| 696 void ScrollAnimatorMac::immediateScrollTo(const FloatPoint& newPosition) | 696 void ScrollAnimatorMac::immediateScrollTo(const FloatPoint& newPosition) |
| 697 { | 697 { |
| 698 FloatPoint adjustedPosition = adjustScrollPositionIfNecessary(newPosition); | 698 FloatPoint adjustedPosition = adjustScrollPositionIfNecessary(newPosition); |
| 699 | 699 |
| 700 bool positionChanged = adjustedPosition.x() != m_currentPosX || adjustedPosi
tion.y() != m_currentPosY; | 700 bool positionChanged = adjustedPosition.x() != m_currentPosX || adjustedPosi
tion.y() != m_currentPosY; |
| 701 if (!positionChanged && !scrollableArea()->scrollOriginChanged()) | 701 if (!positionChanged && !scrollableArea()->scrollOriginChanged()) |
| 702 return; | 702 return; |
| 703 | 703 |
| 704 FloatSize delta = FloatSize(adjustedPosition.x() - m_currentPosX, adjustedPo
sition.y() - m_currentPosY); | 704 FloatSize delta = FloatSize(adjustedPosition.x() - m_currentPosX, adjustedPo
sition.y() - m_currentPosY); |
| 705 | 705 |
| 706 m_currentPosX = adjustedPosition.x(); | 706 m_currentPosX = adjustedPosition.x(); |
| 707 m_currentPosY = adjustedPosition.y(); | 707 m_currentPosY = adjustedPosition.y(); |
| 708 notifyPositionChanged(delta); | 708 notifyPositionChanged(delta); |
| 709 } | 709 } |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 956 if (!painter) | 956 if (!painter) |
| 957 return false; | 957 return false; |
| 958 return [painter knobAlpha] > 0; | 958 return [painter knobAlpha] > 0; |
| 959 } | 959 } |
| 960 | 960 |
| 961 void ScrollAnimatorMac::notifyContentAreaScrolled(const FloatSize& delta) | 961 void ScrollAnimatorMac::notifyContentAreaScrolled(const FloatSize& delta) |
| 962 { | 962 { |
| 963 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) | 963 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) |
| 964 return; | 964 return; |
| 965 | 965 |
| 966 // This function is called when a page is going into the page cache, but the
page | 966 // This function is called when a page is going into the page cache, but the
page |
| 967 // isn't really scrolling in that case. We should only pass the message on t
o the | 967 // isn't really scrolling in that case. We should only pass the message on t
o the |
| 968 // ScrollbarPainterController when we're really scrolling on an active page. | 968 // ScrollbarPainterController when we're really scrolling on an active page. |
| 969 if (scrollableArea()->scrollbarsCanBeActive()) | 969 if (scrollableArea()->scrollbarsCanBeActive()) |
| 970 sendContentAreaScrolledSoon(delta); | 970 sendContentAreaScrolledSoon(delta); |
| 971 } | 971 } |
| 972 | 972 |
| 973 void ScrollAnimatorMac::cancelAnimations() | 973 void ScrollAnimatorMac::cancelAnimations() |
| 974 { | 974 { |
| 975 m_haveScrolledSincePageLoad = false; | 975 m_haveScrolledSincePageLoad = false; |
| 976 | 976 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 990 | 990 |
| 991 if (phase == PlatformWheelEventPhaseBegan) | 991 if (phase == PlatformWheelEventPhaseBegan) |
| 992 didBeginScrollGesture(); | 992 didBeginScrollGesture(); |
| 993 else if (phase == PlatformWheelEventPhaseEnded || phase == PlatformWheelEven
tPhaseCancelled) | 993 else if (phase == PlatformWheelEventPhaseEnded || phase == PlatformWheelEven
tPhaseCancelled) |
| 994 didEndScrollGesture(); | 994 didEndScrollGesture(); |
| 995 else if (phase == PlatformWheelEventPhaseMayBegin) | 995 else if (phase == PlatformWheelEventPhaseMayBegin) |
| 996 mayBeginScrollGesture(); | 996 mayBeginScrollGesture(); |
| 997 } | 997 } |
| 998 | 998 |
| 999 #if USE(RUBBER_BANDING) | 999 #if USE(RUBBER_BANDING) |
| 1000 bool ScrollAnimatorMac::handleWheelEvent(const PlatformWheelEvent& wheelEvent) | 1000 bool ScrollAnimatorMac::handleWheelEvent(const PlatformWheelEvent& wheelEvent, b
ool canRubberbandLeft, bool canRubberbandRight) |
| 1001 { | 1001 { |
| 1002 m_haveScrolledSincePageLoad = true; | 1002 m_haveScrolledSincePageLoad = true; |
| 1003 | 1003 |
| 1004 if (!wheelEvent.hasPreciseScrollingDeltas() || !rubberBandingEnabledForSyste
m()) | 1004 if (!wheelEvent.hasPreciseScrollingDeltas() || !rubberBandingEnabledForSyste
m()) |
| 1005 return ScrollAnimator::handleWheelEvent(wheelEvent); | 1005 return ScrollAnimator::handleWheelEvent(wheelEvent, canRubberbandLeft, c
anRubberbandRight); |
| 1006 | 1006 |
| 1007 // FIXME: This is somewhat roundabout hack to allow forwarding wheel events | 1007 // FIXME: This is somewhat roundabout hack to allow forwarding wheel events |
| 1008 // up to the parent scrollable area. It takes advantage of the fact that | 1008 // up to the parent scrollable area. It takes advantage of the fact that |
| 1009 // the base class implementation of handleWheelEvent will not accept the | 1009 // the base class implementation of handleWheelEvent will not accept the |
| 1010 // wheel event if there is nowhere to scroll. | 1010 // wheel event if there is nowhere to scroll. |
| 1011 if (fabsf(wheelEvent.deltaY()) >= fabsf(wheelEvent.deltaX())) { | 1011 if (fabsf(wheelEvent.deltaY()) >= fabsf(wheelEvent.deltaX())) { |
| 1012 if (!allowsVerticalStretching()) | 1012 if (!allowsVerticalStretching()) |
| 1013 return ScrollAnimator::handleWheelEvent(wheelEvent); | 1013 return ScrollAnimator::handleWheelEvent(wheelEvent, canRubberbandLef
t, canRubberbandRight); |
| 1014 } else { | 1014 } else { |
| 1015 if (!allowsHorizontalStretching()) | 1015 if (!allowsHorizontalStretching()) |
| 1016 return ScrollAnimator::handleWheelEvent(wheelEvent); | 1016 return ScrollAnimator::handleWheelEvent(wheelEvent, canRubberbandLef
t, canRubberbandRight); |
| 1017 } | 1017 } |
| 1018 | 1018 |
| 1019 bool didHandleEvent = m_scrollElasticityController.handleWheelEvent(wheelEve
nt); | 1019 bool didHandleEvent = m_scrollElasticityController.handleWheelEvent(wheelEve
nt, canRubberbandLeft, canRubberbandRight); |
| 1020 | 1020 |
| 1021 // The elasticity controller can return false on a phase end event if rubber
banding wasn't in progress. | 1021 // The elasticity controller can return false on a phase end event if rubber
banding wasn't in progress. |
| 1022 // In this case, the wheel phase must still be handled so that that overlay
scroll bars get hidden. | 1022 // In this case, the wheel phase must still be handled so that that overlay
scroll bars get hidden. |
| 1023 if (didHandleEvent || wheelEvent.phase() == PlatformWheelEventPhaseEnded ||
wheelEvent.phase() == PlatformWheelEventPhaseCancelled) | 1023 if (didHandleEvent || wheelEvent.phase() == PlatformWheelEventPhaseEnded ||
wheelEvent.phase() == PlatformWheelEventPhaseCancelled) |
| 1024 handleWheelEventPhase(wheelEvent.phase()); | 1024 handleWheelEventPhase(wheelEvent.phase()); |
| 1025 | 1025 |
| 1026 return didHandleEvent; | 1026 return didHandleEvent; |
| 1027 } | 1027 } |
| 1028 | 1028 |
| 1029 bool ScrollAnimatorMac::pinnedInDirection(float deltaX, float deltaY) | 1029 bool ScrollAnimatorMac::pinnedInDirection(float deltaX, float deltaY) |
| 1030 { | 1030 { |
| 1031 FloatSize limitDelta; | 1031 FloatSize limitDelta; |
| 1032 if (fabsf(deltaY) >= fabsf(deltaX)) { | 1032 if (fabsf(deltaY) >= fabsf(deltaX)) { |
| 1033 if (deltaY < 0) { | 1033 if (deltaY < 0) { |
| 1034 // We are trying to scroll up. Make sure we are not pinned to the t
op | 1034 // We are trying to scroll up. Make sure we are not pinned to the t
op |
| 1035 limitDelta.setHeight(m_scrollableArea->visibleContentRect().y() + +
m_scrollableArea->scrollOrigin().y()); | 1035 limitDelta.setHeight(m_scrollableArea->visibleContentRect().y() + +
m_scrollableArea->scrollOrigin().y()); |
| 1036 } else { | 1036 } else { |
| 1037 // We are trying to scroll down. Make sure we are not pinned to the
bottom | 1037 // We are trying to scroll down. Make sure we are not pinned to the
bottom |
| 1038 limitDelta.setHeight(m_scrollableArea->contentsSize().height() - (m_
scrollableArea->visibleContentRect().maxY() + m_scrollableArea->scrollOrigin().y
())); | 1038 limitDelta.setHeight(m_scrollableArea->contentsSize().height() - (m_
scrollableArea->visibleContentRect().maxY() + m_scrollableArea->scrollOrigin().y
())); |
| 1039 } | 1039 } |
| 1040 } else if (deltaX != 0) { | 1040 } else if (deltaX != 0) { |
| 1041 if (deltaX < 0) { | 1041 if (deltaX < 0) { |
| 1042 // We are trying to scroll left. Make sure we are not pinned to the
left | 1042 // We are trying to scroll left. Make sure we are not pinned to the
left |
| 1043 limitDelta.setWidth(m_scrollableArea->visibleContentRect().x() + m_s
crollableArea->scrollOrigin().x()); | 1043 limitDelta.setWidth(m_scrollableArea->visibleContentRect().x() + m_s
crollableArea->scrollOrigin().x()); |
| 1044 } else { | 1044 } else { |
| 1045 // We are trying to scroll right. Make sure we are not pinned to th
e right | 1045 // We are trying to scroll right. Make sure we are not pinned to th
e right |
| 1046 limitDelta.setWidth(m_scrollableArea->contentsSize().width() - (m_sc
rollableArea->visibleContentRect().maxX() + m_scrollableArea->scrollOrigin().x()
)); | 1046 limitDelta.setWidth(m_scrollableArea->contentsSize().width() - (m_sc
rollableArea->visibleContentRect().maxX() + m_scrollableArea->scrollOrigin().x()
)); |
| 1047 } | 1047 } |
| 1048 } | 1048 } |
| 1049 | 1049 |
| 1050 if ((deltaX != 0 || deltaY != 0) && (limitDelta.width() < 1 && limitDelta.he
ight() < 1)) | 1050 if ((deltaX != 0 || deltaY != 0) && (limitDelta.width() < 1 && limitDelta.he
ight() < 1)) |
| 1051 return true; | 1051 return true; |
| 1052 return false; | 1052 return false; |
| 1053 } | 1053 } |
| 1054 | 1054 |
| 1055 bool ScrollAnimatorMac::allowsVerticalStretching() | 1055 bool ScrollAnimatorMac::allowsVerticalStretching() |
| 1056 { | 1056 { |
| 1057 switch (m_scrollableArea->verticalScrollElasticity()) { | 1057 switch (m_scrollableArea->verticalScrollElasticity()) { |
| 1058 case ScrollElasticityAutomatic: { | 1058 case ScrollElasticityAutomatic: { |
| 1059 Scrollbar* hScroller = m_scrollableArea->horizontalScrollbar(); | 1059 Scrollbar* hScroller = m_scrollableArea->horizontalScrollbar(); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1186 m_needsScrollerStyleUpdate = false; | 1186 m_needsScrollerStyleUpdate = false; |
| 1187 return; | 1187 return; |
| 1188 } | 1188 } |
| 1189 | 1189 |
| 1190 NSScrollerStyle newStyle = [m_scrollbarPainterController.get() scrollerStyle
]; | 1190 NSScrollerStyle newStyle = [m_scrollbarPainterController.get() scrollerStyle
]; |
| 1191 | 1191 |
| 1192 if (Scrollbar* verticalScrollbar = scrollableArea()->verticalScrollbar()) { | 1192 if (Scrollbar* verticalScrollbar = scrollableArea()->verticalScrollbar()) { |
| 1193 verticalScrollbar->invalidate(); | 1193 verticalScrollbar->invalidate(); |
| 1194 | 1194 |
| 1195 ScrollbarPainter oldVerticalPainter = [m_scrollbarPainterController.get(
) verticalScrollerImp]; | 1195 ScrollbarPainter oldVerticalPainter = [m_scrollbarPainterController.get(
) verticalScrollerImp]; |
| 1196 ScrollbarPainter newVerticalPainter = [NSClassFromString(@"NSScrollerImp
") scrollerImpWithStyle:newStyle | 1196 ScrollbarPainter newVerticalPainter = [NSClassFromString(@"NSScrollerImp
") scrollerImpWithStyle:newStyle |
| 1197
controlSize:(NSControlSize)verticalScrollbar->controlSize() | 1197
controlSize:(NSControlSize)verticalScrollbar->controlSize() |
| 1198
horizontal:NO | 1198
horizontal:NO |
| 1199
replacingScrollerImp:oldVerticalPainter]; | 1199
replacingScrollerImp:oldVerticalPainter]; |
| 1200 [m_scrollbarPainterController.get() setVerticalScrollerImp:newVerticalPa
inter]; | 1200 [m_scrollbarPainterController.get() setVerticalScrollerImp:newVerticalPa
inter]; |
| 1201 macTheme->setNewPainterForScrollbar(verticalScrollbar, newVerticalPainte
r); | 1201 macTheme->setNewPainterForScrollbar(verticalScrollbar, newVerticalPainte
r); |
| 1202 | 1202 |
| 1203 // The different scrollbar styles have different thicknesses, so we must
re-set the | 1203 // The different scrollbar styles have different thicknesses, so we must
re-set the |
| 1204 // frameRect to the new thickness, and the re-layout below will ensure t
he position | 1204 // frameRect to the new thickness, and the re-layout below will ensure t
he position |
| 1205 // and length are properly updated. | 1205 // and length are properly updated. |
| 1206 int thickness = macTheme->scrollbarThickness(verticalScrollbar->controlS
ize()); | 1206 int thickness = macTheme->scrollbarThickness(verticalScrollbar->controlS
ize()); |
| 1207 verticalScrollbar->setFrameRect(IntRect(0, 0, thickness, thickness)); | 1207 verticalScrollbar->setFrameRect(IntRect(0, 0, thickness, thickness)); |
| 1208 } | 1208 } |
| 1209 | 1209 |
| 1210 if (Scrollbar* horizontalScrollbar = scrollableArea()->horizontalScrollbar()
) { | 1210 if (Scrollbar* horizontalScrollbar = scrollableArea()->horizontalScrollbar()
) { |
| 1211 horizontalScrollbar->invalidate(); | 1211 horizontalScrollbar->invalidate(); |
| 1212 | 1212 |
| 1213 ScrollbarPainter oldHorizontalPainter = [m_scrollbarPainterController.ge
t() horizontalScrollerImp]; | 1213 ScrollbarPainter oldHorizontalPainter = [m_scrollbarPainterController.ge
t() horizontalScrollerImp]; |
| 1214 ScrollbarPainter newHorizontalPainter = [NSClassFromString(@"NSScrollerI
mp") scrollerImpWithStyle:newStyle | 1214 ScrollbarPainter newHorizontalPainter = [NSClassFromString(@"NSScrollerI
mp") scrollerImpWithStyle:newStyle |
| 1215
controlSize:(NSControlSize)horizontalScrollbar->controlSize() | 1215
controlSize:(NSControlSize)horizontalScrollbar->controlSize() |
| 1216
horizontal:YES | 1216
horizontal:YES |
| 1217
replacingScrollerImp:oldHorizontalPainter]; | 1217
replacingScrollerImp:oldHorizontalPainter]; |
| 1218 [m_scrollbarPainterController.get() setHorizontalScrollerImp:newHorizont
alPainter]; | 1218 [m_scrollbarPainterController.get() setHorizontalScrollerImp:newHorizont
alPainter]; |
| 1219 macTheme->setNewPainterForScrollbar(horizontalScrollbar, newHorizontalPa
inter); | 1219 macTheme->setNewPainterForScrollbar(horizontalScrollbar, newHorizontalPa
inter); |
| 1220 | 1220 |
| 1221 // The different scrollbar styles have different thicknesses, so we must
re-set the | 1221 // The different scrollbar styles have different thicknesses, so we must
re-set the |
| 1222 // frameRect to the new thickness, and the re-layout below will ensure t
he position | 1222 // frameRect to the new thickness, and the re-layout below will ensure t
he position |
| 1223 // and length are properly updated. | 1223 // and length are properly updated. |
| 1224 int thickness = macTheme->scrollbarThickness(horizontalScrollbar->contro
lSize()); | 1224 int thickness = macTheme->scrollbarThickness(horizontalScrollbar->contro
lSize()); |
| 1225 horizontalScrollbar->setFrameRect(IntRect(0, 0, thickness, thickness)); | 1225 horizontalScrollbar->setFrameRect(IntRect(0, 0, thickness, thickness)); |
| 1226 } | 1226 } |
| 1227 | 1227 |
| 1228 // If m_needsScrollerStyleUpdate is true, then the page is restoring from th
e page cache, and | 1228 // If m_needsScrollerStyleUpdate is true, then the page is restoring from th
e page cache, and |
| 1229 // a relayout will happen on its own. Otherwise, we must initiate a re-layou
t ourselves. | 1229 // a relayout will happen on its own. Otherwise, we must initiate a re-layou
t ourselves. |
| 1230 scrollableArea()->scrollbarStyleChanged(newStyle, !m_needsScrollerStyleUpdat
e); | 1230 scrollableArea()->scrollbarStyleChanged(newStyle, !m_needsScrollerStyleUpdat
e); |
| 1231 | 1231 |
| 1232 m_needsScrollerStyleUpdate = false; | 1232 m_needsScrollerStyleUpdate = false; |
| 1233 } | 1233 } |
| 1234 | 1234 |
| 1235 void ScrollAnimatorMac::startScrollbarPaintTimer() | 1235 void ScrollAnimatorMac::startScrollbarPaintTimer() |
| 1236 { | 1236 { |
| 1237 m_initialScrollbarPaintTimer.startOneShot(0.1); | 1237 m_initialScrollbarPaintTimer.startOneShot(0.1); |
| 1238 } | 1238 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1284 return; | 1284 return; |
| 1285 | 1285 |
| 1286 m_visibleScrollerThumbRect = rectInViewCoordinates; | 1286 m_visibleScrollerThumbRect = rectInViewCoordinates; |
| 1287 } | 1287 } |
| 1288 | 1288 |
| 1289 bool ScrollAnimatorMac::canUseCoordinatedScrollbar() { | 1289 bool ScrollAnimatorMac::canUseCoordinatedScrollbar() { |
| 1290 return ScrollbarThemeMacCommon::isOverlayAPIAvailable(); | 1290 return ScrollbarThemeMacCommon::isOverlayAPIAvailable(); |
| 1291 } | 1291 } |
| 1292 | 1292 |
| 1293 } // namespace WebCore | 1293 } // namespace WebCore |
| OLD | NEW |