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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 | 59 |
60 static bool supportsContentAreaScrolledInDirection() | 60 static bool supportsContentAreaScrolledInDirection() |
61 { | 61 { |
62 static bool globalSupportsContentAreaScrolledInDirection = [NSClassFromStrin
g(@"NSScrollerImpPair") instancesRespondToSelector:@selector(contentAreaScrolled
InDirection:)]; | 62 static bool globalSupportsContentAreaScrolledInDirection = [NSClassFromStrin
g(@"NSScrollerImpPair") instancesRespondToSelector:@selector(contentAreaScrolled
InDirection:)]; |
63 return globalSupportsContentAreaScrolledInDirection; | 63 return globalSupportsContentAreaScrolledInDirection; |
64 } | 64 } |
65 | 65 |
66 static ScrollbarThemeMacOverlayAPI* macOverlayScrollbarTheme() | 66 static ScrollbarThemeMacOverlayAPI* macOverlayScrollbarTheme() |
67 { | 67 { |
68 RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(ScrollbarThemeMacCommon::isOverlayA
PIAvailable()); | 68 RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(ScrollbarThemeMacCommon::isOverlayA
PIAvailable()); |
69 ScrollbarTheme* scrollbarTheme = ScrollbarTheme::theme(); | 69 ScrollbarTheme& scrollbarTheme = ScrollbarTheme::theme(); |
70 return !scrollbarTheme->isMockTheme() ? static_cast<ScrollbarThemeMacOverlay
API*>(scrollbarTheme) : 0; | 70 return !scrollbarTheme.isMockTheme() ? static_cast<ScrollbarThemeMacOverlayA
PI*>(&scrollbarTheme) : nil; |
71 } | 71 } |
72 | 72 |
73 static ScrollbarPainter scrollbarPainterForScrollbar(Scrollbar* scrollbar) | 73 static ScrollbarPainter scrollbarPainterForScrollbar(Scrollbar& scrollbar) |
74 { | 74 { |
75 if (ScrollbarThemeMacOverlayAPI* scrollbarTheme = macOverlayScrollbarTheme()
) | 75 if (ScrollbarThemeMacOverlayAPI* scrollbarTheme = macOverlayScrollbarTheme()
) |
76 return scrollbarTheme->painterForScrollbar(scrollbar); | 76 return scrollbarTheme->painterForScrollbar(scrollbar); |
77 | 77 |
78 return nil; | 78 return nil; |
79 } | 79 } |
80 | 80 |
81 @interface NSObject (ScrollAnimationHelperDetails) | 81 @interface NSObject (ScrollAnimationHelperDetails) |
82 - (id)initWithDelegate:(id)delegate; | 82 - (id)initWithDelegate:(id)delegate; |
83 - (void)_stopRun; | 83 - (void)_stopRun; |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 | 230 |
231 return _scrollableArea->lastKnownMousePosition(); | 231 return _scrollableArea->lastKnownMousePosition(); |
232 } | 232 } |
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 blink::Scrollbar* scrollbar = 0; | 240 blink::Scrollbar* scrollbar = nil; |
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 |
254 ASSERT(scrollerImp == scrollbarPainterForScrollbar(scrollbar)); | 254 ASSERT(scrollerImp == scrollbarPainterForScrollbar(*scrollbar)); |
255 | 255 |
256 return scrollbar->convertFromContainingWidget(blink::IntPoint(pointInContent
Area)); | 256 return scrollbar->convertFromContainingWidget(blink::IntPoint(pointInContent
Area)); |
257 } | 257 } |
258 | 258 |
259 - (void)scrollerImpPair:(id)scrollerImpPair setContentAreaNeedsDisplayInRect:(NS
Rect)rect | 259 - (void)scrollerImpPair:(id)scrollerImpPair setContentAreaNeedsDisplayInRect:(NS
Rect)rect |
260 { | 260 { |
261 if (!_scrollableArea) | 261 if (!_scrollableArea) |
262 return; | 262 return; |
263 | 263 |
264 if (!_scrollableArea->scrollbarsCanBeActive()) | 264 if (!_scrollableArea->scrollbarsCanBeActive()) |
265 return; | 265 return; |
266 | 266 |
267 _scrollableArea->scrollAnimator()->contentAreaWillPaint(); | 267 _scrollableArea->scrollAnimator().contentAreaWillPaint(); |
268 } | 268 } |
269 | 269 |
270 - (void)scrollerImpPair:(id)scrollerImpPair updateScrollerStyleForNewRecommended
ScrollerStyle:(NSScrollerStyle)newRecommendedScrollerStyle | 270 - (void)scrollerImpPair:(id)scrollerImpPair updateScrollerStyleForNewRecommended
ScrollerStyle:(NSScrollerStyle)newRecommendedScrollerStyle |
271 { | 271 { |
272 // Chrome has a single process mode which is used for testing on Mac. In tha
t mode, WebKit runs on a thread in the | 272 // Chrome has a single process mode which is used for testing on Mac. In tha
t mode, WebKit runs on a thread in the |
273 // browser process. This notification is called by the OS on the main thread
in the browser process, and not on the | 273 // browser process. This notification is called by the OS on the main thread
in the browser process, and not on the |
274 // the WebKit thread. Better to not update the style than crash. | 274 // the WebKit thread. Better to not update the style than crash. |
275 // http://crbug.com/126514 | 275 // http://crbug.com/126514 |
276 if (!isMainThread()) | 276 if (!isMainThread()) |
277 return; | 277 return; |
278 | 278 |
279 if (!_scrollableArea) | 279 if (!_scrollableArea) |
280 return; | 280 return; |
281 | 281 |
282 [scrollerImpPair setScrollerStyle:newRecommendedScrollerStyle]; | 282 [scrollerImpPair setScrollerStyle:newRecommendedScrollerStyle]; |
283 | 283 |
284 static_cast<ScrollAnimatorMac*>(_scrollableArea->scrollAnimator())->updateSc
rollerStyle(); | 284 static_cast<ScrollAnimatorMac&>(_scrollableArea->scrollAnimator()).updateScr
ollerStyle(); |
285 } | 285 } |
286 | 286 |
287 @end | 287 @end |
288 | 288 |
289 enum FeatureToAnimate { | 289 enum FeatureToAnimate { |
290 ThumbAlpha, | 290 ThumbAlpha, |
291 TrackAlpha, | 291 TrackAlpha, |
292 UIStateTransition, | 292 UIStateTransition, |
293 ExpansionTransition | 293 ExpansionTransition |
294 }; | 294 }; |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 _startValue = startValue; | 383 _startValue = startValue; |
384 _endValue = endValue; | 384 _endValue = endValue; |
385 | 385 |
386 return self; | 386 return self; |
387 } | 387 } |
388 | 388 |
389 - (void)startAnimation | 389 - (void)startAnimation |
390 { | 390 { |
391 ASSERT(_scrollbar); | 391 ASSERT(_scrollbar); |
392 | 392 |
393 _scrollbarPainter = scrollbarPainterForScrollbar(_scrollbar); | 393 _scrollbarPainter = scrollbarPainterForScrollbar(*_scrollbar); |
394 _timer->start(); | 394 _timer->start(); |
395 } | 395 } |
396 | 396 |
397 - (void)stopAnimation | 397 - (void)stopAnimation |
398 { | 398 { |
399 _timer->stop(); | 399 _timer->stop(); |
400 } | 400 } |
401 | 401 |
402 - (void)setDuration:(CFTimeInterval)duration | 402 - (void)setDuration:(CFTimeInterval)duration |
403 { | 403 { |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 if (!self) | 479 if (!self) |
480 return nil; | 480 return nil; |
481 | 481 |
482 _scrollbar = scrollbar; | 482 _scrollbar = scrollbar; |
483 return self; | 483 return self; |
484 } | 484 } |
485 | 485 |
486 - (void)updateVisibilityImmediately:(bool)show | 486 - (void)updateVisibilityImmediately:(bool)show |
487 { | 487 { |
488 [self cancelAnimations]; | 488 [self cancelAnimations]; |
489 [scrollbarPainterForScrollbar(_scrollbar) setKnobAlpha:(show ? 1.0 : 0.0)]; | 489 [scrollbarPainterForScrollbar(*_scrollbar) setKnobAlpha:(show ? 1.0 : 0.0)]; |
490 } | 490 } |
491 | 491 |
492 - (void)cancelAnimations | 492 - (void)cancelAnimations |
493 { | 493 { |
494 BEGIN_BLOCK_OBJC_EXCEPTIONS; | 494 BEGIN_BLOCK_OBJC_EXCEPTIONS; |
495 [_knobAlphaAnimation.get() stopAnimation]; | 495 [_knobAlphaAnimation.get() stopAnimation]; |
496 [_trackAlphaAnimation.get() stopAnimation]; | 496 [_trackAlphaAnimation.get() stopAnimation]; |
497 [_uiStateTransitionAnimation.get() stopAnimation]; | 497 [_uiStateTransitionAnimation.get() stopAnimation]; |
498 [_expansionTransitionAnimation.get() stopAnimation]; | 498 [_expansionTransitionAnimation.get() stopAnimation]; |
499 END_BLOCK_OBJC_EXCEPTIONS; | 499 END_BLOCK_OBJC_EXCEPTIONS; |
500 } | 500 } |
501 | 501 |
502 - (ScrollAnimatorMac*)scrollAnimator | 502 - (ScrollAnimatorMac&)scrollAnimator |
503 { | 503 { |
504 return static_cast<ScrollAnimatorMac*>(_scrollbar->scrollableArea()->scrollA
nimator()); | 504 return static_cast<ScrollAnimatorMac&>(_scrollbar->scrollableArea()->scrollA
nimator()); |
505 } | 505 } |
506 | 506 |
507 - (NSRect)convertRectToBacking:(NSRect)aRect | 507 - (NSRect)convertRectToBacking:(NSRect)aRect |
508 { | 508 { |
509 return aRect; | 509 return aRect; |
510 } | 510 } |
511 | 511 |
512 - (NSRect)convertRectFromBacking:(NSRect)aRect | 512 - (NSRect)convertRectFromBacking:(NSRect)aRect |
513 { | 513 { |
514 return aRect; | 514 return aRect; |
515 } | 515 } |
516 | 516 |
517 - (NSPoint)mouseLocationInScrollerForScrollerImp:(id)scrollerImp | 517 - (NSPoint)mouseLocationInScrollerForScrollerImp:(id)scrollerImp |
518 { | 518 { |
519 if (!_scrollbar) | 519 if (!_scrollbar) |
520 return NSZeroPoint; | 520 return NSZeroPoint; |
521 | 521 |
522 ASSERT_UNUSED(scrollerImp, scrollerImp == scrollbarPainterForScrollbar(_scro
llbar)); | 522 ASSERT_UNUSED(scrollerImp, scrollerImp == scrollbarPainterForScrollbar(*_scr
ollbar)); |
523 | 523 |
524 return _scrollbar->convertFromContainingWidget(_scrollbar->scrollableArea()-
>lastKnownMousePosition()); | 524 return _scrollbar->convertFromContainingWidget(_scrollbar->scrollableArea()-
>lastKnownMousePosition()); |
525 } | 525 } |
526 | 526 |
527 - (void)setUpAlphaAnimation:(RetainPtr<WebScrollbarPartAnimation>&)scrollbarPart
Animation scrollerPainter:(ScrollbarPainter)scrollerPainter part:(blink::Scrollb
arPart)part animateAlphaTo:(CGFloat)newAlpha duration:(NSTimeInterval)duration | 527 - (void)setUpAlphaAnimation:(RetainPtr<WebScrollbarPartAnimation>&)scrollbarPart
Animation scrollerPainter:(ScrollbarPainter)scrollerPainter part:(blink::Scrollb
arPart)part animateAlphaTo:(CGFloat)newAlpha duration:(NSTimeInterval)duration |
528 { | 528 { |
529 // If the user has scrolled the page, then the scrollbars must be animated h
ere. | 529 // If the user has scrolled the page, then the scrollbars must be animated h
ere. |
530 // This overrides the early returns. | 530 // This overrides the early returns. |
531 bool mustAnimate = [self scrollAnimator]->haveScrolledSincePageLoad(); | 531 bool mustAnimate = [self scrollAnimator].haveScrolledSincePageLoad(); |
532 | 532 |
533 if ([self scrollAnimator]->scrollbarPaintTimerIsActive() && !mustAnimate) | 533 if ([self scrollAnimator].scrollbarPaintTimerIsActive() && !mustAnimate) |
534 return; | 534 return; |
535 | 535 |
536 if (_scrollbar->scrollableArea()->shouldSuspendScrollAnimations() && !mustAn
imate) { | 536 if (_scrollbar->scrollableArea()->shouldSuspendScrollAnimations() && !mustAn
imate) { |
537 [self scrollAnimator]->startScrollbarPaintTimer(); | 537 [self scrollAnimator].startScrollbarPaintTimer(); |
538 return; | 538 return; |
539 } | 539 } |
540 | 540 |
541 // At this point, we are definitely going to animate now, so stop the timer. | 541 // At this point, we are definitely going to animate now, so stop the timer. |
542 [self scrollAnimator]->stopScrollbarPaintTimer(); | 542 [self scrollAnimator].stopScrollbarPaintTimer(); |
543 | 543 |
544 // If we are currently animating, stop | 544 // If we are currently animating, stop |
545 if (scrollbarPartAnimation) { | 545 if (scrollbarPartAnimation) { |
546 [scrollbarPartAnimation.get() stopAnimation]; | 546 [scrollbarPartAnimation.get() stopAnimation]; |
547 scrollbarPartAnimation = nullptr; | 547 scrollbarPartAnimation = nullptr; |
548 } | 548 } |
549 | 549 |
550 if (part == blink::ThumbPart && _scrollbar->orientation() == VerticalScrollb
ar) { | 550 if (part == blink::ThumbPart && _scrollbar->orientation() == VerticalScrollb
ar) { |
551 if (newAlpha == 1) { | 551 if (newAlpha == 1) { |
552 IntRect thumbRect = IntRect([scrollerPainter rectForPart:NSScrollerK
nob]); | 552 IntRect thumbRect = IntRect([scrollerPainter rectForPart:NSScrollerK
nob]); |
553 [self scrollAnimator]->setVisibleScrollerThumbRect(thumbRect); | 553 [self scrollAnimator].setVisibleScrollerThumbRect(thumbRect); |
554 } else | 554 } else |
555 [self scrollAnimator]->setVisibleScrollerThumbRect(IntRect()); | 555 [self scrollAnimator].setVisibleScrollerThumbRect(IntRect()); |
556 } | 556 } |
557 | 557 |
558 scrollbarPartAnimation.adoptNS([[WebScrollbarPartAnimation alloc] initWithSc
rollbar:_scrollbar | 558 scrollbarPartAnimation.adoptNS([[WebScrollbarPartAnimation alloc] initWithSc
rollbar:_scrollbar |
559 featureTo
Animate:part == ThumbPart ? ThumbAlpha : TrackAlpha | 559 featureTo
Animate:part == ThumbPart ? ThumbAlpha : TrackAlpha |
560 anim
ateFrom:part == ThumbPart ? [scrollerPainter knobAlpha] : [scrollerPainter track
Alpha] | 560 anim
ateFrom:part == ThumbPart ? [scrollerPainter knobAlpha] : [scrollerPainter track
Alpha] |
561 an
imateTo:newAlpha | 561 an
imateTo:newAlpha |
562 d
uration:duration]); | 562 d
uration:duration]); |
563 [scrollbarPartAnimation.get() startAnimation]; | 563 [scrollbarPartAnimation.get() startAnimation]; |
564 } | 564 } |
565 | 565 |
566 - (void)scrollerImp:(id)scrollerImp animateKnobAlphaTo:(CGFloat)newKnobAlpha dur
ation:(NSTimeInterval)duration | 566 - (void)scrollerImp:(id)scrollerImp animateKnobAlphaTo:(CGFloat)newKnobAlpha dur
ation:(NSTimeInterval)duration |
567 { | 567 { |
568 if (!_scrollbar) | 568 if (!_scrollbar) |
569 return; | 569 return; |
570 | 570 |
571 ASSERT(scrollerImp == scrollbarPainterForScrollbar(_scrollbar)); | 571 ASSERT(scrollerImp == scrollbarPainterForScrollbar(*_scrollbar)); |
572 | 572 |
573 ScrollbarPainter scrollerPainter = (ScrollbarPainter)scrollerImp; | 573 ScrollbarPainter scrollerPainter = (ScrollbarPainter)scrollerImp; |
574 [self setUpAlphaAnimation:_knobAlphaAnimation scrollerPainter:scrollerPainte
r part:blink::ThumbPart animateAlphaTo:newKnobAlpha duration:duration]; | 574 [self setUpAlphaAnimation:_knobAlphaAnimation scrollerPainter:scrollerPainte
r part:blink::ThumbPart animateAlphaTo:newKnobAlpha duration:duration]; |
575 } | 575 } |
576 | 576 |
577 - (void)scrollerImp:(id)scrollerImp animateTrackAlphaTo:(CGFloat)newTrackAlpha d
uration:(NSTimeInterval)duration | 577 - (void)scrollerImp:(id)scrollerImp animateTrackAlphaTo:(CGFloat)newTrackAlpha d
uration:(NSTimeInterval)duration |
578 { | 578 { |
579 if (!_scrollbar) | 579 if (!_scrollbar) |
580 return; | 580 return; |
581 | 581 |
582 ASSERT(scrollerImp == scrollbarPainterForScrollbar(_scrollbar)); | 582 ASSERT(scrollerImp == scrollbarPainterForScrollbar(*_scrollbar)); |
583 | 583 |
584 ScrollbarPainter scrollerPainter = (ScrollbarPainter)scrollerImp; | 584 ScrollbarPainter scrollerPainter = (ScrollbarPainter)scrollerImp; |
585 [self setUpAlphaAnimation:_trackAlphaAnimation scrollerPainter:scrollerPaint
er part:blink::BackTrackPart animateAlphaTo:newTrackAlpha duration:duration]; | 585 [self setUpAlphaAnimation:_trackAlphaAnimation scrollerPainter:scrollerPaint
er part:blink::BackTrackPart animateAlphaTo:newTrackAlpha duration:duration]; |
586 } | 586 } |
587 | 587 |
588 - (void)scrollerImp:(id)scrollerImp animateUIStateTransitionWithDuration:(NSTime
Interval)duration | 588 - (void)scrollerImp:(id)scrollerImp animateUIStateTransitionWithDuration:(NSTime
Interval)duration |
589 { | 589 { |
590 if (!_scrollbar) | 590 if (!_scrollbar) |
591 return; | 591 return; |
592 | 592 |
593 if (!supportsUIStateTransitionProgress()) | 593 if (!supportsUIStateTransitionProgress()) |
594 return; | 594 return; |
595 | 595 |
596 ASSERT(scrollerImp == scrollbarPainterForScrollbar(_scrollbar)); | 596 ASSERT(scrollerImp == scrollbarPainterForScrollbar(*_scrollbar)); |
597 | 597 |
598 ScrollbarPainter scrollbarPainter = (ScrollbarPainter)scrollerImp; | 598 ScrollbarPainter scrollbarPainter = (ScrollbarPainter)scrollerImp; |
599 | 599 |
600 // UIStateTransition always animates to 1. In case an animation is in progre
ss this avoids a hard transition. | 600 // UIStateTransition always animates to 1. In case an animation is in progre
ss this avoids a hard transition. |
601 [scrollbarPainter setUiStateTransitionProgress:1 - [scrollerImp uiStateTrans
itionProgress]]; | 601 [scrollbarPainter setUiStateTransitionProgress:1 - [scrollerImp uiStateTrans
itionProgress]]; |
602 | 602 |
603 if (!_uiStateTransitionAnimation) | 603 if (!_uiStateTransitionAnimation) |
604 _uiStateTransitionAnimation.adoptNS([[WebScrollbarPartAnimation alloc] i
nitWithScrollbar:_scrollbar | 604 _uiStateTransitionAnimation.adoptNS([[WebScrollbarPartAnimation alloc] i
nitWithScrollbar:_scrollbar |
605
featureToAnimate:UIStateTransition | 605
featureToAnimate:UIStateTransition |
606
animateFrom:[scrollbarPainter uiStateTransitionProgress] | 606
animateFrom:[scrollbarPainter uiStateTransitionProgress] |
607
animateTo:1.0 | 607
animateTo:1.0 |
608
duration:duration]); | 608
duration:duration]); |
609 else { | 609 else { |
610 // If we don't need to initialize the animation, just reset the values i
n case they have changed. | 610 // If we don't need to initialize the animation, just reset the values i
n case they have changed. |
611 [_uiStateTransitionAnimation.get() setStartValue:[scrollbarPainter uiSta
teTransitionProgress]]; | 611 [_uiStateTransitionAnimation.get() setStartValue:[scrollbarPainter uiSta
teTransitionProgress]]; |
612 [_uiStateTransitionAnimation.get() setEndValue:1.0]; | 612 [_uiStateTransitionAnimation.get() setEndValue:1.0]; |
613 [_uiStateTransitionAnimation.get() setDuration:duration]; | 613 [_uiStateTransitionAnimation.get() setDuration:duration]; |
614 } | 614 } |
615 [_uiStateTransitionAnimation.get() startAnimation]; | 615 [_uiStateTransitionAnimation.get() startAnimation]; |
616 } | 616 } |
617 | 617 |
618 - (void)scrollerImp:(id)scrollerImp animateExpansionTransitionWithDuration:(NSTi
meInterval)duration | 618 - (void)scrollerImp:(id)scrollerImp animateExpansionTransitionWithDuration:(NSTi
meInterval)duration |
619 { | 619 { |
620 if (!_scrollbar) | 620 if (!_scrollbar) |
621 return; | 621 return; |
622 | 622 |
623 if (!supportsExpansionTransitionProgress()) | 623 if (!supportsExpansionTransitionProgress()) |
624 return; | 624 return; |
625 | 625 |
626 ASSERT(scrollerImp == scrollbarPainterForScrollbar(_scrollbar)); | 626 ASSERT(scrollerImp == scrollbarPainterForScrollbar(*_scrollbar)); |
627 | 627 |
628 ScrollbarPainter scrollbarPainter = (ScrollbarPainter)scrollerImp; | 628 ScrollbarPainter scrollbarPainter = (ScrollbarPainter)scrollerImp; |
629 | 629 |
630 // ExpansionTransition always animates to 1. In case an animation is in prog
ress this avoids a hard transition. | 630 // ExpansionTransition always animates to 1. In case an animation is in prog
ress this avoids a hard transition. |
631 [scrollbarPainter setExpansionTransitionProgress:1 - [scrollerImp expansionT
ransitionProgress]]; | 631 [scrollbarPainter setExpansionTransitionProgress:1 - [scrollerImp expansionT
ransitionProgress]]; |
632 | 632 |
633 if (!_expansionTransitionAnimation) { | 633 if (!_expansionTransitionAnimation) { |
634 _expansionTransitionAnimation.adoptNS([[WebScrollbarPartAnimation alloc]
initWithScrollbar:_scrollbar | 634 _expansionTransitionAnimation.adoptNS([[WebScrollbarPartAnimation alloc]
initWithScrollbar:_scrollbar |
635
featureToAnimate:ExpansionTransition | 635
featureToAnimate:ExpansionTransition |
636
animateFrom:[scrollbarPainter expansionTransitionProgress] | 636
animateFrom:[scrollbarPainter expansionTransitionProgress] |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
723 [m_verticalScrollbarPainterDelegate.get() invalidate]; | 723 [m_verticalScrollbarPainterDelegate.get() invalidate]; |
724 [m_scrollAnimationHelperDelegate.get() invalidate]; | 724 [m_scrollAnimationHelperDelegate.get() invalidate]; |
725 END_BLOCK_OBJC_EXCEPTIONS; | 725 END_BLOCK_OBJC_EXCEPTIONS; |
726 } | 726 } |
727 m_initialScrollbarPaintTimer.stop(); | 727 m_initialScrollbarPaintTimer.stop(); |
728 m_sendContentAreaScrolledTimer.stop(); | 728 m_sendContentAreaScrolledTimer.stop(); |
729 } | 729 } |
730 | 730 |
731 ScrollResultOneDimensional ScrollAnimatorMac::userScroll(ScrollbarOrientation or
ientation, ScrollGranularity granularity, float step, float delta) | 731 ScrollResultOneDimensional ScrollAnimatorMac::userScroll(ScrollbarOrientation or
ientation, ScrollGranularity granularity, float step, float delta) |
732 { | 732 { |
733 bool scrollAnimationEnabledForSystem = static_cast<ScrollbarThemeMacCommon*>
( | 733 bool scrollAnimationEnabledForSystem = static_cast<ScrollbarThemeMacCommon&>
( |
734 ScrollbarTheme::theme()) | 734 ScrollbarTheme::theme()) |
735 ->scrollAnimationEnabledForSystem
(); | 735 .scrollAnimationEnabledForSystem(
); |
736 m_haveScrolledSincePageLoad = true; | 736 m_haveScrolledSincePageLoad = true; |
737 | 737 |
738 if (!scrollAnimationEnabledForSystem || !m_scrollableArea->scrollAnimatorEna
bled()) | 738 if (!scrollAnimationEnabledForSystem || !m_scrollableArea->scrollAnimatorEna
bled()) |
739 return ScrollAnimatorBase::userScroll(orientation, granularity, step, de
lta); | 739 return ScrollAnimatorBase::userScroll(orientation, granularity, step, de
lta); |
740 | 740 |
741 if (granularity == ScrollByPixel || granularity == ScrollByPrecisePixel) | 741 if (granularity == ScrollByPixel || granularity == ScrollByPrecisePixel) |
742 return ScrollAnimatorBase::userScroll(orientation, granularity, step, de
lta); | 742 return ScrollAnimatorBase::userScroll(orientation, granularity, step, de
lta); |
743 | 743 |
744 float currentPos = orientation == HorizontalScrollbar ? m_currentPosX : m_cu
rrentPosY; | 744 float currentPos = orientation == HorizontalScrollbar ? m_currentPosX : m_cu
rrentPosY; |
745 float newPos = std::max<float>(std::min<float>(currentPos + (step * delta),
m_scrollableArea->maximumScrollPosition(orientation)), m_scrollableArea->minimum
ScrollPosition(orientation)); | 745 float newPos = std::max<float>(std::min<float>(currentPos + (step * delta),
m_scrollableArea->maximumScrollPosition(orientation)), m_scrollableArea->minimum
ScrollPosition(orientation)); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
823 } | 823 } |
824 | 824 |
825 void ScrollAnimatorMac::mouseMovedInContentArea() const | 825 void ScrollAnimatorMac::mouseMovedInContentArea() const |
826 { | 826 { |
827 if (!scrollableArea()->scrollbarsCanBeActive()) | 827 if (!scrollableArea()->scrollbarsCanBeActive()) |
828 return; | 828 return; |
829 if (ScrollbarThemeMacCommon::isOverlayAPIAvailable()) | 829 if (ScrollbarThemeMacCommon::isOverlayAPIAvailable()) |
830 [m_scrollbarPainterController.get() mouseMovedInContentArea]; | 830 [m_scrollbarPainterController.get() mouseMovedInContentArea]; |
831 } | 831 } |
832 | 832 |
833 void ScrollAnimatorMac::mouseEnteredScrollbar(Scrollbar* scrollbar) const | 833 void ScrollAnimatorMac::mouseEnteredScrollbar(Scrollbar& scrollbar) const |
834 { | 834 { |
835 if (!scrollableArea()->scrollbarsCanBeActive()) | 835 if (!scrollableArea()->scrollbarsCanBeActive()) |
836 return; | 836 return; |
837 | 837 |
838 if (ScrollbarThemeMacCommon::isOverlayAPIAvailable()) { | 838 if (ScrollbarThemeMacCommon::isOverlayAPIAvailable()) { |
839 if (!supportsUIStateTransitionProgress()) | 839 if (!supportsUIStateTransitionProgress()) |
840 return; | 840 return; |
841 if (ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar)) | 841 if (ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar)) |
842 [painter mouseEnteredScroller]; | 842 [painter mouseEnteredScroller]; |
843 } | 843 } |
844 } | 844 } |
845 | 845 |
846 void ScrollAnimatorMac::mouseExitedScrollbar(Scrollbar* scrollbar) const | 846 void ScrollAnimatorMac::mouseExitedScrollbar(Scrollbar& scrollbar) const |
847 { | 847 { |
848 if (!scrollableArea()->scrollbarsCanBeActive()) | 848 if (!scrollableArea()->scrollbarsCanBeActive()) |
849 return; | 849 return; |
850 | 850 |
851 if (ScrollbarThemeMacCommon::isOverlayAPIAvailable()) { | 851 if (ScrollbarThemeMacCommon::isOverlayAPIAvailable()) { |
852 if (!supportsUIStateTransitionProgress()) | 852 if (!supportsUIStateTransitionProgress()) |
853 return; | 853 return; |
854 if (ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar)) | 854 if (ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar)) |
855 [painter mouseExitedScroller]; | 855 [painter mouseExitedScroller]; |
856 } | 856 } |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 [m_scrollbarPainterController.get() contentAreaScrolled]; | 923 [m_scrollbarPainterController.get() contentAreaScrolled]; |
924 } | 924 } |
925 | 925 |
926 void ScrollAnimatorMac::finishCurrentScrollAnimations() | 926 void ScrollAnimatorMac::finishCurrentScrollAnimations() |
927 { | 927 { |
928 if (ScrollbarThemeMacCommon::isOverlayAPIAvailable()) { | 928 if (ScrollbarThemeMacCommon::isOverlayAPIAvailable()) { |
929 [m_scrollbarPainterController.get() hideOverlayScrollers]; | 929 [m_scrollbarPainterController.get() hideOverlayScrollers]; |
930 } | 930 } |
931 } | 931 } |
932 | 932 |
933 void ScrollAnimatorMac::didAddVerticalScrollbar(Scrollbar* scrollbar) | 933 void ScrollAnimatorMac::didAddVerticalScrollbar(Scrollbar& scrollbar) |
934 { | 934 { |
935 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) | 935 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) |
936 return; | 936 return; |
937 | 937 |
938 ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar); | 938 ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar); |
939 if (!painter) | 939 if (!painter) |
940 return; | 940 return; |
941 | 941 |
942 ASSERT(!m_verticalScrollbarPainterDelegate); | 942 ASSERT(!m_verticalScrollbarPainterDelegate); |
943 m_verticalScrollbarPainterDelegate.adoptNS([[WebScrollbarPainterDelegate all
oc] initWithScrollbar:scrollbar]); | 943 m_verticalScrollbarPainterDelegate.adoptNS([[WebScrollbarPainterDelegate all
oc] initWithScrollbar:&scrollbar]); |
944 | 944 |
945 [painter setDelegate:m_verticalScrollbarPainterDelegate.get()]; | 945 [painter setDelegate:m_verticalScrollbarPainterDelegate.get()]; |
946 [m_scrollbarPainterController.get() setVerticalScrollerImp:painter]; | 946 [m_scrollbarPainterController.get() setVerticalScrollerImp:painter]; |
947 if (scrollableArea()->inLiveResize()) | 947 if (scrollableArea()->inLiveResize()) |
948 [painter setKnobAlpha:1]; | 948 [painter setKnobAlpha:1]; |
949 } | 949 } |
950 | 950 |
951 void ScrollAnimatorMac::willRemoveVerticalScrollbar(Scrollbar* scrollbar) | 951 void ScrollAnimatorMac::willRemoveVerticalScrollbar(Scrollbar& scrollbar) |
952 { | 952 { |
953 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) | 953 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) |
954 return; | 954 return; |
955 | 955 |
956 ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar); | 956 ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar); |
957 if (!painter) | 957 if (!painter) |
958 return; | 958 return; |
959 | 959 |
960 ASSERT(m_verticalScrollbarPainterDelegate); | 960 ASSERT(m_verticalScrollbarPainterDelegate); |
961 [m_verticalScrollbarPainterDelegate.get() invalidate]; | 961 [m_verticalScrollbarPainterDelegate.get() invalidate]; |
962 m_verticalScrollbarPainterDelegate = nullptr; | 962 m_verticalScrollbarPainterDelegate = nullptr; |
963 | 963 |
964 [painter setDelegate:nil]; | 964 [painter setDelegate:nil]; |
965 [m_scrollbarPainterController.get() setVerticalScrollerImp:nil]; | 965 [m_scrollbarPainterController.get() setVerticalScrollerImp:nil]; |
966 } | 966 } |
967 | 967 |
968 void ScrollAnimatorMac::didAddHorizontalScrollbar(Scrollbar* scrollbar) | 968 void ScrollAnimatorMac::didAddHorizontalScrollbar(Scrollbar& scrollbar) |
969 { | 969 { |
970 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) | 970 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) |
971 return; | 971 return; |
972 | 972 |
973 ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar); | 973 ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar); |
974 if (!painter) | 974 if (!painter) |
975 return; | 975 return; |
976 | 976 |
977 ASSERT(!m_horizontalScrollbarPainterDelegate); | 977 ASSERT(!m_horizontalScrollbarPainterDelegate); |
978 m_horizontalScrollbarPainterDelegate.adoptNS([[WebScrollbarPainterDelegate a
lloc] initWithScrollbar:scrollbar]); | 978 m_horizontalScrollbarPainterDelegate.adoptNS([[WebScrollbarPainterDelegate a
lloc] initWithScrollbar:&scrollbar]); |
979 | 979 |
980 [painter setDelegate:m_horizontalScrollbarPainterDelegate.get()]; | 980 [painter setDelegate:m_horizontalScrollbarPainterDelegate.get()]; |
981 [m_scrollbarPainterController.get() setHorizontalScrollerImp:painter]; | 981 [m_scrollbarPainterController.get() setHorizontalScrollerImp:painter]; |
982 if (scrollableArea()->inLiveResize()) | 982 if (scrollableArea()->inLiveResize()) |
983 [painter setKnobAlpha:1]; | 983 [painter setKnobAlpha:1]; |
984 } | 984 } |
985 | 985 |
986 void ScrollAnimatorMac::willRemoveHorizontalScrollbar(Scrollbar* scrollbar) | 986 void ScrollAnimatorMac::willRemoveHorizontalScrollbar(Scrollbar& scrollbar) |
987 { | 987 { |
988 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) | 988 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) |
989 return; | 989 return; |
990 | 990 |
991 ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar); | 991 ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar); |
992 if (!painter) | 992 if (!painter) |
993 return; | 993 return; |
994 | 994 |
995 ASSERT(m_horizontalScrollbarPainterDelegate); | 995 ASSERT(m_horizontalScrollbarPainterDelegate); |
996 [m_horizontalScrollbarPainterDelegate.get() invalidate]; | 996 [m_horizontalScrollbarPainterDelegate.get() invalidate]; |
997 m_horizontalScrollbarPainterDelegate = nullptr; | 997 m_horizontalScrollbarPainterDelegate = nullptr; |
998 | 998 |
999 [painter setDelegate:nil]; | 999 [painter setDelegate:nil]; |
1000 [m_scrollbarPainterController.get() setHorizontalScrollerImp:nil]; | 1000 [m_scrollbarPainterController.get() setHorizontalScrollerImp:nil]; |
1001 } | 1001 } |
1002 | 1002 |
1003 bool ScrollAnimatorMac::shouldScrollbarParticipateInHitTesting(Scrollbar* scroll
bar) | 1003 bool ScrollAnimatorMac::shouldScrollbarParticipateInHitTesting(Scrollbar& scroll
bar) |
1004 { | 1004 { |
1005 // Non-overlay scrollbars should always participate in hit testing. | 1005 // Non-overlay scrollbars should always participate in hit testing. |
1006 if (ScrollbarThemeMacCommon::recommendedScrollerStyle() != NSScrollerStyleOv
erlay) | 1006 if (ScrollbarThemeMacCommon::recommendedScrollerStyle() != NSScrollerStyleOv
erlay) |
1007 return true; | 1007 return true; |
1008 | 1008 |
1009 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) | 1009 if (!ScrollbarThemeMacCommon::isOverlayAPIAvailable()) |
1010 return true; | 1010 return true; |
1011 | 1011 |
1012 if (scrollbar->isAlphaLocked()) | 1012 if (scrollbar.isAlphaLocked()) |
1013 return true; | 1013 return true; |
1014 | 1014 |
1015 // Overlay scrollbars should participate in hit testing whenever they are at
all visible. | 1015 // Overlay scrollbars should participate in hit testing whenever they are at
all visible. |
1016 ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar); | 1016 ScrollbarPainter painter = scrollbarPainterForScrollbar(scrollbar); |
1017 if (!painter) | 1017 if (!painter) |
1018 return false; | 1018 return false; |
1019 return [painter knobAlpha] > 0; | 1019 return [painter knobAlpha] > 0; |
1020 } | 1020 } |
1021 | 1021 |
1022 void ScrollAnimatorMac::notifyContentAreaScrolled(const FloatSize& delta) | 1022 void ScrollAnimatorMac::notifyContentAreaScrolled(const FloatSize& delta) |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1105 verticalScrollbar->setTrackNeedsRepaint(true); | 1105 verticalScrollbar->setTrackNeedsRepaint(true); |
1106 verticalScrollbar->setThumbNeedsRepaint(true); | 1106 verticalScrollbar->setThumbNeedsRepaint(true); |
1107 verticalScrollbar->setNeedsPaintInvalidation(); | 1107 verticalScrollbar->setNeedsPaintInvalidation(); |
1108 | 1108 |
1109 ScrollbarPainter oldVerticalPainter = [m_scrollbarPainterController.get(
) verticalScrollerImp]; | 1109 ScrollbarPainter oldVerticalPainter = [m_scrollbarPainterController.get(
) verticalScrollerImp]; |
1110 ScrollbarPainter newVerticalPainter = [NSClassFromString(@"NSScrollerImp
") scrollerImpWithStyle:newStyle | 1110 ScrollbarPainter newVerticalPainter = [NSClassFromString(@"NSScrollerImp
") scrollerImpWithStyle:newStyle |
1111
controlSize:(NSControlSize)verticalScrollbar->controlSize() | 1111
controlSize:(NSControlSize)verticalScrollbar->controlSize() |
1112
horizontal:NO | 1112
horizontal:NO |
1113
replacingScrollerImp:oldVerticalPainter]; | 1113
replacingScrollerImp:oldVerticalPainter]; |
1114 [m_scrollbarPainterController.get() setVerticalScrollerImp:newVerticalPa
inter]; | 1114 [m_scrollbarPainterController.get() setVerticalScrollerImp:newVerticalPa
inter]; |
1115 macTheme->setNewPainterForScrollbar(verticalScrollbar, newVerticalPainte
r); | 1115 macTheme->setNewPainterForScrollbar(*verticalScrollbar, newVerticalPaint
er); |
1116 | 1116 |
1117 // The different scrollbar styles have different thicknesses, so we must
re-set the | 1117 // The different scrollbar styles have different thicknesses, so we must
re-set the |
1118 // frameRect to the new thickness, and the re-layout below will ensure t
he position | 1118 // frameRect to the new thickness, and the re-layout below will ensure t
he position |
1119 // and length are properly updated. | 1119 // and length are properly updated. |
1120 int thickness = macTheme->scrollbarThickness(verticalScrollbar->controlS
ize()); | 1120 int thickness = macTheme->scrollbarThickness(verticalScrollbar->controlS
ize()); |
1121 verticalScrollbar->setFrameRect(IntRect(0, 0, thickness, thickness)); | 1121 verticalScrollbar->setFrameRect(IntRect(0, 0, thickness, thickness)); |
1122 } | 1122 } |
1123 | 1123 |
1124 if (Scrollbar* horizontalScrollbar = scrollableArea()->horizontalScrollbar()
) { | 1124 if (Scrollbar* horizontalScrollbar = scrollableArea()->horizontalScrollbar()
) { |
1125 horizontalScrollbar->setTrackNeedsRepaint(true); | 1125 horizontalScrollbar->setTrackNeedsRepaint(true); |
1126 horizontalScrollbar->setThumbNeedsRepaint(true); | 1126 horizontalScrollbar->setThumbNeedsRepaint(true); |
1127 horizontalScrollbar->setNeedsPaintInvalidation(); | 1127 horizontalScrollbar->setNeedsPaintInvalidation(); |
1128 | 1128 |
1129 ScrollbarPainter oldHorizontalPainter = [m_scrollbarPainterController.ge
t() horizontalScrollerImp]; | 1129 ScrollbarPainter oldHorizontalPainter = [m_scrollbarPainterController.ge
t() horizontalScrollerImp]; |
1130 ScrollbarPainter newHorizontalPainter = [NSClassFromString(@"NSScrollerI
mp") scrollerImpWithStyle:newStyle | 1130 ScrollbarPainter newHorizontalPainter = [NSClassFromString(@"NSScrollerI
mp") scrollerImpWithStyle:newStyle |
1131
controlSize:(NSControlSize)horizontalScrollbar->controlSize() | 1131
controlSize:(NSControlSize)horizontalScrollbar->controlSize() |
1132
horizontal:YES | 1132
horizontal:YES |
1133
replacingScrollerImp:oldHorizontalPainter]; | 1133
replacingScrollerImp:oldHorizontalPainter]; |
1134 [m_scrollbarPainterController.get() setHorizontalScrollerImp:newHorizont
alPainter]; | 1134 [m_scrollbarPainterController.get() setHorizontalScrollerImp:newHorizont
alPainter]; |
1135 macTheme->setNewPainterForScrollbar(horizontalScrollbar, newHorizontalPa
inter); | 1135 macTheme->setNewPainterForScrollbar(*horizontalScrollbar, newHorizontalP
ainter); |
1136 | 1136 |
1137 // The different scrollbar styles have different thicknesses, so we must
re-set the | 1137 // The different scrollbar styles have different thicknesses, so we must
re-set the |
1138 // frameRect to the new thickness, and the re-layout below will ensure t
he position | 1138 // frameRect to the new thickness, and the re-layout below will ensure t
he position |
1139 // and length are properly updated. | 1139 // and length are properly updated. |
1140 int thickness = macTheme->scrollbarThickness(horizontalScrollbar->contro
lSize()); | 1140 int thickness = macTheme->scrollbarThickness(horizontalScrollbar->contro
lSize()); |
1141 horizontalScrollbar->setFrameRect(IntRect(0, 0, thickness, thickness)); | 1141 horizontalScrollbar->setFrameRect(IntRect(0, 0, thickness, thickness)); |
1142 } | 1142 } |
1143 | 1143 |
1144 // If m_needsScrollerStyleUpdate is true, then the page is restoring from th
e page cache, and | 1144 // If m_needsScrollerStyleUpdate is true, then the page is restoring from th
e page cache, and |
1145 // a relayout will happen on its own. Otherwise, we must initiate a re-layou
t ourselves. | 1145 // a relayout will happen on its own. Otherwise, we must initiate a re-layou
t ourselves. |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1201 return; | 1201 return; |
1202 | 1202 |
1203 m_visibleScrollerThumbRect = rectInViewCoordinates; | 1203 m_visibleScrollerThumbRect = rectInViewCoordinates; |
1204 } | 1204 } |
1205 | 1205 |
1206 bool ScrollAnimatorMac::canUseCoordinatedScrollbar() { | 1206 bool ScrollAnimatorMac::canUseCoordinatedScrollbar() { |
1207 return ScrollbarThemeMacCommon::isOverlayAPIAvailable(); | 1207 return ScrollbarThemeMacCommon::isOverlayAPIAvailable(); |
1208 } | 1208 } |
1209 | 1209 |
1210 } // namespace blink | 1210 } // namespace blink |
OLD | NEW |