initial import
[vuplus_webkit] / Source / WebKit2 / Shared / WebEventConversion.cpp
1 /*
2  * Copyright (C) 2010 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 #include "config.h"
27 #include "WebEventConversion.h"
28
29 #include "WebEvent.h"
30
31 namespace WebKit {
32
33 class WebKit2PlatformMouseEvent : public WebCore::PlatformMouseEvent {
34 public:
35     WebKit2PlatformMouseEvent(const WebMouseEvent& webEvent)
36     {
37         switch (webEvent.type()) {
38         case WebEvent::MouseDown:
39             m_eventType = WebCore::MouseEventPressed;
40             break;
41         case WebEvent::MouseUp:
42             m_eventType = WebCore::MouseEventReleased;
43             break;
44         case WebEvent::MouseMove:
45             m_eventType = WebCore::MouseEventMoved;
46             break;
47         default:
48             ASSERT_NOT_REACHED();
49         }
50
51         switch (webEvent.button()) {
52         case WebMouseEvent::NoButton:
53             m_button = WebCore::NoButton;
54             break;
55         case WebMouseEvent::LeftButton:
56             m_button = WebCore::LeftButton;
57             break;
58         case WebMouseEvent::MiddleButton:
59             m_button = WebCore::MiddleButton;
60             break;
61         case WebMouseEvent::RightButton:
62             m_button = WebCore::RightButton;
63             break;
64         default:
65             ASSERT_NOT_REACHED();
66         }
67
68         m_position = webEvent.position();
69         m_globalPosition = webEvent.globalPosition();
70         m_clickCount = webEvent.clickCount();
71         m_timestamp = webEvent.timestamp();
72         m_shiftKey = webEvent.shiftKey();
73         m_ctrlKey = webEvent.controlKey();
74         m_altKey = webEvent.altKey();
75         m_metaKey = webEvent.metaKey();
76
77         m_modifierFlags = 0;
78         if (m_shiftKey)
79             m_modifierFlags |= WebEvent::ShiftKey;
80         if (m_ctrlKey)
81             m_modifierFlags |= WebEvent::ControlKey;
82         if (m_altKey)
83             m_modifierFlags |= WebEvent::AltKey;
84         if (m_metaKey)
85             m_modifierFlags |= WebEvent::MetaKey;
86
87 #if PLATFORM(WIN)
88         m_didActivateWebView = webEvent.didActivateWebView();
89 #endif
90     }
91 };
92
93 WebCore::PlatformMouseEvent platform(const WebMouseEvent& webEvent)
94 {
95     return WebKit2PlatformMouseEvent(webEvent);
96 }
97
98 class WebKit2PlatformWheelEvent : public WebCore::PlatformWheelEvent {
99 public:
100     WebKit2PlatformWheelEvent(const WebWheelEvent& webEvent)
101     {
102         m_position = webEvent.position();
103         m_globalPosition = webEvent.globalPosition();
104         m_deltaX = webEvent.delta().width();
105         m_deltaY = webEvent.delta().height();
106         m_wheelTicksX = webEvent.wheelTicks().width();
107         m_wheelTicksY = webEvent.wheelTicks().height();
108         m_granularity = (webEvent.granularity() == WebWheelEvent::ScrollByPageWheelEvent) ? WebCore::ScrollByPageWheelEvent : WebCore::ScrollByPixelWheelEvent;
109         m_shiftKey = webEvent.shiftKey();
110         m_ctrlKey = webEvent.controlKey();
111         m_altKey = webEvent.altKey();
112         m_metaKey = webEvent.metaKey();
113 #if PLATFORM(MAC)
114         m_phase = static_cast<WebCore::PlatformWheelEventPhase>(webEvent.phase());
115         m_momentumPhase = static_cast<WebCore::PlatformWheelEventPhase>(webEvent.momentumPhase());
116         m_hasPreciseScrollingDeltas = webEvent.hasPreciseScrollingDeltas();
117         m_timestamp = webEvent.timestamp();
118 #endif
119     }
120 };
121
122 WebCore::PlatformWheelEvent platform(const WebWheelEvent& webEvent)
123 {
124     return WebKit2PlatformWheelEvent(webEvent);
125 }
126
127 class WebKit2PlatformKeyboardEvent : public WebCore::PlatformKeyboardEvent {
128 public:
129     WebKit2PlatformKeyboardEvent(const WebKeyboardEvent& webEvent)
130     {
131         switch (webEvent.type()) {
132         case WebEvent::KeyDown:
133             m_type = PlatformKeyboardEvent::KeyDown;
134             break;
135         case WebEvent::KeyUp:
136             m_type = PlatformKeyboardEvent::KeyUp;
137             break;
138         case WebEvent::RawKeyDown:
139             m_type = PlatformKeyboardEvent::RawKeyDown;
140             break;
141         case WebEvent::Char:
142             m_type = PlatformKeyboardEvent::Char;
143             break;
144         default:
145             ASSERT_NOT_REACHED();
146         }
147         m_text = webEvent.text();
148         m_unmodifiedText = webEvent.unmodifiedText();
149         m_keyIdentifier = webEvent.keyIdentifier();
150         m_windowsVirtualKeyCode = webEvent.windowsVirtualKeyCode();
151         m_nativeVirtualKeyCode = webEvent.nativeVirtualKeyCode();
152         m_autoRepeat = webEvent.isAutoRepeat();
153         m_isKeypad = webEvent.isKeypad();
154         m_shiftKey = webEvent.shiftKey();
155         m_ctrlKey = webEvent.controlKey();
156         m_altKey = webEvent.altKey();
157         m_metaKey = webEvent.metaKey();
158         
159 #if PLATFORM(WIN)
160         // FIXME: We should make m_isSystemKey available (and false) on all platforms
161         // to avoid this #define. 
162         m_isSystemKey = webEvent.isSystemKey();
163 #endif
164     }
165 };
166
167 WebCore::PlatformKeyboardEvent platform(const WebKeyboardEvent& webEvent)
168 {
169     return WebKit2PlatformKeyboardEvent(webEvent);
170 }
171
172 #if ENABLE(GESTURE_EVENTS)
173 class WebKit2PlatformGestureEvent : public WebCore::PlatformGestureEvent {
174 public:
175     WebKit2PlatformGestureEvent(const WebGestureEvent& webEvent)
176     {
177         switch (webEvent.type()) {
178         case WebEvent::GestureScrollBegin:
179             m_type = PlatformGestureEvent::ScrollBeginType;
180             break;
181         case WebEvent::GestureScrollEnd:
182             m_type = PlatformGestureEvent::ScrollEndType;
183             break;
184         default:
185             ASSERT_NOT_REACHED();
186         }
187
188         m_position = webEvent.position();
189         m_globalPosition = webEvent.globalPosition();
190         m_timestamp = webEvent.timestamp();
191     }
192 };
193
194 WebCore::PlatformGestureEvent platform(const WebGestureEvent& webEvent)
195 {
196     return WebKit2PlatformGestureEvent(webEvent);
197 }
198 #endif
199
200 #if ENABLE(TOUCH_EVENTS)
201 class WebKit2PlatformTouchPoint : public WebCore::PlatformTouchPoint {
202 public:
203     WebKit2PlatformTouchPoint(const WebPlatformTouchPoint& webTouchPoint)
204     {
205         m_id = webTouchPoint.id();
206
207         switch (webTouchPoint.state()) {
208         case WebPlatformTouchPoint::TouchReleased:
209             m_state = PlatformTouchPoint::TouchReleased;
210             break;
211         case WebPlatformTouchPoint::TouchPressed:
212             m_state = PlatformTouchPoint::TouchPressed;
213             break;
214         case WebPlatformTouchPoint::TouchMoved:
215             m_state = PlatformTouchPoint::TouchMoved;
216             break;
217         case WebPlatformTouchPoint::TouchStationary:
218             m_state = PlatformTouchPoint::TouchStationary;
219             break;
220         case WebPlatformTouchPoint::TouchCancelled:
221             m_state = PlatformTouchPoint::TouchCancelled;
222             break;
223         default:
224             ASSERT_NOT_REACHED();
225         }
226
227         m_screenPos = webTouchPoint.screenPosition();
228         m_pos = webTouchPoint.position();
229     }
230 };
231
232 class WebKit2PlatformTouchEvent : public WebCore::PlatformTouchEvent {
233 public:
234     WebKit2PlatformTouchEvent(const WebTouchEvent& webEvent)
235     {
236         switch (webEvent.type()) {
237         case WebEvent::TouchStart: 
238             m_type = WebCore::TouchStart; 
239             break;
240         case WebEvent::TouchMove: 
241             m_type = WebCore::TouchMove; 
242             break;
243         case WebEvent::TouchEnd: 
244             m_type = WebCore::TouchEnd; 
245             break;
246         case WebEvent::TouchCancel:
247             m_type = WebCore::TouchCancel;
248             break;
249         default:
250             ASSERT_NOT_REACHED();
251         }
252
253         for (int i = 0; i < webEvent.touchPoints().size(); ++i)
254             m_touchPoints.append(WebKit2PlatformTouchPoint(webEvent.touchPoints().at(i)));
255
256         m_ctrlKey = webEvent.controlKey();
257         m_altKey = webEvent.altKey();
258         m_shiftKey = webEvent.shiftKey();
259         m_metaKey = webEvent.metaKey();
260     }
261 };
262
263 WebCore::PlatformTouchEvent platform(const WebTouchEvent& webEvent)
264 {
265     return WebKit2PlatformTouchEvent(webEvent);
266 }
267 #endif
268
269 } // namespace WebKit