OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (C) 2010, 2011 Apple Inc. All rights reserved. | |
3 * | |
4 * Redistribution and use in source and binary forms, with or without | |
5 * modification, are permitted provided that the following conditions | |
6 * are met: | |
7 * 1. Redistributions of source code must retain the above copyright | |
8 * notice, this list of conditions and the following disclaimer. | |
9 * 2. Redistributions in binary form must reproduce the above copyright | |
10 * notice, this list of conditions and the following disclaimer in the | |
11 * documentation and/or other materials provided with the distribution. | |
12 * | |
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' | |
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | |
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS | |
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | |
23 * THE POSSIBILITY OF SUCH DAMAGE. | |
24 */ | |
25 | |
26 #ifndef ScrollAnimatorMac_h | |
27 #define ScrollAnimatorMac_h | |
28 | |
29 #include "core/platform/ScrollAnimator.h" | |
30 #include "core/platform/mac/ScrollElasticityController.h" | |
31 #include "platform/Timer.h" | |
32 #include "platform/geometry/FloatPoint.h" | |
33 #include "platform/geometry/FloatSize.h" | |
34 #include "platform/geometry/IntRect.h" | |
35 #include "wtf/RetainPtr.h" | |
36 | |
37 OBJC_CLASS WebScrollAnimationHelperDelegate; | |
38 OBJC_CLASS WebScrollbarPainterControllerDelegate; | |
39 OBJC_CLASS WebScrollbarPainterDelegate; | |
40 | |
41 typedef id ScrollbarPainterController; | |
42 | |
43 #if !USE(RUBBER_BANDING) | |
44 class ScrollElasticityControllerClient { }; | |
45 #endif | |
46 | |
47 namespace WebCore { | |
48 | |
49 class Scrollbar; | |
50 | |
51 class ScrollAnimatorMac : public ScrollAnimator, private ScrollElasticityControl
lerClient { | |
52 | |
53 public: | |
54 ScrollAnimatorMac(ScrollableArea*); | |
55 virtual ~ScrollAnimatorMac(); | |
56 | |
57 void immediateScrollToPointForScrollAnimation(const FloatPoint& newPosition)
; | |
58 bool haveScrolledSincePageLoad() const { return m_haveScrolledSincePageLoad;
} | |
59 | |
60 void updateScrollerStyle(); | |
61 | |
62 bool scrollbarPaintTimerIsActive() const; | |
63 void startScrollbarPaintTimer(); | |
64 void stopScrollbarPaintTimer(); | |
65 | |
66 void sendContentAreaScrolledSoon(const FloatSize& scrollDelta); | |
67 | |
68 void setVisibleScrollerThumbRect(const IntRect&); | |
69 | |
70 static bool canUseCoordinatedScrollbar(); | |
71 | |
72 private: | |
73 RetainPtr<id> m_scrollAnimationHelper; | |
74 RetainPtr<WebScrollAnimationHelperDelegate> m_scrollAnimationHelperDelegate; | |
75 | |
76 RetainPtr<ScrollbarPainterController> m_scrollbarPainterController; | |
77 RetainPtr<WebScrollbarPainterControllerDelegate> m_scrollbarPainterControlle
rDelegate; | |
78 RetainPtr<WebScrollbarPainterDelegate> m_horizontalScrollbarPainterDelegate; | |
79 RetainPtr<WebScrollbarPainterDelegate> m_verticalScrollbarPainterDelegate; | |
80 | |
81 void initialScrollbarPaintTimerFired(Timer<ScrollAnimatorMac>*); | |
82 Timer<ScrollAnimatorMac> m_initialScrollbarPaintTimer; | |
83 | |
84 void sendContentAreaScrolledTimerFired(Timer<ScrollAnimatorMac>*); | |
85 Timer<ScrollAnimatorMac> m_sendContentAreaScrolledTimer; | |
86 FloatSize m_contentAreaScrolledTimerScrollDelta; | |
87 | |
88 virtual bool scroll(ScrollbarOrientation, ScrollGranularity, float step, flo
at multiplier); | |
89 virtual void scrollToOffsetWithoutAnimation(const FloatPoint&); | |
90 | |
91 #if USE(RUBBER_BANDING) | |
92 virtual bool handleWheelEvent(const PlatformWheelEvent&) OVERRIDE; | |
93 #endif | |
94 | |
95 virtual void handleWheelEventPhase(PlatformWheelEventPhase) OVERRIDE; | |
96 | |
97 virtual void cancelAnimations(); | |
98 virtual void setIsActive(); | |
99 | |
100 virtual void notifyPositionChanged(const FloatSize& delta); | |
101 virtual void contentAreaWillPaint() const; | |
102 virtual void mouseEnteredContentArea() const; | |
103 virtual void mouseExitedContentArea() const; | |
104 virtual void mouseMovedInContentArea() const; | |
105 virtual void mouseEnteredScrollbar(Scrollbar*) const; | |
106 virtual void mouseExitedScrollbar(Scrollbar*) const; | |
107 virtual void willStartLiveResize(); | |
108 virtual void contentsResized() const; | |
109 virtual void willEndLiveResize(); | |
110 virtual void contentAreaDidShow() const; | |
111 virtual void contentAreaDidHide() const; | |
112 void didBeginScrollGesture() const; | |
113 void didEndScrollGesture() const; | |
114 void mayBeginScrollGesture() const; | |
115 | |
116 virtual void finishCurrentScrollAnimations(); | |
117 | |
118 virtual void didAddVerticalScrollbar(Scrollbar*); | |
119 virtual void willRemoveVerticalScrollbar(Scrollbar*); | |
120 virtual void didAddHorizontalScrollbar(Scrollbar*); | |
121 virtual void willRemoveHorizontalScrollbar(Scrollbar*); | |
122 | |
123 virtual bool shouldScrollbarParticipateInHitTesting(Scrollbar*); | |
124 | |
125 virtual void notifyContentAreaScrolled(const FloatSize& delta) OVERRIDE; | |
126 | |
127 FloatPoint adjustScrollPositionIfNecessary(const FloatPoint&) const; | |
128 | |
129 void immediateScrollTo(const FloatPoint&); | |
130 | |
131 virtual bool isRubberBandInProgress() const OVERRIDE; | |
132 | |
133 #if USE(RUBBER_BANDING) | |
134 /// ScrollElasticityControllerClient member functions. | |
135 virtual IntSize stretchAmount() OVERRIDE; | |
136 virtual bool allowsHorizontalStretching() OVERRIDE; | |
137 virtual bool allowsVerticalStretching() OVERRIDE; | |
138 virtual bool pinnedInDirection(const FloatSize&) OVERRIDE; | |
139 virtual bool canScrollHorizontally() OVERRIDE; | |
140 virtual bool canScrollVertically() OVERRIDE; | |
141 virtual bool shouldRubberBandInDirection(ScrollDirection) OVERRIDE; | |
142 virtual WebCore::IntPoint absoluteScrollPosition() OVERRIDE; | |
143 virtual void immediateScrollByWithoutContentEdgeConstraints(const FloatSize&
) OVERRIDE; | |
144 virtual void immediateScrollBy(const FloatSize&) OVERRIDE; | |
145 virtual void startSnapRubberbandTimer() OVERRIDE; | |
146 virtual void stopSnapRubberbandTimer() OVERRIDE; | |
147 | |
148 bool pinnedInDirection(float deltaX, float deltaY); | |
149 void snapRubberBandTimerFired(Timer<ScrollAnimatorMac>*); | |
150 | |
151 ScrollElasticityController m_scrollElasticityController; | |
152 Timer<ScrollAnimatorMac> m_snapRubberBandTimer; | |
153 #endif | |
154 | |
155 bool m_haveScrolledSincePageLoad; | |
156 bool m_needsScrollerStyleUpdate; | |
157 IntRect m_visibleScrollerThumbRect; | |
158 }; | |
159 | |
160 } // namespace WebCore | |
161 | |
162 #endif // ScrollAnimatorMac_h | |
OLD | NEW |