diff options
Diffstat (limited to 'Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h')
| -rw-r--r-- | Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h | 156 |
1 files changed, 96 insertions, 60 deletions
diff --git a/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h b/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h index 091efd1fa..14be04b97 100644 --- a/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h +++ b/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012, 2014-2015 Apple Inc. All rights reserved. + * Copyright (C) 2012 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -28,100 +28,136 @@ #if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS) +#include "GraphicsLayer.h" +#include "IntRect.h" +#include "Region.h" #include "ScrollTypes.h" +#include "ScrollbarThemeComposite.h" #include "ScrollingCoordinator.h" #include "ScrollingStateNode.h" +#include <wtf/PassOwnPtr.h> namespace WebCore { -class ScrollingStateScrollingNode : public ScrollingStateNode { +class Scrollbar; + +class ScrollingStateScrollingNode final : public ScrollingStateNode { public: + static PassOwnPtr<ScrollingStateScrollingNode> create(ScrollingStateTree&, ScrollingNodeID); + + virtual PassOwnPtr<ScrollingStateNode> clone(ScrollingStateTree&); + virtual ~ScrollingStateScrollingNode(); enum ChangedProperty { - ScrollableAreaSize = NumStateNodeBits, + ViewportRect = NumStateNodeBits, TotalContentsSize, - ReachableContentsSize, - ScrollPosition, ScrollOrigin, ScrollableAreaParams, + FrameScaleFactor, + NonFastScrollableRegion, + WheelEventHandlerCount, + ReasonsForSynchronousScrolling, RequestedScrollPosition, - NumScrollingStateNodeBits, -#if ENABLE(CSS_SCROLL_SNAP) - HorizontalSnapOffsets, - VerticalSnapOffsets, - CurrentHorizontalSnapOffsetIndex, - CurrentVerticalSnapOffsetIndex, -#endif - ExpectsWheelEventTestTrigger, + CounterScrollingLayer, + HeaderHeight, + FooterHeight, + HeaderLayer, + FooterLayer, + PainterForScrollbar, + BehaviorForFixedElements }; - const FloatSize& scrollableAreaSize() const { return m_scrollableAreaSize; } - WEBCORE_EXPORT void setScrollableAreaSize(const FloatSize&); + const IntRect& viewportRect() const { return m_viewportRect; } + void setViewportRect(const IntRect&); - const FloatSize& totalContentsSize() const { return m_totalContentsSize; } - WEBCORE_EXPORT void setTotalContentsSize(const FloatSize&); - - const FloatSize& reachableContentsSize() const { return m_reachableContentsSize; } - WEBCORE_EXPORT void setReachableContentsSize(const FloatSize&); - - const FloatPoint& scrollPosition() const { return m_scrollPosition; } - WEBCORE_EXPORT void setScrollPosition(const FloatPoint&); + const IntSize& totalContentsSize() const { return m_totalContentsSize; } + void setTotalContentsSize(const IntSize&); const IntPoint& scrollOrigin() const { return m_scrollOrigin; } - WEBCORE_EXPORT void setScrollOrigin(const IntPoint&); + void setScrollOrigin(const IntPoint&); -#if ENABLE(CSS_SCROLL_SNAP) - const Vector<float>& horizontalSnapOffsets() const { return m_horizontalSnapOffsets; } - WEBCORE_EXPORT void setHorizontalSnapOffsets(const Vector<float>&); + float frameScaleFactor() const { return m_frameScaleFactor; } + void setFrameScaleFactor(float); - const Vector<float>& verticalSnapOffsets() const { return m_verticalSnapOffsets; } - WEBCORE_EXPORT void setVerticalSnapOffsets(const Vector<float>&); + const Region& nonFastScrollableRegion() const { return m_nonFastScrollableRegion; } + void setNonFastScrollableRegion(const Region&); - unsigned currentHorizontalSnapPointIndex() const { return m_currentHorizontalSnapPointIndex; } - WEBCORE_EXPORT void setCurrentHorizontalSnapPointIndex(unsigned); + unsigned wheelEventHandlerCount() const { return m_wheelEventHandlerCount; } + void setWheelEventHandlerCount(unsigned); - unsigned currentVerticalSnapPointIndex() const { return m_currentVerticalSnapPointIndex; } - WEBCORE_EXPORT void setCurrentVerticalSnapPointIndex(unsigned); -#endif + SynchronousScrollingReasons synchronousScrollingReasons() const { return m_synchronousScrollingReasons; } + void setSynchronousScrollingReasons(SynchronousScrollingReasons); const ScrollableAreaParameters& scrollableAreaParameters() const { return m_scrollableAreaParameters; } - WEBCORE_EXPORT void setScrollableAreaParameters(const ScrollableAreaParameters& params); + void setScrollableAreaParameters(const ScrollableAreaParameters& params); - const FloatPoint& requestedScrollPosition() const { return m_requestedScrollPosition; } - bool requestedScrollPositionRepresentsProgrammaticScroll() const { return m_requestedScrollPositionRepresentsProgrammaticScroll; } - WEBCORE_EXPORT void setRequestedScrollPosition(const FloatPoint&, bool representsProgrammaticScroll); + ScrollBehaviorForFixedElements scrollBehaviorForFixedElements() const { return m_behaviorForFixed; } + void setScrollBehaviorForFixedElements(ScrollBehaviorForFixedElements); + + const IntPoint& requestedScrollPosition() const { return m_requestedScrollPosition; } + void setRequestedScrollPosition(const IntPoint&, bool representsProgrammaticScroll); + + int headerHeight() const { return m_headerHeight; } + void setHeaderHeight(int); + + int footerHeight() const { return m_footerHeight; } + void setFooterHeight(int); + + // This is a layer moved in the opposite direction to scrolling, for example for background-attachment:fixed + const LayerRepresentation& counterScrollingLayer() const { return m_counterScrollingLayer; } + void setCounterScrollingLayer(const LayerRepresentation&); + + // The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally. + const LayerRepresentation& headerLayer() const { return m_headerLayer; } + void setHeaderLayer(const LayerRepresentation&); + + // The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally. + const LayerRepresentation& footerLayer() const { return m_footerLayer; } + void setFooterLayer(const LayerRepresentation&); + +#if PLATFORM(MAC) && !PLATFORM(IOS) + ScrollbarPainter verticalScrollbarPainter() const { return m_verticalScrollbarPainter.get(); } + ScrollbarPainter horizontalScrollbarPainter() const { return m_horizontalScrollbarPainter.get(); } +#endif + void setScrollbarPaintersFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar); - bool expectsWheelEventTestTrigger() const { return m_expectsWheelEventTestTrigger; } - WEBCORE_EXPORT void setExpectsWheelEventTestTrigger(bool); + bool requestedScrollPositionRepresentsProgrammaticScroll() const { return m_requestedScrollPositionRepresentsProgrammaticScroll; } virtual void dumpProperties(TextStream&, int indent) const override; - -protected: - ScrollingStateScrollingNode(ScrollingStateTree&, ScrollingNodeType, ScrollingNodeID); - ScrollingStateScrollingNode(const ScrollingStateScrollingNode&, ScrollingStateTree&); - + private: - FloatSize m_scrollableAreaSize; - FloatSize m_totalContentsSize; - FloatSize m_reachableContentsSize; - FloatPoint m_scrollPosition; - FloatPoint m_requestedScrollPosition; - IntPoint m_scrollOrigin; -#if ENABLE(CSS_SCROLL_SNAP) - Vector<float> m_horizontalSnapOffsets; - Vector<float> m_verticalSnapOffsets; - unsigned m_currentHorizontalSnapPointIndex { 0 }; - unsigned m_currentVerticalSnapPointIndex { 0 }; + ScrollingStateScrollingNode(ScrollingStateTree&, ScrollingNodeID); + ScrollingStateScrollingNode(const ScrollingStateScrollingNode&, ScrollingStateTree&); + + LayerRepresentation m_counterScrollingLayer; + LayerRepresentation m_headerLayer; + LayerRepresentation m_footerLayer; + +#if PLATFORM(MAC) && !PLATFORM(IOS) + RetainPtr<ScrollbarPainter> m_verticalScrollbarPainter; + RetainPtr<ScrollbarPainter> m_horizontalScrollbarPainter; #endif + + IntRect m_viewportRect; + IntSize m_totalContentsSize; + IntPoint m_scrollOrigin; + ScrollableAreaParameters m_scrollableAreaParameters; - bool m_requestedScrollPositionRepresentsProgrammaticScroll { false }; - bool m_expectsWheelEventTestTrigger { false }; + Region m_nonFastScrollableRegion; + float m_frameScaleFactor; + unsigned m_wheelEventHandlerCount; + SynchronousScrollingReasons m_synchronousScrollingReasons; + ScrollBehaviorForFixedElements m_behaviorForFixed; + int m_headerHeight; + int m_footerHeight; + IntPoint m_requestedScrollPosition; + bool m_requestedScrollPositionRepresentsProgrammaticScroll; }; -} // namespace WebCore +SCROLLING_STATE_NODE_TYPE_CASTS(ScrollingStateScrollingNode, nodeType() == ScrollingNode); -SPECIALIZE_TYPE_TRAITS_SCROLLING_STATE_NODE(ScrollingStateScrollingNode, isScrollingNode()) +} // namespace WebCore #endif // ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS) |
