Fix scrolling tree dumping
[WebKit-https.git] / Source / WebCore / page / scrolling / ScrollingStateScrollingNode.h
1 /*
2  * Copyright (C) 2012, 2014-2015 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 ScrollingStateScrollingNode_h
27 #define ScrollingStateScrollingNode_h
28
29 #if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
30
31 #include "ScrollTypes.h"
32 #include "ScrollingCoordinator.h"
33 #include "ScrollingStateNode.h"
34
35 namespace WebCore {
36
37 class ScrollingStateScrollingNode : public ScrollingStateNode {
38 public:
39     virtual ~ScrollingStateScrollingNode();
40
41     enum ChangedProperty {
42         ScrollableAreaSize = NumStateNodeBits,
43         TotalContentsSize,
44         ReachableContentsSize,
45         ScrollPosition,
46         ScrollOrigin,
47         ScrollableAreaParams,
48         RequestedScrollPosition,
49         NumScrollingStateNodeBits,
50 #if ENABLE(CSS_SCROLL_SNAP)
51         HorizontalSnapOffsets,
52         VerticalSnapOffsets,
53         CurrentHorizontalSnapOffsetIndex,
54         CurrentVerticalSnapOffsetIndex,
55 #endif
56         ExpectsWheelEventTestTrigger,
57     };
58
59     const FloatSize& scrollableAreaSize() const { return m_scrollableAreaSize; }
60     WEBCORE_EXPORT void setScrollableAreaSize(const FloatSize&);
61
62     const FloatSize& totalContentsSize() const { return m_totalContentsSize; }
63     WEBCORE_EXPORT void setTotalContentsSize(const FloatSize&);
64
65     const FloatSize& reachableContentsSize() const { return m_reachableContentsSize; }
66     WEBCORE_EXPORT void setReachableContentsSize(const FloatSize&);
67
68     const FloatPoint& scrollPosition() const { return m_scrollPosition; }
69     WEBCORE_EXPORT void setScrollPosition(const FloatPoint&);
70
71     const IntPoint& scrollOrigin() const { return m_scrollOrigin; }
72     WEBCORE_EXPORT void setScrollOrigin(const IntPoint&);
73
74 #if ENABLE(CSS_SCROLL_SNAP)
75     const Vector<float>& horizontalSnapOffsets() const { return m_horizontalSnapOffsets; }
76     WEBCORE_EXPORT void setHorizontalSnapOffsets(const Vector<float>&);
77
78     const Vector<float>& verticalSnapOffsets() const { return m_verticalSnapOffsets; }
79     WEBCORE_EXPORT void setVerticalSnapOffsets(const Vector<float>&);
80
81     unsigned currentHorizontalSnapPointIndex() const { return m_currentHorizontalSnapPointIndex; }
82     WEBCORE_EXPORT void setCurrentHorizontalSnapPointIndex(unsigned);
83
84     unsigned currentVerticalSnapPointIndex() const { return m_currentVerticalSnapPointIndex; }
85     WEBCORE_EXPORT void setCurrentVerticalSnapPointIndex(unsigned);
86 #endif
87
88     const ScrollableAreaParameters& scrollableAreaParameters() const { return m_scrollableAreaParameters; }
89     WEBCORE_EXPORT void setScrollableAreaParameters(const ScrollableAreaParameters& params);
90
91     const FloatPoint& requestedScrollPosition() const { return m_requestedScrollPosition; }
92     bool requestedScrollPositionRepresentsProgrammaticScroll() const { return m_requestedScrollPositionRepresentsProgrammaticScroll; }
93     WEBCORE_EXPORT void setRequestedScrollPosition(const FloatPoint&, bool representsProgrammaticScroll);
94
95     bool expectsWheelEventTestTrigger() const { return m_expectsWheelEventTestTrigger; }
96     WEBCORE_EXPORT void setExpectsWheelEventTestTrigger(bool);
97
98 protected:
99     ScrollingStateScrollingNode(ScrollingStateTree&, ScrollingNodeType, ScrollingNodeID);
100     ScrollingStateScrollingNode(const ScrollingStateScrollingNode&, ScrollingStateTree&);
101
102     void dumpProperties(TextStream&, int indent, ScrollingStateTreeAsTextBehavior) const override;
103     
104 private:
105     FloatSize m_scrollableAreaSize;
106     FloatSize m_totalContentsSize;
107     FloatSize m_reachableContentsSize;
108     FloatPoint m_scrollPosition;
109     FloatPoint m_requestedScrollPosition;
110     IntPoint m_scrollOrigin;
111 #if ENABLE(CSS_SCROLL_SNAP)
112     Vector<float> m_horizontalSnapOffsets;
113     Vector<float> m_verticalSnapOffsets;
114     unsigned m_currentHorizontalSnapPointIndex { 0 };
115     unsigned m_currentVerticalSnapPointIndex { 0 };
116 #endif
117     ScrollableAreaParameters m_scrollableAreaParameters;
118     bool m_requestedScrollPositionRepresentsProgrammaticScroll { false };
119     bool m_expectsWheelEventTestTrigger { false };
120 };
121
122 } // namespace WebCore
123
124 SPECIALIZE_TYPE_TRAITS_SCROLLING_STATE_NODE(ScrollingStateScrollingNode, isScrollingNode())
125
126 #endif // ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
127
128 #endif // ScrollingStateScrollingNode_h