| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008, 2011 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008, 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 10 matching lines...) Expand all Loading... |
| 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #ifndef ScrollableArea_h | 26 #ifndef ScrollableArea_h |
| 27 #define ScrollableArea_h | 27 #define ScrollableArea_h |
| 28 | 28 |
| 29 #include "platform/PlatformExport.h" | 29 #include "platform/PlatformExport.h" |
| 30 #include "platform/RuntimeEnabledFeatures.h" | 30 #include "platform/RuntimeEnabledFeatures.h" |
| 31 #include "platform/geometry/DoublePoint.h" | 31 #include "platform/geometry/LayoutRect.h" |
| 32 #include "platform/graphics/Color.h" | 32 #include "platform/graphics/Color.h" |
| 33 #include "platform/heap/Handle.h" | 33 #include "platform/heap/Handle.h" |
| 34 #include "platform/scroll/ScrollAnimatorBase.h" | 34 #include "platform/scroll/ScrollAnimatorBase.h" |
| 35 #include "platform/scroll/ScrollTypes.h" | 35 #include "platform/scroll/ScrollTypes.h" |
| 36 #include "platform/scroll/Scrollbar.h" | 36 #include "platform/scroll/Scrollbar.h" |
| 37 #include "wtf/MathExtras.h" | 37 #include "wtf/MathExtras.h" |
| 38 #include "wtf/Noncopyable.h" | 38 #include "wtf/Noncopyable.h" |
| 39 #include "wtf/Vector.h" | 39 #include "wtf/Vector.h" |
| 40 | 40 |
| 41 namespace blink { | 41 namespace blink { |
| 42 | 42 |
| 43 class DoubleRect; | |
| 44 class FloatPoint; | |
| 45 class GraphicsLayer; | 43 class GraphicsLayer; |
| 46 class HostWindow; | 44 class HostWindow; |
| 47 class LayoutBox; | 45 class LayoutBox; |
| 48 class PlatformWheelEvent; | |
| 49 class ProgrammaticScrollAnimator; | 46 class ProgrammaticScrollAnimator; |
| 50 struct ScrollAlignment; | 47 struct ScrollAlignment; |
| 51 class ScrollAnchor; | 48 class ScrollAnchor; |
| 52 class ScrollAnimatorBase; | 49 class ScrollAnimatorBase; |
| 53 class CompositorAnimationTimeline; | 50 class CompositorAnimationTimeline; |
| 54 class Widget; | |
| 55 | 51 |
| 56 enum IncludeScrollbarsInRect { | 52 enum IncludeScrollbarsInRect { |
| 57 ExcludeScrollbars, | 53 ExcludeScrollbars, |
| 58 IncludeScrollbars, | 54 IncludeScrollbars, |
| 59 }; | 55 }; |
| 60 | 56 |
| 61 class PLATFORM_EXPORT ScrollableArea : public GarbageCollectedMixin { | 57 class PLATFORM_EXPORT ScrollableArea : public GarbageCollectedMixin { |
| 62 WTF_MAKE_NONCOPYABLE(ScrollableArea); | 58 WTF_MAKE_NONCOPYABLE(ScrollableArea); |
| 63 | 59 |
| 64 public: | 60 public: |
| 65 static int pixelsPerLineStep(HostWindow*); | 61 static int pixelsPerLineStep(HostWindow*); |
| 66 static float minFractionToStepWhenPaging(); | 62 static float minFractionToStepWhenPaging(); |
| 67 static int maxOverlapBetweenPages(); | 63 static int maxOverlapBetweenPages(); |
| 68 | 64 |
| 69 // Convert a non-finite scroll value (Infinity, -Infinity, NaN) to 0 as | 65 // Convert a non-finite scroll value (Infinity, -Infinity, NaN) to 0 as |
| 70 // per http://dev.w3.org/csswg/cssom-view/#normalize-non_finite-values. | 66 // per http://dev.w3.org/csswg/cssom-view/#normalize-non_finite-values. |
| 71 static double normalizeNonFiniteScroll(double value) { | 67 static float normalizeNonFiniteScroll(float value) { |
| 72 return std::isfinite(value) ? value : 0.0; | 68 return std::isfinite(value) ? value : 0.0; |
| 73 } | 69 } |
| 74 | 70 |
| 75 // The window that hosts the ScrollableArea. The ScrollableArea will | 71 // The window that hosts the ScrollableArea. The ScrollableArea will |
| 76 // communicate scrolls and repaints to the host window in the window's | 72 // communicate scrolls and repaints to the host window in the window's |
| 77 // coordinate space. | 73 // coordinate space. |
| 78 virtual HostWindow* getHostWindow() const { return 0; } | 74 virtual HostWindow* getHostWindow() const { return 0; } |
| 79 | 75 |
| 80 virtual ScrollResult userScroll(ScrollGranularity, const FloatSize&); | 76 virtual ScrollResult userScroll(ScrollGranularity, const ScrollOffset&); |
| 81 | 77 |
| 82 virtual void setScrollPosition(const DoublePoint&, | 78 virtual void setScrollOffset(const ScrollOffset&, |
| 79 ScrollType, |
| 80 ScrollBehavior = ScrollBehaviorInstant); |
| 81 virtual void scrollBy(const ScrollOffset&, |
| 82 ScrollType, |
| 83 ScrollBehavior = ScrollBehaviorInstant); |
| 84 void setScrollOffsetSingleAxis(ScrollbarOrientation, |
| 85 float, |
| 83 ScrollType, | 86 ScrollType, |
| 84 ScrollBehavior = ScrollBehaviorInstant); | 87 ScrollBehavior = ScrollBehaviorInstant); |
| 85 virtual void scrollBy(const DoubleSize&, | |
| 86 ScrollType, | |
| 87 ScrollBehavior = ScrollBehaviorInstant); | |
| 88 void setScrollPositionSingleAxis(ScrollbarOrientation, | |
| 89 double, | |
| 90 ScrollType, | |
| 91 ScrollBehavior = ScrollBehaviorInstant); | |
| 92 | 88 |
| 93 // Scrolls the area so that the given rect, given in the document's content | 89 // Scrolls the area so that the given rect, given in the document's content |
| 94 // coordinates, such that it's visible in the area. Returns the new location | 90 // coordinates, such that it's visible in the area. Returns the new location |
| 95 // of the input rect relative once again to the document. | 91 // of the input rect relative once again to the document. |
| 96 // Note, in the case of a Document container, such as FrameView, the output | 92 // Note, in the case of a Document container, such as FrameView, the output |
| 97 // will always be the input rect since scrolling it can't change the location | 93 // will always be the input rect since scrolling it can't change the location |
| 98 // of content relative to the document, unlike an overflowing element. | 94 // of content relative to the document, unlike an overflowing element. |
| 99 virtual LayoutRect scrollIntoView(const LayoutRect& rectInContent, | 95 virtual LayoutRect scrollIntoView(const LayoutRect& rectInContent, |
| 100 const ScrollAlignment& alignX, | 96 const ScrollAlignment& alignX, |
| 101 const ScrollAlignment& alignY, | 97 const ScrollAlignment& alignY, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 // See Source/core/layout/README.md for an explanation of scroll origin. | 147 // See Source/core/layout/README.md for an explanation of scroll origin. |
| 152 const IntPoint& scrollOrigin() const { return m_scrollOrigin; } | 148 const IntPoint& scrollOrigin() const { return m_scrollOrigin; } |
| 153 bool scrollOriginChanged() const { return m_scrollOriginChanged; } | 149 bool scrollOriginChanged() const { return m_scrollOriginChanged; } |
| 154 | 150 |
| 155 // This is used to determine whether the incoming fractional scroll offset | 151 // This is used to determine whether the incoming fractional scroll offset |
| 156 // should be truncated to integer. Current rule is that if | 152 // should be truncated to integer. Current rule is that if |
| 157 // preferCompositingToLCDTextEnabled() is disabled (which is true on low-dpi | 153 // preferCompositingToLCDTextEnabled() is disabled (which is true on low-dpi |
| 158 // device by default) we should do the truncation. The justification is that | 154 // device by default) we should do the truncation. The justification is that |
| 159 // non-composited elements using fractional scroll offsets is causing too much | 155 // non-composited elements using fractional scroll offsets is causing too much |
| 160 // nasty bugs but does not add too benefit on low-dpi devices. | 156 // nasty bugs but does not add too benefit on low-dpi devices. |
| 157 // TODO(szager): Now that scroll offsets are floats everywhere, can we get rid |
| 158 // of this? |
| 161 virtual bool shouldUseIntegerScrollOffset() const { | 159 virtual bool shouldUseIntegerScrollOffset() const { |
| 162 return !RuntimeEnabledFeatures::fractionalScrollOffsetsEnabled(); | 160 return !RuntimeEnabledFeatures::fractionalScrollOffsetsEnabled(); |
| 163 } | 161 } |
| 164 | 162 |
| 165 virtual bool isActive() const = 0; | 163 virtual bool isActive() const = 0; |
| 166 virtual int scrollSize(ScrollbarOrientation) const = 0; | 164 virtual int scrollSize(ScrollbarOrientation) const = 0; |
| 167 void setScrollbarNeedsPaintInvalidation(ScrollbarOrientation); | 165 void setScrollbarNeedsPaintInvalidation(ScrollbarOrientation); |
| 168 virtual bool isScrollCornerVisible() const = 0; | 166 virtual bool isScrollCornerVisible() const = 0; |
| 169 virtual IntRect scrollCornerRect() const = 0; | 167 virtual IntRect scrollCornerRect() const = 0; |
| 170 void setScrollCornerNeedsPaintInvalidation(); | 168 void setScrollCornerNeedsPaintInvalidation(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 190 } | 188 } |
| 191 virtual IntPoint convertFromContainingWidgetToScrollbar( | 189 virtual IntPoint convertFromContainingWidgetToScrollbar( |
| 192 const Scrollbar& scrollbar, | 190 const Scrollbar& scrollbar, |
| 193 const IntPoint& parentPoint) const { | 191 const IntPoint& parentPoint) const { |
| 194 return scrollbar.Widget::convertFromContainingWidget(parentPoint); | 192 return scrollbar.Widget::convertFromContainingWidget(parentPoint); |
| 195 } | 193 } |
| 196 | 194 |
| 197 virtual Scrollbar* horizontalScrollbar() const { return nullptr; } | 195 virtual Scrollbar* horizontalScrollbar() const { return nullptr; } |
| 198 virtual Scrollbar* verticalScrollbar() const { return nullptr; } | 196 virtual Scrollbar* verticalScrollbar() const { return nullptr; } |
| 199 | 197 |
| 200 // scrollPosition is relative to the scrollOrigin. i.e. If the page is RTL | 198 // scrollPosition is the location of the top/left of the scroll viewport in |
| 201 // then scrollPosition will be negative. By default, scrollPositionDouble() | 199 // the coordinate system defined by the top/left of the overflow rect. |
| 202 // just call into scrollPosition(). Subclass can override | 200 // scrollOffset is the offset of the scroll viewport from its position when |
| 203 // scrollPositionDouble() to return floating point precision scrolloffset. | 201 // scrolled all the way to the beginning of its content's flow. |
| 204 // FIXME: Remove scrollPosition(). crbug.com/414283. | 202 // For a more detailed explanation of scrollPosition, scrollOffset, and |
| 205 virtual IntPoint scrollPosition() const = 0; | 203 // scrollOrigin, see core/layout/README.md. |
| 206 virtual DoublePoint scrollPositionDouble() const { | 204 FloatPoint scrollPosition() const { |
| 207 return DoublePoint(scrollPosition()); | 205 return FloatPoint(scrollOrigin()) + scrollOffset(); |
| 208 } | 206 } |
| 209 virtual IntPoint minimumScrollPosition() const = 0; | 207 virtual IntSize scrollOffsetInt() const = 0; |
| 210 virtual DoublePoint minimumScrollPositionDouble() const { | 208 virtual ScrollOffset scrollOffset() const { |
| 211 return DoublePoint(minimumScrollPosition()); | 209 return ScrollOffset(scrollOffsetInt()); |
| 212 } | 210 } |
| 213 virtual IntPoint maximumScrollPosition() const = 0; | 211 virtual IntSize minimumScrollOffsetInt() const = 0; |
| 214 virtual DoublePoint maximumScrollPositionDouble() const { | 212 virtual ScrollOffset minimumScrollOffset() const { |
| 215 return DoublePoint(maximumScrollPosition()); | 213 return ScrollOffset(minimumScrollOffsetInt()); |
| 214 } |
| 215 virtual IntSize maximumScrollOffsetInt() const = 0; |
| 216 virtual ScrollOffset maximumScrollOffset() const { |
| 217 return ScrollOffset(maximumScrollOffsetInt()); |
| 216 } | 218 } |
| 217 | 219 |
| 218 virtual DoubleRect visibleContentRectDouble( | |
| 219 IncludeScrollbarsInRect = ExcludeScrollbars) const; | |
| 220 virtual IntRect visibleContentRect( | 220 virtual IntRect visibleContentRect( |
| 221 IncludeScrollbarsInRect = ExcludeScrollbars) const; | 221 IncludeScrollbarsInRect = ExcludeScrollbars) const; |
| 222 virtual int visibleHeight() const { return visibleContentRect().height(); } | 222 virtual int visibleHeight() const { return visibleContentRect().height(); } |
| 223 virtual int visibleWidth() const { return visibleContentRect().width(); } | 223 virtual int visibleWidth() const { return visibleContentRect().width(); } |
| 224 virtual IntSize contentsSize() const = 0; | 224 virtual IntSize contentsSize() const = 0; |
| 225 virtual IntPoint lastKnownMousePosition() const { return IntPoint(); } | 225 virtual IntPoint lastKnownMousePosition() const { return IntPoint(); } |
| 226 | 226 |
| 227 virtual bool shouldSuspendScrollAnimations() const { return true; } | 227 virtual bool shouldSuspendScrollAnimations() const { return true; } |
| 228 virtual void scrollbarStyleChanged() {} | 228 virtual void scrollbarStyleChanged() {} |
| 229 virtual void scrollbarVisibilityChanged() {} | 229 virtual void scrollbarVisibilityChanged() {} |
| 230 virtual bool scrollbarsCanBeActive() const = 0; | 230 virtual bool scrollbarsCanBeActive() const = 0; |
| 231 | 231 |
| 232 // Returns the bounding box of this scrollable area, in the coordinate system | 232 // Returns the bounding box of this scrollable area, in the coordinate system |
| 233 // of the enclosing scroll view. | 233 // of the enclosing scroll view. |
| 234 virtual IntRect scrollableAreaBoundingBox() const = 0; | 234 virtual IntRect scrollableAreaBoundingBox() const = 0; |
| 235 | 235 |
| 236 virtual bool scrollAnimatorEnabled() const { return false; } | 236 virtual bool scrollAnimatorEnabled() const { return false; } |
| 237 | 237 |
| 238 // NOTE: Only called from Internals for testing. | 238 // NOTE: Only called from Internals for testing. |
| 239 void setScrollOffsetFromInternals(const IntPoint&); | 239 void updateScrollOffsetFromInternals(const IntSize&); |
| 240 | 240 |
| 241 IntPoint clampScrollPosition(const IntPoint&) const; | 241 IntSize clampScrollOffset(const IntSize&) const; |
| 242 DoublePoint clampScrollPosition(const DoublePoint&) const; | 242 ScrollOffset clampScrollOffset(const ScrollOffset&) const; |
| 243 | 243 |
| 244 // Let subclasses provide a way of asking for and servicing scroll | 244 // Let subclasses provide a way of asking for and servicing scroll |
| 245 // animations. | 245 // animations. |
| 246 virtual bool scheduleAnimation(); | 246 virtual bool scheduleAnimation(); |
| 247 virtual void serviceScrollAnimations(double monotonicTime); | 247 virtual void serviceScrollAnimations(double monotonicTime); |
| 248 virtual void updateCompositorScrollAnimations(); | 248 virtual void updateCompositorScrollAnimations(); |
| 249 virtual void registerForAnimation() {} | 249 virtual void registerForAnimation() {} |
| 250 virtual void deregisterForAnimation() {} | 250 virtual void deregisterForAnimation() {} |
| 251 | 251 |
| 252 virtual bool usesCompositedScrolling() const { return false; } | 252 virtual bool usesCompositedScrolling() const { return false; } |
| 253 virtual bool shouldScrollOnMainThread() const; | 253 virtual bool shouldScrollOnMainThread() const; |
| 254 | 254 |
| 255 // Returns true if the GraphicsLayer tree needs to be rebuilt. | 255 // Returns true if the GraphicsLayer tree needs to be rebuilt. |
| 256 virtual bool updateAfterCompositingChange() { return false; } | 256 virtual bool updateAfterCompositingChange() { return false; } |
| 257 | 257 |
| 258 virtual bool userInputScrollable(ScrollbarOrientation) const = 0; | 258 virtual bool userInputScrollable(ScrollbarOrientation) const = 0; |
| 259 virtual bool shouldPlaceVerticalScrollbarOnLeft() const = 0; | 259 virtual bool shouldPlaceVerticalScrollbarOnLeft() const = 0; |
| 260 | 260 |
| 261 // Convenience functions | 261 // Convenience functions |
| 262 int scrollPosition(ScrollbarOrientation orientation) { | 262 float scrollOffset(ScrollbarOrientation orientation) { |
| 263 return orientation == HorizontalScrollbar ? scrollPosition().x() | 263 return orientation == HorizontalScrollbar ? scrollOffsetInt().width() |
| 264 : scrollPosition().y(); | 264 : scrollOffsetInt().height(); |
| 265 } | 265 } |
| 266 int minimumScrollPosition(ScrollbarOrientation orientation) { | 266 float minimumScrollOffset(ScrollbarOrientation orientation) { |
| 267 return orientation == HorizontalScrollbar ? minimumScrollPosition().x() | 267 return orientation == HorizontalScrollbar ? minimumScrollOffset().width() |
| 268 : minimumScrollPosition().y(); | 268 : minimumScrollOffset().height(); |
| 269 } | 269 } |
| 270 int maximumScrollPosition(ScrollbarOrientation orientation) { | 270 float maximumScrollOffset(ScrollbarOrientation orientation) { |
| 271 return orientation == HorizontalScrollbar ? maximumScrollPosition().x() | 271 return orientation == HorizontalScrollbar ? maximumScrollOffset().width() |
| 272 : maximumScrollPosition().y(); | 272 : maximumScrollOffset().height(); |
| 273 } | 273 } |
| 274 int clampScrollPosition(ScrollbarOrientation orientation, int pos) { | 274 float clampScrollOffset(ScrollbarOrientation orientation, float offset) { |
| 275 return clampTo(pos, minimumScrollPosition(orientation), | 275 return clampTo(offset, minimumScrollOffset(orientation), |
| 276 maximumScrollPosition(orientation)); | 276 maximumScrollOffset(orientation)); |
| 277 } | 277 } |
| 278 | 278 |
| 279 virtual GraphicsLayer* layerForContainer() const; | 279 virtual GraphicsLayer* layerForContainer() const; |
| 280 virtual GraphicsLayer* layerForScrolling() const { return 0; } | 280 virtual GraphicsLayer* layerForScrolling() const { return 0; } |
| 281 virtual GraphicsLayer* layerForHorizontalScrollbar() const { return 0; } | 281 virtual GraphicsLayer* layerForHorizontalScrollbar() const { return 0; } |
| 282 virtual GraphicsLayer* layerForVerticalScrollbar() const { return 0; } | 282 virtual GraphicsLayer* layerForVerticalScrollbar() const { return 0; } |
| 283 virtual GraphicsLayer* layerForScrollCorner() const { return 0; } | 283 virtual GraphicsLayer* layerForScrollCorner() const { return 0; } |
| 284 bool hasLayerForHorizontalScrollbar() const; | 284 bool hasLayerForHorizontalScrollbar() const; |
| 285 bool hasLayerForVerticalScrollbar() const; | 285 bool hasLayerForVerticalScrollbar() const; |
| 286 bool hasLayerForScrollCorner() const; | 286 bool hasLayerForScrollCorner() const; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 302 virtual ScrollBehavior scrollBehaviorStyle() const { | 302 virtual ScrollBehavior scrollBehaviorStyle() const { |
| 303 return ScrollBehaviorInstant; | 303 return ScrollBehaviorInstant; |
| 304 } | 304 } |
| 305 | 305 |
| 306 // TODO(bokan): This is only used in FrameView to check scrollability but is | 306 // TODO(bokan): This is only used in FrameView to check scrollability but is |
| 307 // needed here to allow RootFrameViewport to preserve wheelHandler | 307 // needed here to allow RootFrameViewport to preserve wheelHandler |
| 308 // semantics. Not sure why it's FrameView specific, it could probably be | 308 // semantics. Not sure why it's FrameView specific, it could probably be |
| 309 // generalized to other types of ScrollableAreas. | 309 // generalized to other types of ScrollableAreas. |
| 310 virtual bool isScrollable() { return true; } | 310 virtual bool isScrollable() { return true; } |
| 311 | 311 |
| 312 // TODO(bokan): FrameView::setScrollPosition uses updateScrollbars to scroll | 312 // TODO(bokan): FrameView::setScrollOffset uses updateScrollbars to scroll |
| 313 // which bails out early if its already in updateScrollbars, the effect being | 313 // which bails out early if its already in updateScrollbars, the effect being |
| 314 // that programmatic scrolls (i.e. setScrollPosition) are disabled when in | 314 // that programmatic scrolls (i.e. setScrollOffset) are disabled when in |
| 315 // updateScrollbars. Expose this here to allow RootFrameViewport to match the | 315 // updateScrollbars. Expose this here to allow RootFrameViewport to match the |
| 316 // semantics for now but it should be cleaned up at the source. | 316 // semantics for now but it should be cleaned up at the source. |
| 317 virtual bool isProgrammaticallyScrollable() { return true; } | 317 virtual bool isProgrammaticallyScrollable() { return true; } |
| 318 | 318 |
| 319 // Subtracts space occupied by this ScrollableArea's scrollbars. | 319 // Subtracts space occupied by this ScrollableArea's scrollbars. |
| 320 // Does nothing if overlay scrollbars are enabled. | 320 // Does nothing if overlay scrollbars are enabled. |
| 321 IntSize excludeScrollbars(const IntSize&) const; | 321 IntSize excludeScrollbars(const IntSize&) const; |
| 322 | 322 |
| 323 // Returns 0 if overlay scrollbars are enabled. | 323 // Returns 0 if overlay scrollbars are enabled. |
| 324 int verticalScrollbarWidth() const; | 324 int verticalScrollbarWidth() const; |
| 325 int horizontalScrollbarHeight() const; | 325 int horizontalScrollbarHeight() const; |
| 326 | 326 |
| 327 // Returns the widget associated with this ScrollableArea. | 327 // Returns the widget associated with this ScrollableArea. |
| 328 virtual Widget* getWidget() { return nullptr; } | 328 virtual Widget* getWidget() { return nullptr; } |
| 329 | 329 |
| 330 virtual LayoutBox* layoutBox() const { return nullptr; } | 330 virtual LayoutBox* layoutBox() const { return nullptr; } |
| 331 | 331 |
| 332 virtual bool isFrameView() const { return false; } | 332 virtual bool isFrameView() const { return false; } |
| 333 virtual bool isPaintLayerScrollableArea() const { return false; } | 333 virtual bool isPaintLayerScrollableArea() const { return false; } |
| 334 virtual bool isRootFrameViewport() const { return false; } | 334 virtual bool isRootFrameViewport() const { return false; } |
| 335 | 335 |
| 336 // Returns true if the scroller adjusts the scroll position to compensate | 336 // Returns true if the scroller adjusts the scroll offset to compensate |
| 337 // for layout movements (bit.ly/scroll-anchoring). | 337 // for layout movements (bit.ly/scroll-anchoring). |
| 338 virtual bool shouldPerformScrollAnchoring() const { return false; } | 338 virtual bool shouldPerformScrollAnchoring() const { return false; } |
| 339 | 339 |
| 340 // Need to promptly let go of owned animator objects. | 340 // Need to promptly let go of owned animator objects. |
| 341 EAGERLY_FINALIZE(); | 341 EAGERLY_FINALIZE(); |
| 342 DECLARE_VIRTUAL_TRACE(); | 342 DECLARE_VIRTUAL_TRACE(); |
| 343 | 343 |
| 344 virtual void clearScrollAnimators(); | 344 virtual void clearScrollAnimators(); |
| 345 | 345 |
| 346 virtual ScrollAnchor* scrollAnchor() { return nullptr; } | 346 virtual ScrollAnchor* scrollAnchor() { return nullptr; } |
| 347 | 347 |
| 348 protected: | 348 protected: |
| 349 ScrollableArea(); | 349 ScrollableArea(); |
| 350 | 350 |
| 351 ScrollbarOrientation scrollbarOrientationFromDirection( | 351 ScrollbarOrientation scrollbarOrientationFromDirection( |
| 352 ScrollDirectionPhysical) const; | 352 ScrollDirectionPhysical) const; |
| 353 float scrollStep(ScrollGranularity, ScrollbarOrientation) const; | 353 float scrollStep(ScrollGranularity, ScrollbarOrientation) const; |
| 354 | 354 |
| 355 void setScrollOrigin(const IntPoint&); | 355 void setScrollOrigin(const IntPoint&); |
| 356 void resetScrollOriginChanged() { m_scrollOriginChanged = false; } | 356 void resetScrollOriginChanged() { m_scrollOriginChanged = false; } |
| 357 | 357 |
| 358 // Needed to let the animators call scrollPositionChanged. | 358 // Needed to let the animators call scrollOffsetChanged. |
| 359 friend class ScrollAnimatorCompositorCoordinator; | 359 friend class ScrollAnimatorCompositorCoordinator; |
| 360 void scrollPositionChanged(const DoublePoint&, ScrollType); | 360 void scrollOffsetChanged(const ScrollOffset&, ScrollType); |
| 361 | 361 |
| 362 bool horizontalScrollbarNeedsPaintInvalidation() const { | 362 bool horizontalScrollbarNeedsPaintInvalidation() const { |
| 363 return m_horizontalScrollbarNeedsPaintInvalidation; | 363 return m_horizontalScrollbarNeedsPaintInvalidation; |
| 364 } | 364 } |
| 365 bool verticalScrollbarNeedsPaintInvalidation() const { | 365 bool verticalScrollbarNeedsPaintInvalidation() const { |
| 366 return m_verticalScrollbarNeedsPaintInvalidation; | 366 return m_verticalScrollbarNeedsPaintInvalidation; |
| 367 } | 367 } |
| 368 bool scrollCornerNeedsPaintInvalidation() const { | 368 bool scrollCornerNeedsPaintInvalidation() const { |
| 369 return m_scrollCornerNeedsPaintInvalidation; | 369 return m_scrollCornerNeedsPaintInvalidation; |
| 370 } | 370 } |
| 371 void clearNeedsPaintInvalidationForScrollControls() { | 371 void clearNeedsPaintInvalidationForScrollControls() { |
| 372 m_horizontalScrollbarNeedsPaintInvalidation = false; | 372 m_horizontalScrollbarNeedsPaintInvalidation = false; |
| 373 m_verticalScrollbarNeedsPaintInvalidation = false; | 373 m_verticalScrollbarNeedsPaintInvalidation = false; |
| 374 m_scrollCornerNeedsPaintInvalidation = false; | 374 m_scrollCornerNeedsPaintInvalidation = false; |
| 375 } | 375 } |
| 376 | 376 |
| 377 private: | 377 private: |
| 378 void programmaticScrollHelper(const DoublePoint&, ScrollBehavior); | 378 void programmaticScrollHelper(const ScrollOffset&, ScrollBehavior); |
| 379 void userScrollHelper(const DoublePoint&, ScrollBehavior); | 379 void userScrollHelper(const ScrollOffset&, ScrollBehavior); |
| 380 | 380 |
| 381 // This function should be overriden by subclasses to perform the actual | 381 // This function should be overriden by subclasses to perform the actual |
| 382 // scroll of the content. | 382 // scroll of the content. |
| 383 virtual void setScrollOffset(const DoublePoint&, ScrollType) = 0; | 383 virtual void updateScrollOffset(const ScrollOffset&, ScrollType) = 0; |
| 384 | 384 |
| 385 virtual int lineStep(ScrollbarOrientation) const; | 385 virtual int lineStep(ScrollbarOrientation) const; |
| 386 virtual int pageStep(ScrollbarOrientation) const; | 386 virtual int pageStep(ScrollbarOrientation) const; |
| 387 virtual int documentStep(ScrollbarOrientation) const; | 387 virtual int documentStep(ScrollbarOrientation) const; |
| 388 virtual float pixelStep(ScrollbarOrientation) const; | 388 virtual float pixelStep(ScrollbarOrientation) const; |
| 389 | 389 |
| 390 mutable Member<ScrollAnimatorBase> m_scrollAnimator; | 390 mutable Member<ScrollAnimatorBase> m_scrollAnimator; |
| 391 mutable Member<ProgrammaticScrollAnimator> m_programmaticScrollAnimator; | 391 mutable Member<ProgrammaticScrollAnimator> m_programmaticScrollAnimator; |
| 392 | 392 |
| 393 unsigned m_scrollbarOverlayStyle : 2; // ScrollbarOverlayStyle | 393 unsigned m_scrollbarOverlayStyle : 2; // ScrollbarOverlayStyle |
| (...skipping 13 matching lines...) Expand all Loading... |
| 407 // vertical-lr / ltr NO NO | 407 // vertical-lr / ltr NO NO |
| 408 // vertical-lr / rtl NO YES | 408 // vertical-lr / rtl NO YES |
| 409 // vertical-rl / ltr YES NO | 409 // vertical-rl / ltr YES NO |
| 410 // vertical-rl / rtl YES YES | 410 // vertical-rl / rtl YES YES |
| 411 IntPoint m_scrollOrigin; | 411 IntPoint m_scrollOrigin; |
| 412 }; | 412 }; |
| 413 | 413 |
| 414 } // namespace blink | 414 } // namespace blink |
| 415 | 415 |
| 416 #endif // ScrollableArea_h | 416 #endif // ScrollableArea_h |
| OLD | NEW |