Unreviewed, rolling out r126169.
[WebKit-https.git] / Source / WebCore / platform / PlatformWheelEvent.h
1 /*
2  * Copyright (C) 2004, 2005, 2006, 2009 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 COMPUTER, 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 COMPUTER, 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 PlatformWheelEvent_h
27 #define PlatformWheelEvent_h
28
29 #include "IntPoint.h"
30 #include "PlatformEvent.h"
31 #if OS(WINDOWS)
32 #include "WindowsExtras.h"
33 #endif
34
35 #if PLATFORM(GTK)
36 typedef struct _GdkEventScroll GdkEventScroll;
37 #endif
38
39 #if PLATFORM(EFL)
40 typedef struct _Evas_Event_Mouse_Wheel Evas_Event_Mouse_Wheel;
41 #endif
42
43 #if PLATFORM(WX)
44 class wxMouseEvent;
45 class wxPoint;
46 #endif
47
48 #if PLATFORM(HAIKU)
49 class BMessage;
50 #endif
51
52 namespace WebCore {
53
54     class FloatPoint;
55     class FloatSize;
56
57     // Wheel events come in two flavors:
58     // The ScrollByPixelWheelEvent is a fine-grained event that specifies the precise number of pixels to scroll.  It is sent directly by MacBook touchpads on OS X,
59     // and synthesized in other cases where platforms generate line-by-line scrolling events.
60     // The ScrollByPageWheelEvent indicates that the wheel event should scroll an entire page.  In this case WebCore's built in paging behavior is used to page
61     // up and down (you get the same behavior as if the user was clicking in a scrollbar track to page up or page down).
62     enum PlatformWheelEventGranularity {
63         ScrollByPageWheelEvent,
64         ScrollByPixelWheelEvent,
65         ScrollByPixelVelocityWheelEvent
66     };
67
68 #if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
69     enum PlatformWheelEventPhase {
70         PlatformWheelEventPhaseNone        = 0,
71         PlatformWheelEventPhaseBegan       = 1 << 0,
72         PlatformWheelEventPhaseStationary  = 1 << 1,
73         PlatformWheelEventPhaseChanged     = 1 << 2,
74         PlatformWheelEventPhaseEnded       = 1 << 3,
75         PlatformWheelEventPhaseCancelled   = 1 << 4,
76         PlatformWheelEventPhaseMayBegin    = 1 << 5,
77     };
78 #endif
79
80     class PlatformWheelEvent : public PlatformEvent {
81     public:
82         PlatformWheelEvent()
83             : PlatformEvent(PlatformEvent::Wheel)
84             , m_deltaX(0)
85             , m_deltaY(0)
86             , m_wheelTicksX(0)
87             , m_wheelTicksY(0)
88             , m_granularity(ScrollByPixelWheelEvent)
89             , m_directionInvertedFromDevice(false)
90 #if PLATFORM(MAC) || PLATFORM(CHROMIUM)
91             , m_hasPreciseScrollingDeltas(false)
92 #endif
93 #if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
94             , m_phase(PlatformWheelEventPhaseNone)
95             , m_momentumPhase(PlatformWheelEventPhaseNone)
96             , m_scrollCount(0)
97             , m_unacceleratedScrollingDeltaX(0)
98             , m_unacceleratedScrollingDeltaY(0)
99 #endif
100         {
101         }
102
103         PlatformWheelEvent(IntPoint position, IntPoint globalPosition, float deltaX, float deltaY, float wheelTicksX, float wheelTicksY, PlatformWheelEventGranularity granularity, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey)
104             : PlatformEvent(PlatformEvent::Wheel, shiftKey, ctrlKey, altKey, metaKey, 0)
105             , m_position(position)
106             , m_globalPosition(globalPosition)
107             , m_deltaX(deltaX)
108             , m_deltaY(deltaY)
109             , m_wheelTicksX(wheelTicksX)
110             , m_wheelTicksY(wheelTicksY)
111             , m_granularity(granularity)
112             , m_directionInvertedFromDevice(false)
113 #if PLATFORM(MAC) || PLATFORM(CHROMIUM)
114             , m_hasPreciseScrollingDeltas(false)
115 #endif
116 #if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
117            , m_phase(PlatformWheelEventPhaseNone)
118             , m_momentumPhase(PlatformWheelEventPhaseNone)
119             , m_scrollCount(0)
120             , m_unacceleratedScrollingDeltaX(0)
121             , m_unacceleratedScrollingDeltaY(0)
122 #endif
123         {
124         }
125
126         PlatformWheelEvent copyTurningVerticalTicksIntoHorizontalTicks() const
127         {
128             PlatformWheelEvent copy = *this;
129
130             copy.m_deltaX = copy.m_deltaY;
131             copy.m_deltaY = 0;
132             copy.m_wheelTicksX = copy.m_wheelTicksY;
133             copy.m_wheelTicksY = 0;
134
135             return copy;
136         }
137
138         const IntPoint& position() const { return m_position; } // PlatformWindow coordinates.
139         const IntPoint& globalPosition() const { return m_globalPosition; } // Screen coordinates.
140
141         float deltaX() const { return m_deltaX; }
142         float deltaY() const { return m_deltaY; }
143
144         float wheelTicksX() const { return m_wheelTicksX; }
145         float wheelTicksY() const { return m_wheelTicksY; }
146
147         PlatformWheelEventGranularity granularity() const { return m_granularity; }
148
149         bool directionInvertedFromDevice() const { return m_directionInvertedFromDevice; }
150
151 #if PLATFORM(GTK)
152         explicit PlatformWheelEvent(GdkEventScroll*);
153 #endif
154
155 #if PLATFORM(EFL)
156         explicit PlatformWheelEvent(const Evas_Event_Mouse_Wheel*);
157 #endif
158
159 #if PLATFORM(MAC) || PLATFORM(CHROMIUM)
160        bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; }
161 #endif
162 #if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
163         PlatformWheelEventPhase phase() const { return m_phase; }
164         PlatformWheelEventPhase momentumPhase() const { return m_momentumPhase; }
165         unsigned scrollCount() const { return m_scrollCount; }
166         float unacceleratedScrollingDeltaX() const { return m_unacceleratedScrollingDeltaX; }
167         float unacceleratedScrollingDeltaY() const { return m_unacceleratedScrollingDeltaY; }
168 #endif
169
170 #if PLATFORM(WIN)
171         PlatformWheelEvent(HWND, WPARAM, LPARAM, bool isMouseHWheel);
172         PlatformWheelEvent(HWND, const FloatSize& delta, const FloatPoint& location);
173 #endif
174
175 #if PLATFORM(WX)
176         PlatformWheelEvent(const wxMouseEvent&, const wxPoint&);
177 #endif
178
179 #if PLATFORM(HAIKU)
180         explicit PlatformWheelEvent(BMessage*);
181 #endif
182
183     protected:
184         IntPoint m_position;
185         IntPoint m_globalPosition;
186         float m_deltaX;
187         float m_deltaY;
188         float m_wheelTicksX;
189         float m_wheelTicksY;
190         PlatformWheelEventGranularity m_granularity;
191         bool m_directionInvertedFromDevice;
192 #if PLATFORM(MAC) || PLATFORM(CHROMIUM)
193         bool m_hasPreciseScrollingDeltas;
194 #endif
195 #if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
196          PlatformWheelEventPhase m_phase;
197         PlatformWheelEventPhase m_momentumPhase;
198         unsigned m_scrollCount;
199         float m_unacceleratedScrollingDeltaX;
200         float m_unacceleratedScrollingDeltaY;
201 #endif
202     };
203
204 } // namespace WebCore
205
206 #endif // PlatformWheelEvent_h