summaryrefslogtreecommitdiffstats
path: root/Source/WebKit2/Shared/WebEvent.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/Shared/WebEvent.h')
-rw-r--r--Source/WebKit2/Shared/WebEvent.h296
1 files changed, 296 insertions, 0 deletions
diff --git a/Source/WebKit2/Shared/WebEvent.h b/Source/WebKit2/Shared/WebEvent.h
new file mode 100644
index 0000000..f048d6e
--- /dev/null
+++ b/Source/WebKit2/Shared/WebEvent.h
@@ -0,0 +1,296 @@
+/*
+ * Copyright (C) 2010 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 {
+ // WebMouseEvent
+ MouseDown,
+ MouseUp,
+ MouseMove,
+
+ // WebWheelEvent
+ Wheel,
+
+ // WebKeyboardEvent
+ KeyDown,
+ KeyUp,
+ RawKeyDown,
+ Char
+#if ENABLE(TOUCH_EVENTS)
+ ,
+ TouchStart,
+ TouchMove,
+ TouchEnd,
+ TouchCancel
+#endif
+ };
+
+ enum Modifiers {
+ ShiftKey = 1 << 0,
+ ControlKey = 1 << 1,
+ AltKey = 1 << 2,
+ MetaKey = 1 << 3,
+ };
+
+ 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; }
+
+ 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, 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); }
+#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
+#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(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