Home | History | Annotate | Download | only in Shared
      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
    270