Add CSS -webkit-appearance property for Apple Pay buttons
[WebKit-https.git] / Source / WebCore / platform / ScrollTypes.h
1 /*
2  * Copyright (C) 2006 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. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
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. 
24  */
25
26 #ifndef ScrollTypes_h
27 #define ScrollTypes_h
28
29 #include <cstdint>
30 #include <wtf/Assertions.h>
31
32 namespace WebCore {
33
34 enum ScrollDirection : uint8_t {
35     ScrollUp,
36     ScrollDown,
37     ScrollLeft,
38     ScrollRight
39 };
40
41 enum ScrollLogicalDirection : uint8_t {
42     ScrollBlockDirectionBackward,
43     ScrollBlockDirectionForward,
44     ScrollInlineDirectionBackward,
45     ScrollInlineDirectionForward
46 };
47
48
49 inline ScrollDirection logicalToPhysical(ScrollLogicalDirection direction, bool isVertical, bool isFlipped)
50 {
51     switch (direction) {
52     case ScrollBlockDirectionBackward: {
53         if (isVertical) {
54             if (!isFlipped)
55                 return ScrollUp;
56             return ScrollDown;
57         } else {
58             if (!isFlipped)
59                 return ScrollLeft;
60             return ScrollRight;
61         }
62         break;
63     }
64     case ScrollBlockDirectionForward: {
65         if (isVertical) {
66             if (!isFlipped)
67                 return ScrollDown;
68             return ScrollUp;
69         } else {
70             if (!isFlipped)
71                 return ScrollRight;
72             return ScrollLeft;
73         }
74         break;
75     }
76     case ScrollInlineDirectionBackward: {
77         if (isVertical) {
78             if (!isFlipped)
79                 return ScrollLeft;
80             return ScrollRight;
81         } else {
82             if (!isFlipped)
83                 return ScrollUp;
84             return ScrollDown;
85         }
86         break;
87     }
88     case ScrollInlineDirectionForward: {
89         if (isVertical) {
90             if (!isFlipped)
91                 return ScrollRight;
92             return ScrollLeft;
93         } else {
94             if (!isFlipped)
95                 return ScrollDown;
96             return ScrollUp;
97         }
98         break;
99     }
100     default:
101         ASSERT_NOT_REACHED();
102         break;
103     }
104     return ScrollUp;
105 }
106
107 enum ScrollGranularity : uint8_t {
108     ScrollByLine,
109     ScrollByPage,
110     ScrollByDocument,
111     ScrollByPixel,
112     ScrollByPrecisePixel
113 };
114
115 enum ScrollElasticity {
116     ScrollElasticityAutomatic,
117     ScrollElasticityNone,
118     ScrollElasticityAllowed
119 };
120
121 enum ScrollbarOrientation { HorizontalScrollbar, VerticalScrollbar };
122
123 enum ScrollbarMode { ScrollbarAuto, ScrollbarAlwaysOff, ScrollbarAlwaysOn };
124
125 enum ScrollbarControlSize { RegularScrollbar, SmallScrollbar };
126
127 enum class ScrollEventAxis { Horizontal, Vertical };
128
129 typedef unsigned ScrollbarControlState;
130
131 enum ScrollbarControlStateMask {
132     ActiveScrollbarState = 1,
133     EnabledScrollbarState = 1 << 1,
134     PressedScrollbarState = 1 << 2
135 };
136
137 enum ScrollbarPart {
138     NoPart = 0,
139     BackButtonStartPart = 1,
140     ForwardButtonStartPart = 1 << 1,
141     BackTrackPart = 1 << 2,
142     ThumbPart = 1 << 3,
143     ForwardTrackPart = 1 << 4,
144     BackButtonEndPart = 1 << 5,
145     ForwardButtonEndPart = 1 << 6,
146     ScrollbarBGPart = 1 << 7,
147     TrackBGPart = 1 << 8,
148     AllParts = 0xffffffff
149 };
150
151 enum ScrollbarButtonsPlacement {
152     ScrollbarButtonsNone,
153     ScrollbarButtonsSingle,
154     ScrollbarButtonsDoubleStart,
155     ScrollbarButtonsDoubleEnd,
156     ScrollbarButtonsDoubleBoth
157 };
158
159 enum class ScrollbarStyle {
160     AlwaysVisible,
161     Overlay
162 };
163
164 enum ScrollbarOverlayStyle {
165     ScrollbarOverlayStyleDefault,
166     ScrollbarOverlayStyleDark,
167     ScrollbarOverlayStyleLight
168 };
169
170 typedef unsigned ScrollbarControlPartMask;
171
172 enum ScrollPinningBehavior {
173     DoNotPin,
174     PinToTop,
175     PinToBottom
176 };
177
178 enum ScrollBehaviorForFixedElements {
179     StickToDocumentBounds,
180     StickToViewportBounds
181 };
182
183 enum class ScrollbarButtonPressAction {
184     None,
185     CenterOnThumb,
186     StartDrag,
187     Scroll
188 };
189
190 }
191
192 #endif