1 /* 2 * Copyright (C) 2001 Peter Kelly (pmk (at) post.com) 3 * Copyright (C) 2001 Tobias Anton (anton (at) stud.fbi.fh-darmstadt.de) 4 * Copyright (C) 2006 Samuel Weinig (sam.weinig (at) gmail.com) 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Library General Public 9 * License as published by the Free Software Foundation; either 10 * version 2 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Library General Public License for more details. 16 * 17 * You should have received a copy of the GNU Library General Public License 18 * along with this library; see the file COPYING.LIB. If not, write to 19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20 * Boston, MA 02110-1301, USA. 21 * 22 */ 23 24 #ifndef KeyboardEvent_h 25 #define KeyboardEvent_h 26 27 #include "core/dom/EventDispatchMediator.h" 28 #include "core/dom/UIEventWithKeyState.h" 29 30 namespace WebCore { 31 32 class EventDispatcher; 33 class Node; 34 class PlatformKeyboardEvent; 35 36 struct KeyboardEventInit : public UIEventInit { 37 KeyboardEventInit(); 38 39 String keyIdentifier; 40 unsigned location; 41 bool ctrlKey; 42 bool altKey; 43 bool shiftKey; 44 bool metaKey; 45 }; 46 47 class KeyboardEvent : public UIEventWithKeyState { 48 public: 49 enum KeyLocationCode { 50 DOM_KEY_LOCATION_STANDARD = 0x00, 51 DOM_KEY_LOCATION_LEFT = 0x01, 52 DOM_KEY_LOCATION_RIGHT = 0x02, 53 DOM_KEY_LOCATION_NUMPAD = 0x03 54 // FIXME: The following values are not supported yet (crbug.com/265446) 55 // DOM_KEY_LOCATION_MOBILE = 0x04, 56 // DOM_KEY_LOCATION_JOYSTICK = 0x05 57 }; 58 59 static PassRefPtr<KeyboardEvent> create() 60 { 61 return adoptRef(new KeyboardEvent); 62 } 63 64 static PassRefPtr<KeyboardEvent> create(const PlatformKeyboardEvent& platformEvent, AbstractView* view) 65 { 66 return adoptRef(new KeyboardEvent(platformEvent, view)); 67 } 68 69 static PassRefPtr<KeyboardEvent> create(const AtomicString& type, const KeyboardEventInit& initializer) 70 { 71 return adoptRef(new KeyboardEvent(type, initializer)); 72 } 73 74 static PassRefPtr<KeyboardEvent> create(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view, 75 const String& keyIdentifier, unsigned location, 76 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) 77 { 78 return adoptRef(new KeyboardEvent(type, canBubble, cancelable, view, keyIdentifier, location, 79 ctrlKey, altKey, shiftKey, metaKey, altGraphKey)); 80 } 81 82 virtual ~KeyboardEvent(); 83 84 void initKeyboardEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*, 85 const String& keyIdentifier, unsigned location, 86 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey = false); 87 88 const String& keyIdentifier() const { return m_keyIdentifier; } 89 unsigned location() const { return m_location; } 90 91 bool getModifierState(const String& keyIdentifier) const; 92 93 bool altGraphKey() const { return m_altGraphKey; } 94 95 const PlatformKeyboardEvent* keyEvent() const { return m_keyEvent.get(); } 96 97 int keyCode() const; // key code for keydown and keyup, character for keypress 98 int charCode() const; // character code for keypress, 0 for keydown and keyup 99 100 virtual const AtomicString& interfaceName() const; 101 virtual bool isKeyboardEvent() const; 102 virtual int which() const; 103 104 private: 105 KeyboardEvent(); 106 KeyboardEvent(const PlatformKeyboardEvent&, AbstractView*); 107 KeyboardEvent(const AtomicString&, const KeyboardEventInit&); 108 KeyboardEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*, 109 const String& keyIdentifier, unsigned location, 110 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey); 111 112 OwnPtr<PlatformKeyboardEvent> m_keyEvent; 113 String m_keyIdentifier; 114 unsigned m_location; 115 bool m_altGraphKey : 1; 116 }; 117 118 KeyboardEvent* findKeyboardEvent(Event*); 119 120 class KeyboardEventDispatchMediator : public EventDispatchMediator { 121 public: 122 static PassRefPtr<KeyboardEventDispatchMediator> create(PassRefPtr<KeyboardEvent>); 123 private: 124 explicit KeyboardEventDispatchMediator(PassRefPtr<KeyboardEvent>); 125 virtual bool dispatchEvent(EventDispatcher*) const OVERRIDE; 126 }; 127 128 inline KeyboardEvent* toKeyboardEvent(Event* event) 129 { 130 ASSERT_WITH_SECURITY_IMPLICATION(!event || event->isKeyboardEvent()); 131 return static_cast<KeyboardEvent*>(event); 132 } 133 134 } // namespace WebCore 135 136 #endif // KeyboardEvent_h 137