include/cinder/app/KeyEvent.h
Go to the documentation of this file.
00001 /*
00002  Copyright (c) 2012, The Cinder Project, All rights reserved.
00003 
00004  This code is intended for use with the Cinder C++ library: http://libcinder.org
00005 
00006  Redistribution and use in source and binary forms, with or without modification, are permitted provided that
00007  the following conditions are met:
00008 
00009     * Redistributions of source code must retain the above copyright notice, this list of conditions and
00010     the following disclaimer.
00011     * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
00012     the following disclaimer in the documentation and/or other materials provided with the distribution.
00013 
00014  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
00015  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00016  PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
00017  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
00018  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00019  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00020  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00021  POSSIBILITY OF SUCH DAMAGE.
00022 */
00023 
00024 #pragma once
00025 
00026 #include "cinder/Cinder.h"
00027 #include "cinder/app/Event.h"
00028 
00029 namespace cinder{ namespace app{
00030 
00032 class KeyEvent : public Event {
00033   public:
00034     KeyEvent() : Event()
00035     {}
00036     KeyEvent( WindowRef win, int aCode, uint32_t aChar32, char aChar, unsigned int aModifiers, unsigned int aNativeKeyCode )
00037         : Event( win ), mCode( aCode ), mChar32( aChar32 ), mChar( aChar ), mModifiers( aModifiers ), mNativeKeyCode( aNativeKeyCode )
00038     {}
00039 
00041     char        getChar() const { return mChar; }
00043     uint32_t    getCharUtf32() const { return mChar32; } 
00044 #if ! defined( CINDER_COCOA_TOUCH )
00045 
00046     int         getCode() const { return mCode; }
00048     bool        isShiftDown() const { return (mModifiers & SHIFT_DOWN) ? true : false; }
00050     bool        isAltDown() const { return (mModifiers & ALT_DOWN) ? true : false; }
00052     bool        isControlDown() const { return (mModifiers & CTRL_DOWN) ? true : false; }
00054     bool        isMetaDown() const { return (mModifiers & META_DOWN) ? true : false; }  
00056     bool        isAccelDown() const { return (mModifiers & ACCEL_DOWN) ? true : false; }    
00058     int         getNativeKeyCode() const { return mNativeKeyCode; }
00059     
00061     static int      translateNativeKeyCode( int nativeKeyCode );
00062 
00063     enum {  SHIFT_DOWN  = 0x0008,
00064             ALT_DOWN    = 0x0010,
00065             CTRL_DOWN   = 0x0020,
00066             META_DOWN   = 0x0040,
00067 #if defined( CINDER_MSW )
00068             ACCEL_DOWN  = CTRL_DOWN
00069 #else
00070             ACCEL_DOWN  = META_DOWN
00071 #endif
00072             };
00073 #endif
00074     
00075     // Key codes
00076     enum {
00077         KEY_UNKNOWN     = 0,
00078         KEY_FIRST       = 0,
00079         KEY_BACKSPACE   = 8,
00080         KEY_TAB         = 9,
00081         KEY_CLEAR       = 12,
00082         KEY_RETURN      = 13,
00083         KEY_PAUSE       = 19,
00084         KEY_ESCAPE      = 27,
00085         KEY_SPACE       = 32,
00086         KEY_EXCLAIM     = 33,
00087         KEY_QUOTEDBL    = 34,
00088         KEY_HASH        = 35,
00089         KEY_DOLLAR      = 36,
00090         KEY_AMPERSAND   = 38,
00091         KEY_QUOTE       = 39,
00092         KEY_LEFTPAREN   = 40,
00093         KEY_RIGHTPAREN  = 41,
00094         KEY_ASTERISK    = 42,
00095         KEY_PLUS        = 43,
00096         KEY_COMMA       = 44,
00097         KEY_MINUS       = 45,
00098         KEY_PERIOD      = 46,
00099         KEY_SLASH       = 47,
00100         KEY_0           = 48,
00101         KEY_1           = 49,
00102         KEY_2           = 50,
00103         KEY_3           = 51,
00104         KEY_4           = 52,
00105         KEY_5           = 53,
00106         KEY_6           = 54,
00107         KEY_7           = 55,
00108         KEY_8           = 56,
00109         KEY_9           = 57,
00110         KEY_COLON       = 58,
00111         KEY_SEMICOLON   = 59,
00112         KEY_LESS        = 60,
00113         KEY_EQUALS      = 61,
00114         KEY_GREATER     = 62,
00115         KEY_QUESTION    = 63,
00116         KEY_AT          = 64,
00117 
00118         KEY_LEFTBRACKET = 91,
00119         KEY_BACKSLASH   = 92,
00120         KEY_RIGHTBRACKET= 93,
00121         KEY_CARET       = 94,
00122         KEY_UNDERSCORE  = 95,
00123         KEY_BACKQUOTE   = 96,
00124         KEY_a           = 97,
00125         KEY_b           = 98,
00126         KEY_c           = 99,
00127         KEY_d           = 100,
00128         KEY_e           = 101,
00129         KEY_f           = 102,
00130         KEY_g           = 103,
00131         KEY_h           = 104,
00132         KEY_i           = 105,
00133         KEY_j           = 106,
00134         KEY_k           = 107,
00135         KEY_l           = 108,
00136         KEY_m           = 109,
00137         KEY_n           = 110,
00138         KEY_o           = 111,
00139         KEY_p           = 112,
00140         KEY_q           = 113,
00141         KEY_r           = 114,
00142         KEY_s           = 115,
00143         KEY_t           = 116,
00144         KEY_u           = 117,
00145         KEY_v           = 118,
00146         KEY_w           = 119,
00147         KEY_x           = 120,
00148         KEY_y           = 121,
00149         KEY_z           = 122,
00150         KEY_DELETE      = 127,
00151 
00152         KEY_KP0         = 256,
00153         KEY_KP1         = 257,
00154         KEY_KP2         = 258,
00155         KEY_KP3         = 259,
00156         KEY_KP4         = 260,
00157         KEY_KP5         = 261,
00158         KEY_KP6         = 262,
00159         KEY_KP7         = 263,
00160         KEY_KP8         = 264,
00161         KEY_KP9         = 265,
00162         KEY_KP_PERIOD   = 266,
00163         KEY_KP_DIVIDE   = 267,
00164         KEY_KP_MULTIPLY = 268,
00165         KEY_KP_MINUS    = 269,
00166         KEY_KP_PLUS     = 270,
00167         KEY_KP_ENTER    = 271,
00168         KEY_KP_EQUALS   = 272,
00169         
00170         KEY_UP          = 273,
00171         KEY_DOWN        = 274,
00172         KEY_RIGHT       = 275,
00173         KEY_LEFT        = 276,
00174         KEY_INSERT      = 277,
00175         KEY_HOME        = 278,
00176         KEY_END         = 279,
00177         KEY_PAGEUP      = 280,
00178         KEY_PAGEDOWN    = 281,
00179         
00180         KEY_F1          = 282,
00181         KEY_F2          = 283,
00182         KEY_F3          = 284,
00183         KEY_F4          = 285,
00184         KEY_F5          = 286,
00185         KEY_F6          = 287,
00186         KEY_F7          = 288,
00187         KEY_F8          = 289,
00188         KEY_F9          = 290,
00189         KEY_F10         = 291,
00190         KEY_F11         = 292,
00191         KEY_F12         = 293,
00192         KEY_F13         = 294,
00193         KEY_F14         = 295,
00194         KEY_F15         = 296,
00195         
00196         KEY_NUMLOCK     = 300,
00197         KEY_CAPSLOCK    = 301,
00198         KEY_SCROLLOCK   = 302,
00199         KEY_RSHIFT      = 303,
00200         KEY_LSHIFT      = 304,
00201         KEY_RCTRL       = 305,
00202         KEY_LCTRL       = 306,
00203         KEY_RALT        = 307,
00204         KEY_LALT        = 308,
00205         KEY_RMETA       = 309,
00206         KEY_LMETA       = 310,
00207         KEY_LSUPER      = 311,      /* Left "Windows" key */
00208         KEY_RSUPER      = 312,      /* Right "Windows" key */
00209         KEY_MODE        = 313,      /* "Alt Gr" key */
00210         KEY_COMPOSE     = 314,      /* Multi-key compose key */
00211         
00212         KEY_HELP        = 315,
00213         KEY_PRINT       = 316,
00214         KEY_SYSREQ      = 317,
00215         KEY_BREAK       = 318,
00216         KEY_MENU        = 319,
00217         KEY_POWER       = 320,      /* Power Macintosh power key */
00218         KEY_EURO        = 321,      /* Some european keyboards */
00219         KEY_UNDO        = 322,      /* Atari keyboard has Undo */
00220         
00221         KEY_LAST
00222     };
00223     
00224   protected:
00225     int             mCode;
00226     uint32_t        mChar32;
00227     char            mChar;
00228     unsigned int    mModifiers;
00229     unsigned int    mNativeKeyCode;
00230     WindowRef       mWindow;
00231 };
00232 
00233 } } // namespace cinder::app