Remove "virtual" from all lines that have both "virtual" and "override".
[WebKit-https.git] / Source / WebCore / page / scrolling / ScrollingStateFrameScrollingNode.h
1 /*
2  * Copyright (C) 2014 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 ScrollingStateFrameScrollingNode_h
27 #define ScrollingStateFrameScrollingNode_h
28
29 #if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
30
31 #include "Region.h"
32 #include "ScrollTypes.h"
33 #include "ScrollbarThemeComposite.h"
34 #include "ScrollingCoordinator.h"
35 #include "ScrollingStateScrollingNode.h"
36
37 namespace WebCore {
38
39 class Scrollbar;
40
41 class ScrollingStateFrameScrollingNode final : public ScrollingStateScrollingNode {
42 public:
43     static Ref<ScrollingStateFrameScrollingNode> create(ScrollingStateTree&, ScrollingNodeID);
44
45     Ref<ScrollingStateNode> clone(ScrollingStateTree&) override;
46
47     virtual ~ScrollingStateFrameScrollingNode();
48
49     enum ChangedProperty {
50         FrameScaleFactor = NumScrollingStateNodeBits,
51         NonFastScrollableRegion,
52         ReasonsForSynchronousScrolling,
53         ScrolledContentsLayer,
54         CounterScrollingLayer,
55         InsetClipLayer,
56         ContentShadowLayer,
57         HeaderHeight,
58         FooterHeight,
59         HeaderLayer,
60         FooterLayer,
61         PainterForScrollbar,
62         BehaviorForFixedElements,
63         TopContentInset,
64         FixedElementsLayoutRelativeToFrame,
65     };
66
67     float frameScaleFactor() const { return m_frameScaleFactor; }
68     WEBCORE_EXPORT void setFrameScaleFactor(float);
69
70     const Region& nonFastScrollableRegion() const { return m_nonFastScrollableRegion; }
71     WEBCORE_EXPORT void setNonFastScrollableRegion(const Region&);
72
73     SynchronousScrollingReasons synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
74     WEBCORE_EXPORT void setSynchronousScrollingReasons(SynchronousScrollingReasons);
75
76     ScrollBehaviorForFixedElements scrollBehaviorForFixedElements() const { return m_behaviorForFixed; }
77     WEBCORE_EXPORT void setScrollBehaviorForFixedElements(ScrollBehaviorForFixedElements);
78
79     int headerHeight() const { return m_headerHeight; }
80     WEBCORE_EXPORT void setHeaderHeight(int);
81
82     int footerHeight() const { return m_footerHeight; }
83     WEBCORE_EXPORT void setFooterHeight(int);
84
85     float topContentInset() const { return m_topContentInset; }
86     WEBCORE_EXPORT void setTopContentInset(float);
87
88     const LayerRepresentation& scrolledContentsLayer() const { return m_scrolledContentsLayer; }
89     WEBCORE_EXPORT void setScrolledContentsLayer(const LayerRepresentation&);
90
91     // This is a layer moved in the opposite direction to scrolling, for example for background-attachment:fixed
92     const LayerRepresentation& counterScrollingLayer() const { return m_counterScrollingLayer; }
93     WEBCORE_EXPORT void setCounterScrollingLayer(const LayerRepresentation&);
94
95     // This is a clipping layer that will scroll with the page for all y-delta scroll values between 0
96     // and topContentInset(). Once the y-deltas get beyond the content inset point, this layer no longer
97     // needs to move. If the topContentInset() is 0, this layer does not need to move at all. This is
98     // only used on the Mac.
99     const LayerRepresentation& insetClipLayer() const { return m_insetClipLayer; }
100     WEBCORE_EXPORT void setInsetClipLayer(const LayerRepresentation&);
101
102     const LayerRepresentation& contentShadowLayer() const { return m_contentShadowLayer; }
103     WEBCORE_EXPORT void setContentShadowLayer(const LayerRepresentation&);
104
105     // The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally.
106     const LayerRepresentation& headerLayer() const { return m_headerLayer; }
107     WEBCORE_EXPORT void setHeaderLayer(const LayerRepresentation&);
108
109     // The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally.
110     const LayerRepresentation& footerLayer() const { return m_footerLayer; }
111     WEBCORE_EXPORT void setFooterLayer(const LayerRepresentation&);
112
113     bool fixedElementsLayoutRelativeToFrame() const { return m_fixedElementsLayoutRelativeToFrame; }
114     WEBCORE_EXPORT void setFixedElementsLayoutRelativeToFrame(bool);
115
116 #if PLATFORM(MAC)
117     ScrollbarPainter verticalScrollbarPainter() const { return m_verticalScrollbarPainter.get(); }
118     ScrollbarPainter horizontalScrollbarPainter() const { return m_horizontalScrollbarPainter.get(); }
119 #endif
120     void setScrollbarPaintersFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar);
121
122     void dumpProperties(TextStream&, int indent) const override;
123
124 private:
125     ScrollingStateFrameScrollingNode(ScrollingStateTree&, ScrollingNodeID);
126     ScrollingStateFrameScrollingNode(const ScrollingStateFrameScrollingNode&, ScrollingStateTree&);
127
128     LayerRepresentation m_counterScrollingLayer;
129     LayerRepresentation m_insetClipLayer;
130     LayerRepresentation m_scrolledContentsLayer;
131     LayerRepresentation m_contentShadowLayer;
132     LayerRepresentation m_headerLayer;
133     LayerRepresentation m_footerLayer;
134
135 #if PLATFORM(MAC)
136     RetainPtr<ScrollbarPainter> m_verticalScrollbarPainter;
137     RetainPtr<ScrollbarPainter> m_horizontalScrollbarPainter;
138 #endif
139
140     Region m_nonFastScrollableRegion;
141     FloatPoint m_requestedScrollPosition;
142     float m_frameScaleFactor { 1 };
143     float m_topContentInset { 0 };
144     int m_headerHeight { 0 };
145     int m_footerHeight { 0 };
146     SynchronousScrollingReasons m_synchronousScrollingReasons { 0 };
147     ScrollBehaviorForFixedElements m_behaviorForFixed { StickToDocumentBounds };
148     bool m_requestedScrollPositionRepresentsProgrammaticScroll { false };
149     bool m_fixedElementsLayoutRelativeToFrame { false };
150 };
151
152 } // namespace WebCore
153
154 SPECIALIZE_TYPE_TRAITS_SCROLLING_STATE_NODE(ScrollingStateFrameScrollingNode, isFrameScrollingNode())
155
156 #endif // ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
157
158 #endif // ScrollingStateFrameScrollingNode_h