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/events/EventDispatchMediator.h" 28 #include "core/events/UIEventWithKeyState.h" 29 30 namespace blink { 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 bool repeat; 46 }; 47 48 class KeyboardEvent FINAL : public UIEventWithKeyState { 49 DEFINE_WRAPPERTYPEINFO(); 50 public: 51 enum KeyLocationCode { 52 DOM_KEY_LOCATION_STANDARD = 0x00, 53 DOM_KEY_LOCATION_LEFT = 0x01, 54 DOM_KEY_LOCATION_RIGHT = 0x02, 55 DOM_KEY_LOCATION_NUMPAD = 0x03 56 }; 57 58 static PassRefPtrWillBeRawPtr<KeyboardEvent> create() 59 { 60 return adoptRefWillBeNoop(new KeyboardEvent); 61 } 62 63 static PassRefPtrWillBeRawPtr<KeyboardEvent> create(const PlatformKeyboardEvent& platformEvent, AbstractView* view) 64 { 65 return adoptRefWillBeNoop(new KeyboardEvent(platformEvent, view)); 66 } 67 68 static PassRefPtrWillBeRawPtr<KeyboardEvent> create(const AtomicString& type, const KeyboardEventInit& initializer) 69 { 70 return adoptRefWillBeNoop(new KeyboardEvent(type, initializer)); 71 } 72 73 static PassRefPtrWillBeRawPtr<KeyboardEvent> create(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view, 74 const String& keyIdentifier, unsigned location, 75 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) 76 { 77 return adoptRefWillBeNoop(new KeyboardEvent(type, canBubble, cancelable, view, keyIdentifier, location, 78 ctrlKey, altKey, shiftKey, metaKey)); 79 } 80 81 virtual ~KeyboardEvent(); 82 83 void initKeyboardEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*, 84 const String& keyIdentifier, unsigned location, 85 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey); 86 87 const String& keyIdentifier() const { return m_keyIdentifier; } 88 unsigned location() const { return m_location; } 89 90 bool getModifierState(const String& keyIdentifier) const; 91 92 const PlatformKeyboardEvent* keyEvent() const { return m_keyEvent.get(); } 93 94 virtual int keyCode() const OVERRIDE; // key code for keydown and keyup, character for keypress 95 virtual int charCode() const OVERRIDE; // character code for keypress, 0 for keydown and keyup 96 bool repeat() const { return m_isAutoRepeat; } 97 98 virtual const AtomicString& interfaceName() const OVERRIDE; 99 virtual bool isKeyboardEvent() const OVERRIDE; 100 virtual int which() const OVERRIDE; 101 102 virtual void trace(Visitor*) OVERRIDE; 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); 111 112 OwnPtr<PlatformKeyboardEvent> m_keyEvent; 113 String m_keyIdentifier; 114 unsigned m_location; 115 bool m_isAutoRepeat : 1; 116 }; 117 118 class KeyboardEventDispatchMediator : public EventDispatchMediator { 119 public: 120 static PassRefPtrWillBeRawPtr<KeyboardEventDispatchMediator> create(PassRefPtrWillBeRawPtr<KeyboardEvent>); 121 private: 122 explicit KeyboardEventDispatchMediator(PassRefPtrWillBeRawPtr<KeyboardEvent>); 123 virtual bool dispatchEvent(EventDispatcher*) const OVERRIDE; 124 }; 125 126 DEFINE_EVENT_TYPE_CASTS(KeyboardEvent); 127 128 } // namespace blink 129 130 #endif // KeyboardEvent_h 131