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 |