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