Home | History | Annotate | Download | only in events
      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