1/* 2 * Copyright (C) 2011 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#ifndef PlatformEvent_h 27#define PlatformEvent_h 28 29namespace WebCore { 30 31class PlatformEvent { 32public: 33 enum Type { 34 NoType = 0, 35 36 // PlatformKeyboardEvent 37 KeyDown, 38 KeyUp, 39 RawKeyDown, 40 Char, 41 42 // PlatformMouseEvent 43 MouseMoved, 44 MousePressed, 45 MouseReleased, 46 MouseScroll, 47 48 // PlatformWheelEvent 49 Wheel, 50 51 // PlatformGestureEvent 52 GestureScrollBegin, 53 GestureScrollEnd, 54 GestureScrollUpdate, 55 GestureScrollUpdateWithoutPropagation, 56 GestureTap, 57 GestureTapDown, 58 GestureTapDownCancel, 59 GestureTwoFingerTap, 60 GestureLongPress, 61 GestureLongTap, 62 GesturePinchBegin, 63 GesturePinchEnd, 64 GesturePinchUpdate, 65 66#if ENABLE(TOUCH_EVENTS) 67 // PlatformTouchEvent 68 TouchStart, 69 TouchMove, 70 TouchEnd, 71 TouchCancel, 72#endif 73 }; 74 75 enum Modifiers { 76 AltKey = 1 << 0, 77 CtrlKey = 1 << 1, 78 MetaKey = 1 << 2, 79 ShiftKey = 1 << 3, 80 }; 81 82 Type type() const { return static_cast<Type>(m_type); } 83 84 bool shiftKey() const { return m_modifiers & ShiftKey; } 85 bool ctrlKey() const { return m_modifiers & CtrlKey; } 86 bool altKey() const { return m_modifiers & AltKey; } 87 bool metaKey() const { return m_modifiers & MetaKey; } 88 89 unsigned modifiers() const { return m_modifiers; } 90 91 double timestamp() const { return m_timestamp; } 92 93protected: 94 PlatformEvent() 95 : m_type(NoType) 96 , m_modifiers(0) 97 , m_timestamp(0) 98 { 99 } 100 101 explicit PlatformEvent(Type type) 102 : m_type(type) 103 , m_modifiers(0) 104 , m_timestamp(0) 105 { 106 } 107 108 PlatformEvent(Type type, Modifiers modifiers, double timestamp) 109 : m_type(type) 110 , m_modifiers(modifiers) 111 , m_timestamp(timestamp) 112 { 113 } 114 115 PlatformEvent(Type type, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey, double timestamp) 116 : m_type(type) 117 , m_modifiers(0) 118 , m_timestamp(timestamp) 119 { 120 if (shiftKey) 121 m_modifiers |= ShiftKey; 122 if (ctrlKey) 123 m_modifiers |= CtrlKey; 124 if (altKey) 125 m_modifiers |= AltKey; 126 if (metaKey) 127 m_modifiers |= MetaKey; 128 } 129 130 // Explicit protected destructor so that people don't accidentally 131 // delete a PlatformEvent. 132 ~PlatformEvent() 133 { 134 } 135 136 unsigned m_type; 137 unsigned m_modifiers; 138 double m_timestamp; 139}; 140 141} // namespace WebCore 142 143#endif // PlatformEvent_h 144