18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.  All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Collabora, Ltd.  All rights reserved.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef PlatformKeyboardEvent_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PlatformKeyboardEvent_h
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RetainPtr.h>
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef __OBJC__
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@class NSEvent;
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass NSEvent;
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN)
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct HWND__ *HWND;
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef unsigned WPARAM;
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef long LPARAM;
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(GTK)
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct _GdkEventKey GdkEventKey;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(QT)
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQT_BEGIN_NAMESPACE
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QKeyEvent;
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQT_END_NAMESPACE
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WX)
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass wxKeyEvent;
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
61231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if PLATFORM(HAIKU)
62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockclass BMessage;
63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if PLATFORM(EFL)
6606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsentypedef struct _Evas_Event_Key_Down Evas_Event_Key_Down;
6706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsentypedef struct _Evas_Event_Key_Up Evas_Event_Key_Up;
68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
70692e5dbf12901edacf14812a6fae25462920af42Steve Block#if PLATFORM(BREWMP)
71692e5dbf12901edacf14812a6fae25462920af42Steve Blocktypedef unsigned short    uint16;
72692e5dbf12901edacf14812a6fae25462920af42Steve Blocktypedef unsigned long int uint32;
73692e5dbf12901edacf14812a6fae25462920af42Steve Block#define AEEEvent uint16
74692e5dbf12901edacf14812a6fae25462920af42Steve Block#endif
75692e5dbf12901edacf14812a6fae25462920af42Steve Block
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
78ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    class PlatformKeyboardEvent {
79ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        WTF_MAKE_FAST_ALLOCATED;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        enum Type {
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // KeyDown is sent by platforms such as Mac OS X, gtk and Qt, and has information about both physical pressed key, and its translation.
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // For DOM processing, it needs to be disambiguated as RawKeyDown or Char event.
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            KeyDown,
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // KeyUp is sent by all platforms.
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            KeyUp,
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // These events are sent by platforms such as Windows and wxWidgets. RawKeyDown only has information about a physical key, and Char
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // only has information about a character it was translated into.
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            RawKeyDown,
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            Char
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        };
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        enum ModifierKey {
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            AltKey = 1 << 0,
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            CtrlKey = 1 << 1,
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            MetaKey = 1 << 2,
992bde8e466a4451c7319e3a072d118917957d6554Steve Block            ShiftKey = 1 << 3
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        };
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        PlatformKeyboardEvent()
103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            : m_type(KeyDown)
104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_autoRepeat(false)
105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_windowsVirtualKeyCode(0)
106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_nativeVirtualKeyCode(0)
107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_isKeypad(false)
108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_shiftKey(false)
109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_ctrlKey(false)
110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_altKey(false)
111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_metaKey(false)
112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if PLATFORM(WIN) || PLATFORM(CHROMIUM)
113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_isSystemKey(false)
114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if PLATFORM(GTK)
116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_gdkEventKey(0)
117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if PLATFORM(QT)
119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            , m_qtEvent(0)
120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        {
122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        }
123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        Type type() const { return m_type; }
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void disambiguateKeyDownEvent(Type, bool backwardCompatibilityMode = false); // Only used on platforms that need it, i.e. those that generate KeyDown events.
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Text as as generated by processing a virtual key code with a keyboard layout
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // (in most cases, just a character code, but the layout can emit several
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // characters in a single keypress event on some platforms).
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // This may bear no resemblance to the ultimately inserted text if an input method
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // processes the input.
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Will be null for KeyUp and RawKeyDown events.
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String text() const { return m_text; }
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Text that would have been generated by the keyboard if no modifiers were pressed
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // (except for Shift); useful for shortcut (accelerator) key handling.
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Otherwise, same as text().
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String unmodifiedText() const { return m_unmodifiedText; }
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Most compatible Windows virtual key code associated with the event.
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Zero for Char events.
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int windowsVirtualKeyCode() const { return m_windowsVirtualKeyCode; }
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void setWindowsVirtualKeyCode(int code) { m_windowsVirtualKeyCode = code; }
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int nativeVirtualKeyCode() const { return m_nativeVirtualKeyCode; }
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void setNativeVirtualKeyCode(int code) { m_nativeVirtualKeyCode = code; }
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String keyIdentifier() const { return m_keyIdentifier; }
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool isAutoRepeat() const { return m_autoRepeat; }
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void setIsAutoRepeat(bool in) { m_autoRepeat = in; }
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool isKeypad() const { return m_isKeypad; }
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool shiftKey() const { return m_shiftKey; }
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool ctrlKey() const { return m_ctrlKey; }
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool altKey() const { return m_altKey; }
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool metaKey() const { return m_metaKey; }
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        unsigned modifiers() const {
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return (altKey() ? AltKey : 0)
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                | (ctrlKey() ? CtrlKey : 0)
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                | (metaKey() ? MetaKey : 0)
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                | (shiftKey() ? ShiftKey : 0);
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static bool currentCapsLockState();
164dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        static void getCurrentModifierState(bool& shiftKey, bool& ctrlKey, bool& altKey, bool& metaKey);
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PlatformKeyboardEvent(NSEvent*);
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        NSEvent* macEvent() const { return m_macEvent.get(); }
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN)
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PlatformKeyboardEvent(HWND, WPARAM, LPARAM, Type, bool);
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(GTK)
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PlatformKeyboardEvent(GdkEventKey*);
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        GdkEventKey* gdkEventKey() const;
17881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
17981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        // Used by WebKit2
18081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        static String keyIdentifierForGdkKeyCode(unsigned);
18181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        static int windowsKeyCodeForGdkKeyCode(unsigned);
18281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        static String singleCharacterString(unsigned);
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(ANDROID)
186b98c772f6b9ef7a1eef75d3e678de67edfdde463Andrei Popescu        PlatformKeyboardEvent(int keyCode, UChar32 unichar, int repeatCount,
187b98c772f6b9ef7a1eef75d3e678de67edfdde463Andrei Popescu                    bool down, bool cap, bool alt, bool sym);
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        UChar32 unichar() const { return m_unichar; }
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int repeatCount() const { return m_repeatCount; }
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(QT)
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PlatformKeyboardEvent(QKeyEvent*);
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QKeyEvent* qtEvent() const { return m_qtEvent; }
195a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        uint32_t nativeModifiers() const;
196a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        uint32_t nativeScanCode() const;
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WX)
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PlatformKeyboardEvent(wxKeyEvent&);
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
203231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if PLATFORM(HAIKU)
204231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        PlatformKeyboardEvent(BMessage*);
205231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
206231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
207692e5dbf12901edacf14812a6fae25462920af42Steve Block#if PLATFORM(BREWMP)
208692e5dbf12901edacf14812a6fae25462920af42Steve Block        PlatformKeyboardEvent(AEEEvent, uint16, uint32, Type);
209692e5dbf12901edacf14812a6fae25462920af42Steve Block#endif
210692e5dbf12901edacf14812a6fae25462920af42Steve Block
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN) || PLATFORM(CHROMIUM)
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool isSystemKey() const { return m_isSystemKey; }
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if PLATFORM(EFL)
216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        PlatformKeyboardEvent(const Evas_Event_Key_Down*);
217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        PlatformKeyboardEvent(const Evas_Event_Key_Up*);
218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    protected:
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        Type m_type;
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String m_text;
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String m_unmodifiedText;
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String m_keyIdentifier;
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_autoRepeat;
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_windowsVirtualKeyCode;
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_nativeVirtualKeyCode;
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_isKeypad;
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_shiftKey;
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_ctrlKey;
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_altKey;
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_metaKey;
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(ANDROID)
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /*  the actual repeatCount (as opposed to just a bool m_autoRepeat)
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            0 for initial down and up
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         */
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int     m_repeatCount;
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /*  The originall unichar value. Sometimes the m_text/m_unmodifiedText
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            fields are stripped (e.g. for RawKeyDown), so we record it also here
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            in case someone (e.g. plugins) want to sniff it w/o waiting for a
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            Char event type.
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         */
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        UChar32 m_unichar;
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        RetainPtr<NSEvent> m_macEvent;
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN) || PLATFORM(CHROMIUM)
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_isSystemKey;
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(GTK)
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        GdkEventKey* m_gdkEventKey;
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(QT)
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QKeyEvent* m_qtEvent;
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
260e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
261e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#if PLATFORM(QT)
262e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke// Used by WebKit2.
263e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeString keyIdentifierForQtKeyCode(int keyCode);
264e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeint windowsKeyCodeForKeyEvent(unsigned int keycode, bool isKeypad = false);
265e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#endif
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // PlatformKeyboardEvent_h
270