Use an enum for scrollbar style
[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 #ifdef __cplusplus
30
31 namespace WebCore {
32
33     enum ScrollDirection : uint8_t {
34         ScrollUp,
35         ScrollDown,
36         ScrollLeft,
37         ScrollRight
38     };
39
40     enum ScrollLogicalDirection : uint8_t {
41         ScrollBlockDirectionBackward,
42         ScrollBlockDirectionForward,
43         ScrollInlineDirectionBackward,
44         ScrollInlineDirectionForward
45     };
46     
47     
48     inline ScrollDirection logicalToPhysical(ScrollLogicalDirection direction, bool isVertical, bool isFlipped) 
49     {
50         switch (direction) {
51         case ScrollBlockDirectionBackward: {
52             if (isVertical) {
53                 if (!isFlipped)
54                     return ScrollUp;
55                 return ScrollDown;
56             } else {
57                 if (!isFlipped)
58                     return ScrollLeft;
59                 return ScrollRight;
60             }
61             break;
62         }
63         case ScrollBlockDirectionForward: {
64             if (isVertical) {
65                 if (!isFlipped)
66                     return ScrollDown;
67                 return ScrollUp;
68             } else {
69                 if (!isFlipped)
70                     return ScrollRight;
71                 return ScrollLeft;
72             }
73             break;
74         }
75         case ScrollInlineDirectionBackward: {
76             if (isVertical) {
77                 if (!isFlipped)
78                     return ScrollLeft;
79                 return ScrollRight;
80             } else {
81                 if (!isFlipped)
82                     return ScrollUp;
83                 return ScrollDown;
84             }
85             break;
86         }
87         case ScrollInlineDirectionForward: {
88             if (isVertical) {
89                 if (!isFlipped)
90                     return ScrollRight;
91                 return ScrollLeft;
92             } else {
93                 if (!isFlipped)
94                     return ScrollDown;
95                 return ScrollUp;
96             }
97             break;
98         }
99         default:
100             ASSERT_NOT_REACHED();
101             break;
102         }
103         return ScrollUp;
104     }
105
106     enum ScrollGranularity : uint8_t {
107         ScrollByLine,
108         ScrollByPage,
109         ScrollByDocument,
110         ScrollByPixel,
111         ScrollByPrecisePixel
112     };
113
114     enum ScrollElasticity {
115         ScrollElasticityAutomatic,
116         ScrollElasticityNone,
117         ScrollElasticityAllowed
118     };
119
120     enum ScrollbarOrientation { HorizontalScrollbar, VerticalScrollbar };
121
122     enum ScrollbarMode { ScrollbarAuto, ScrollbarAlwaysOff, ScrollbarAlwaysOn };
123
124     enum ScrollbarControlSize { RegularScrollbar, SmallScrollbar };
125
126     enum class ScrollEventAxis { Horizontal, Vertical };
127
128     typedef unsigned ScrollbarControlState;
129
130     enum ScrollbarControlStateMask {
131         ActiveScrollbarState = 1,
132         EnabledScrollbarState = 1 << 1,
133         PressedScrollbarState = 1 << 2
134     };
135
136     enum ScrollbarPart {
137         NoPart = 0,
138         BackButtonStartPart = 1,
139         ForwardButtonStartPart = 1 << 1,
140         BackTrackPart = 1 << 2,
141         ThumbPart = 1 << 3,
142         ForwardTrackPart = 1 << 4,
143         BackButtonEndPart = 1 << 5,
144         ForwardButtonEndPart = 1 << 6,
145         ScrollbarBGPart = 1 << 7,
146         TrackBGPart = 1 << 8,
147         AllParts = 0xffffffff
148     };
149
150     enum ScrollbarButtonsPlacement {
151         ScrollbarButtonsNone,
152         ScrollbarButtonsSingle,
153         ScrollbarButtonsDoubleStart,
154         ScrollbarButtonsDoubleEnd,
155         ScrollbarButtonsDoubleBoth
156     };
157
158     enum class ScrollbarStyle {
159         AlwaysVisible,
160         Overlay
161     };
162     
163     enum ScrollbarOverlayStyle {
164         ScrollbarOverlayStyleDefault,
165         ScrollbarOverlayStyleDark,
166         ScrollbarOverlayStyleLight
167     };
168
169     enum ScrollbarOverlayState {
170         ScrollbarOverlayStateHidden,
171         ScrollbarOverlayStateThumbShown,
172         ScrollbarOverlayStateAllShown,
173         ScrollbarOverlayStatePulseThumb
174     };
175
176     typedef unsigned ScrollbarControlPartMask;
177
178     enum ScrollPinningBehavior {
179         DoNotPin,
180         PinToTop,
181         PinToBottom
182     };
183
184     enum ScrollBehaviorForFixedElements {
185         StickToDocumentBounds,
186         StickToViewportBounds
187     };
188 }
189
190 #endif // __cplusplus
191
192 #endif