| /* |
| * Copyright (C) 2010, 2011 Apple Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| * THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #ifndef WebEvent_h |
| #define WebEvent_h |
| |
| // FIXME: We should probably move to makeing the WebCore/PlatformFooEvents trivial classes so that |
| // we can use them as the event type. |
| |
| #include <WebCore/FloatSize.h> |
| #include <WebCore/IntPoint.h> |
| #include <wtf/text/WTFString.h> |
| |
| namespace CoreIPC { |
| class ArgumentDecoder; |
| class ArgumentEncoder; |
| } |
| |
| namespace WebKit { |
| |
| class WebEvent { |
| public: |
| enum Type { |
| NoType = -1, |
| |
| // WebMouseEvent |
| MouseDown, |
| MouseUp, |
| MouseMove, |
| |
| // WebWheelEvent |
| Wheel, |
| |
| // WebKeyboardEvent |
| KeyDown, |
| KeyUp, |
| RawKeyDown, |
| Char, |
| |
| #if ENABLE(GESTURE_EVENTS) |
| // WebGestureEvent |
| GestureScrollBegin, |
| GestureScrollEnd, |
| #endif |
| |
| #if ENABLE(TOUCH_EVENTS) |
| // WebTouchEvent |
| TouchStart, |
| TouchMove, |
| TouchEnd, |
| TouchCancel, |
| #endif |
| }; |
| |
| enum Modifiers { |
| ShiftKey = 1 << 0, |
| ControlKey = 1 << 1, |
| AltKey = 1 << 2, |
| MetaKey = 1 << 3, |
| CapsLockKey = 1 << 4, |
| }; |
| |
| Type type() const { return static_cast<Type>(m_type); } |
| |
| bool shiftKey() const { return m_modifiers & ShiftKey; } |
| bool controlKey() const { return m_modifiers & ControlKey; } |
| bool altKey() const { return m_modifiers & AltKey; } |
| bool metaKey() const { return m_modifiers & MetaKey; } |
| bool capsLockKey() const { return m_modifiers & CapsLockKey; } |
| |
| Modifiers modifiers() const { return static_cast<Modifiers>(m_modifiers); } |
| |
| double timestamp() const { return m_timestamp; } |
| |
| protected: |
| WebEvent(); |
| |
| WebEvent(Type, Modifiers, double timestamp); |
| |
| void encode(CoreIPC::ArgumentEncoder*) const; |
| static bool decode(CoreIPC::ArgumentDecoder*, WebEvent&); |
| |
| private: |
| uint32_t m_type; // Type |
| uint32_t m_modifiers; // Modifiers |
| double m_timestamp; |
| }; |
| |
| // FIXME: Move this class to its own header file. |
| class WebMouseEvent : public WebEvent { |
| public: |
| enum Button { |
| NoButton = -1, |
| LeftButton, |
| MiddleButton, |
| RightButton |
| }; |
| |
| WebMouseEvent(); |
| |
| WebMouseEvent(Type, Button, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, float deltaX, float deltaY, float deltaZ, int clickCount, Modifiers, double timestamp); |
| #if PLATFORM(WIN) |
| WebMouseEvent(Type, Button, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, float deltaX, float deltaY, float deltaZ, int clickCount, Modifiers, double timestamp, bool didActivateWebView); |
| #endif |
| |
| Button button() const { return static_cast<Button>(m_button); } |
| const WebCore::IntPoint& position() const { return m_position; } |
| const WebCore::IntPoint& globalPosition() const { return m_globalPosition; } |
| float deltaX() const { return m_deltaX; } |
| float deltaY() const { return m_deltaY; } |
| float deltaZ() const { return m_deltaZ; } |
| int32_t clickCount() const { return m_clickCount; } |
| #if PLATFORM(WIN) |
| bool didActivateWebView() const { return m_didActivateWebView; } |
| #endif |
| |
| void encode(CoreIPC::ArgumentEncoder*) const; |
| static bool decode(CoreIPC::ArgumentDecoder*, WebMouseEvent&); |
| |
| private: |
| static bool isMouseEventType(Type); |
| |
| uint32_t m_button; |
| WebCore::IntPoint m_position; |
| WebCore::IntPoint m_globalPosition; |
| float m_deltaX; |
| float m_deltaY; |
| float m_deltaZ; |
| int32_t m_clickCount; |
| #if PLATFORM(WIN) |
| bool m_didActivateWebView; |
| #endif |
| }; |
| |
| // FIXME: Move this class to its own header file. |
| class WebWheelEvent : public WebEvent { |
| public: |
| enum Granularity { |
| ScrollByPageWheelEvent, |
| ScrollByPixelWheelEvent |
| }; |
| |
| #if PLATFORM(MAC) |
| enum Phase { |
| PhaseNone = 0, |
| PhaseBegan = 1 << 1, |
| PhaseStationary = 1 << 2, |
| PhaseChanged = 1 << 3, |
| PhaseEnded = 1 << 4, |
| PhaseCancelled = 1 << 5, |
| }; |
| #endif |
| |
| WebWheelEvent() { } |
| |
| WebWheelEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, Granularity, Modifiers, double timestamp); |
| #if PLATFORM(MAC) |
| WebWheelEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, Granularity, Phase phase, Phase momentumPhase,bool hasPreciseScrollingDeltas, Modifiers, double timestamp); |
| #endif |
| |
| const WebCore::IntPoint position() const { return m_position; } |
| const WebCore::IntPoint globalPosition() const { return m_globalPosition; } |
| const WebCore::FloatSize delta() const { return m_delta; } |
| const WebCore::FloatSize wheelTicks() const { return m_wheelTicks; } |
| Granularity granularity() const { return static_cast<Granularity>(m_granularity); } |
| #if PLATFORM(MAC) |
| Phase phase() const { return static_cast<Phase>(m_phase); } |
| Phase momentumPhase() const { return static_cast<Phase>(m_momentumPhase); } |
| bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; } |
| #endif |
| |
| void encode(CoreIPC::ArgumentEncoder*) const; |
| static bool decode(CoreIPC::ArgumentDecoder*, WebWheelEvent&); |
| |
| private: |
| static bool isWheelEventType(Type); |
| |
| WebCore::IntPoint m_position; |
| WebCore::IntPoint m_globalPosition; |
| WebCore::FloatSize m_delta; |
| WebCore::FloatSize m_wheelTicks; |
| uint32_t m_granularity; // Granularity |
| #if PLATFORM(MAC) |
| uint32_t m_phase; // Phase |
| uint32_t m_momentumPhase; // Phase |
| bool m_hasPreciseScrollingDeltas; |
| #endif |
| }; |
| |
| // FIXME: Move this class to its own header file. |
| class WebKeyboardEvent : public WebEvent { |
| public: |
| WebKeyboardEvent() { } |
| |
| WebKeyboardEvent(Type, const String& text, const String& unmodifiedText, const String& keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, int macCharCode, bool isAutoRepeat, bool isKeypad, bool isSystemKey, Modifiers, double timestamp); |
| |
| const String& text() const { return m_text; } |
| const String& unmodifiedText() const { return m_unmodifiedText; } |
| const String& keyIdentifier() const { return m_keyIdentifier; } |
| int32_t windowsVirtualKeyCode() const { return m_windowsVirtualKeyCode; } |
| int32_t nativeVirtualKeyCode() const { return m_nativeVirtualKeyCode; } |
| int32_t macCharCode() const { return m_macCharCode; } |
| bool isAutoRepeat() const { return m_isAutoRepeat; } |
| bool isKeypad() const { return m_isKeypad; } |
| bool isSystemKey() const { return m_isSystemKey; } |
| |
| void encode(CoreIPC::ArgumentEncoder*) const; |
| static bool decode(CoreIPC::ArgumentDecoder*, WebKeyboardEvent&); |
| |
| static bool isKeyboardEventType(Type); |
| |
| private: |
| String m_text; |
| String m_unmodifiedText; |
| String m_keyIdentifier; |
| int32_t m_windowsVirtualKeyCode; |
| int32_t m_nativeVirtualKeyCode; |
| int32_t m_macCharCode; |
| bool m_isAutoRepeat; |
| bool m_isKeypad; |
| bool m_isSystemKey; |
| }; |
| |
| |
| #if ENABLE(GESTURE_EVENTS) |
| // FIXME: Move this class to its own header file. |
| class WebGestureEvent : public WebEvent { |
| public: |
| WebGestureEvent() { } |
| WebGestureEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, Modifiers, double timestamp); |
| |
| const WebCore::IntPoint position() const { return m_position; } |
| const WebCore::IntPoint globalPosition() const { return m_globalPosition; } |
| |
| void encode(CoreIPC::ArgumentEncoder*) const; |
| static bool decode(CoreIPC::ArgumentDecoder*, WebGestureEvent&); |
| |
| private: |
| static bool isGestureEventType(Type); |
| |
| WebCore::IntPoint m_position; |
| WebCore::IntPoint m_globalPosition; |
| }; |
| #endif // ENABLE(GESTURE_EVENTS) |
| |
| |
| #if ENABLE(TOUCH_EVENTS) |
| // FIXME: Move this class to its own header file. |
| // FIXME: Having "Platform" in the name makes it sound like this event is platform-specific or low- |
| // level in some way. That doesn't seem to be the case. |
| class WebPlatformTouchPoint { |
| public: |
| enum TouchPointState { |
| TouchReleased, |
| TouchPressed, |
| TouchMoved, |
| TouchStationary, |
| TouchCancelled |
| }; |
| |
| WebPlatformTouchPoint() { } |
| |
| WebPlatformTouchPoint(uint32_t id, TouchPointState, const WebCore::IntPoint& screenPosition, const WebCore::IntPoint& position); |
| |
| uint32_t id() const { return m_id; } |
| TouchPointState state() const { return static_cast<TouchPointState>(m_state); } |
| |
| const WebCore::IntPoint& screenPosition() const { return m_screenPosition; } |
| const WebCore::IntPoint& position() const { return m_position; } |
| |
| void setState(TouchPointState state) { m_state = state; } |
| |
| void encode(CoreIPC::ArgumentEncoder*) const; |
| static bool decode(CoreIPC::ArgumentDecoder*, WebPlatformTouchPoint&); |
| |
| private: |
| uint32_t m_id; |
| uint32_t m_state; |
| WebCore::IntPoint m_screenPosition; |
| WebCore::IntPoint m_position; |
| |
| }; |
| |
| // FIXME: Move this class to its own header file. |
| class WebTouchEvent : public WebEvent { |
| public: |
| WebTouchEvent() { } |
| |
| // FIXME: It would be nice not to have to copy the Vector here. |
| WebTouchEvent(Type, Vector<WebPlatformTouchPoint>, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, Modifiers, double timestamp); |
| |
| const Vector<WebPlatformTouchPoint>& touchPoints() const { return m_touchPoints; } |
| |
| void encode(CoreIPC::ArgumentEncoder*) const; |
| static bool decode(CoreIPC::ArgumentDecoder*, WebTouchEvent&); |
| |
| private: |
| static bool isTouchEventType(Type); |
| |
| Vector<WebPlatformTouchPoint> m_touchPoints; |
| bool m_ctrlKey; |
| bool m_altKey; |
| bool m_shiftKey; |
| bool m_metaKey; |
| }; |
| |
| #endif // ENABLE(TOUCH_EVENTS) |
| |
| } // namespace WebKit |
| |
| #endif // WebEvent_h |