00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "SDL/SDLKeyBoard.h"
00024 #include "SDL/SDLInputManager.h"
00025 #include "OISException.h"
00026 #include "OISEvents.h"
00027 #include <sstream>
00028
00029 using namespace OIS;
00030
00031
00032 SDLKeyboard::SDLKeyboard( bool buffered )
00033 {
00034 mBuffered = buffered;
00035 mType = OISKeyboard;
00036 listener = 0;
00037
00038
00039 memset( &KeyBuffer, 0, 256 );
00040 }
00041
00042
00043 void SDLKeyboard::_initialize()
00044 {
00045 mModifiers = 0;
00046 mSDLBuff = 0;
00047
00048 mKeyMap.insert( KeyMap::value_type(SDLK_ESCAPE,KC_ESCAPE) );
00049 mKeyMap.insert( KeyMap::value_type(SDLK_1, KC_1) );
00050 mKeyMap.insert( KeyMap::value_type(SDLK_2, KC_2) );
00051 mKeyMap.insert( KeyMap::value_type(SDLK_3, KC_3) );
00052 mKeyMap.insert( KeyMap::value_type(SDLK_4, KC_4) );
00053 mKeyMap.insert( KeyMap::value_type(SDLK_5, KC_5) );
00054 mKeyMap.insert( KeyMap::value_type(SDLK_6, KC_6) );
00055 mKeyMap.insert( KeyMap::value_type(SDLK_7, KC_7) );
00056 mKeyMap.insert( KeyMap::value_type(SDLK_8, KC_8) );
00057 mKeyMap.insert( KeyMap::value_type(SDLK_9, KC_9) );
00058 mKeyMap.insert( KeyMap::value_type(SDLK_0, KC_0) );
00059 mKeyMap.insert( KeyMap::value_type(SDLK_MINUS, KC_MINUS) );
00060 mKeyMap.insert( KeyMap::value_type(SDLK_EQUALS, KC_EQUALS) );
00061 mKeyMap.insert( KeyMap::value_type(SDLK_BACKSPACE, KC_BACK) );
00062 mKeyMap.insert( KeyMap::value_type(SDLK_TAB, KC_TAB) );
00063 mKeyMap.insert( KeyMap::value_type(SDLK_q, KC_Q) );
00064 mKeyMap.insert( KeyMap::value_type(SDLK_w, KC_W) );
00065 mKeyMap.insert( KeyMap::value_type(SDLK_e, KC_E) );
00066 mKeyMap.insert( KeyMap::value_type(SDLK_r, KC_R) );
00067 mKeyMap.insert( KeyMap::value_type(SDLK_t, KC_T) );
00068 mKeyMap.insert( KeyMap::value_type(SDLK_y, KC_Y) );
00069 mKeyMap.insert( KeyMap::value_type(SDLK_u, KC_U) );
00070 mKeyMap.insert( KeyMap::value_type(SDLK_i, KC_I) );
00071 mKeyMap.insert( KeyMap::value_type(SDLK_o, KC_O) );
00072 mKeyMap.insert( KeyMap::value_type(SDLK_p, KC_P) );
00073 mKeyMap.insert( KeyMap::value_type(SDLK_RETURN, KC_RETURN) );
00074 mKeyMap.insert( KeyMap::value_type(SDLK_LCTRL, KC_LCONTROL));
00075 mKeyMap.insert( KeyMap::value_type(SDLK_a, KC_A) );
00076 mKeyMap.insert( KeyMap::value_type(SDLK_s, KC_S) );
00077 mKeyMap.insert( KeyMap::value_type(SDLK_d, KC_D) );
00078 mKeyMap.insert( KeyMap::value_type(SDLK_f, KC_F) );
00079 mKeyMap.insert( KeyMap::value_type(SDLK_g, KC_G) );
00080 mKeyMap.insert( KeyMap::value_type(SDLK_h, KC_H) );
00081 mKeyMap.insert( KeyMap::value_type(SDLK_j, KC_J) );
00082 mKeyMap.insert( KeyMap::value_type(SDLK_k, KC_K) );
00083 mKeyMap.insert( KeyMap::value_type(SDLK_l, KC_L) );
00084 mKeyMap.insert( KeyMap::value_type(SDLK_SEMICOLON, KC_SEMICOLON) );
00085 mKeyMap.insert( KeyMap::value_type(SDLK_COLON, KC_COLON) );
00086 mKeyMap.insert( KeyMap::value_type(SDLK_QUOTE, KC_APOSTROPHE) );
00087 mKeyMap.insert( KeyMap::value_type(SDLK_BACKQUOTE, KC_GRAVE) );
00088 mKeyMap.insert( KeyMap::value_type(SDLK_LSHIFT, KC_LSHIFT) );
00089 mKeyMap.insert( KeyMap::value_type(SDLK_BACKSLASH, KC_BACKSLASH) );
00090 mKeyMap.insert( KeyMap::value_type(SDLK_SLASH, KC_SLASH) );
00091 mKeyMap.insert( KeyMap::value_type(SDLK_z, KC_Z) );
00092 mKeyMap.insert( KeyMap::value_type(SDLK_x, KC_X) );
00093 mKeyMap.insert( KeyMap::value_type(SDLK_c, KC_C) );
00094 mKeyMap.insert( KeyMap::value_type(SDLK_v, KC_V) );
00095 mKeyMap.insert( KeyMap::value_type(SDLK_b, KC_B) );
00096 mKeyMap.insert( KeyMap::value_type(SDLK_n, KC_N) );
00097 mKeyMap.insert( KeyMap::value_type(SDLK_m, KC_M) );
00098 mKeyMap.insert( KeyMap::value_type(SDLK_COMMA, KC_COMMA) );
00099 mKeyMap.insert( KeyMap::value_type(SDLK_PERIOD, KC_PERIOD));
00100 mKeyMap.insert( KeyMap::value_type(SDLK_RSHIFT, KC_RSHIFT));
00101 mKeyMap.insert( KeyMap::value_type(SDLK_KP_MULTIPLY, KC_MULTIPLY) );
00102 mKeyMap.insert( KeyMap::value_type(SDLK_LALT, KC_LMENU) );
00103 mKeyMap.insert( KeyMap::value_type(SDLK_SPACE, KC_SPACE));
00104 mKeyMap.insert( KeyMap::value_type(SDLK_CAPSLOCK, KC_CAPITAL) );
00105 mKeyMap.insert( KeyMap::value_type(SDLK_F1, KC_F1) );
00106 mKeyMap.insert( KeyMap::value_type(SDLK_F2, KC_F2) );
00107 mKeyMap.insert( KeyMap::value_type(SDLK_F3, KC_F3) );
00108 mKeyMap.insert( KeyMap::value_type(SDLK_F4, KC_F4) );
00109 mKeyMap.insert( KeyMap::value_type(SDLK_F5, KC_F5) );
00110 mKeyMap.insert( KeyMap::value_type(SDLK_F6, KC_F6) );
00111 mKeyMap.insert( KeyMap::value_type(SDLK_F7, KC_F7) );
00112 mKeyMap.insert( KeyMap::value_type(SDLK_F8, KC_F8) );
00113 mKeyMap.insert( KeyMap::value_type(SDLK_F9, KC_F9) );
00114 mKeyMap.insert( KeyMap::value_type(SDLK_F10, KC_F10) );
00115 mKeyMap.insert( KeyMap::value_type(SDLK_NUMLOCK, KC_NUMLOCK) );
00116 mKeyMap.insert( KeyMap::value_type(SDLK_SCROLLOCK, KC_SCROLL));
00117 mKeyMap.insert( KeyMap::value_type(SDLK_KP7, KC_NUMPAD7) );
00118 mKeyMap.insert( KeyMap::value_type(SDLK_KP8, KC_NUMPAD8) );
00119 mKeyMap.insert( KeyMap::value_type(SDLK_KP9, KC_NUMPAD9) );
00120 mKeyMap.insert( KeyMap::value_type(SDLK_KP_MINUS, KC_SUBTRACT) );
00121 mKeyMap.insert( KeyMap::value_type(SDLK_KP4, KC_NUMPAD4) );
00122 mKeyMap.insert( KeyMap::value_type(SDLK_KP5, KC_NUMPAD5) );
00123 mKeyMap.insert( KeyMap::value_type(SDLK_KP6, KC_NUMPAD6) );
00124 mKeyMap.insert( KeyMap::value_type(SDLK_KP_PLUS, KC_ADD) );
00125 mKeyMap.insert( KeyMap::value_type(SDLK_KP1, KC_NUMPAD1) );
00126 mKeyMap.insert( KeyMap::value_type(SDLK_KP2, KC_NUMPAD2) );
00127 mKeyMap.insert( KeyMap::value_type(SDLK_KP3, KC_NUMPAD3) );
00128 mKeyMap.insert( KeyMap::value_type(SDLK_KP0, KC_NUMPAD0) );
00129 mKeyMap.insert( KeyMap::value_type(SDLK_KP_PERIOD, KC_DECIMAL) );
00130 mKeyMap.insert( KeyMap::value_type(SDLK_F11, KC_F11) );
00131 mKeyMap.insert( KeyMap::value_type(SDLK_F12, KC_F12) );
00132 mKeyMap.insert( KeyMap::value_type(SDLK_F13, KC_F13) );
00133 mKeyMap.insert( KeyMap::value_type(SDLK_F14, KC_F14) );
00134 mKeyMap.insert( KeyMap::value_type(SDLK_F15, KC_F15) );
00135 mKeyMap.insert( KeyMap::value_type(SDLK_KP_EQUALS, KC_NUMPADEQUALS) );
00136 mKeyMap.insert( KeyMap::value_type(SDLK_KP_DIVIDE, KC_DIVIDE) );
00137 mKeyMap.insert( KeyMap::value_type(SDLK_SYSREQ, KC_SYSRQ) );
00138 mKeyMap.insert( KeyMap::value_type(SDLK_RALT, KC_RMENU) );
00139 mKeyMap.insert( KeyMap::value_type(SDLK_HOME, KC_HOME) );
00140 mKeyMap.insert( KeyMap::value_type(SDLK_UP, KC_UP) );
00141 mKeyMap.insert( KeyMap::value_type(SDLK_PAGEUP, KC_PGUP) );
00142 mKeyMap.insert( KeyMap::value_type(SDLK_LEFT, KC_LEFT) );
00143 mKeyMap.insert( KeyMap::value_type(SDLK_RIGHT, KC_RIGHT) );
00144 mKeyMap.insert( KeyMap::value_type(SDLK_END, KC_END) );
00145 mKeyMap.insert( KeyMap::value_type(SDLK_DOWN, KC_DOWN) );
00146 mKeyMap.insert( KeyMap::value_type(SDLK_PAGEDOWN, KC_PGDOWN) );
00147 mKeyMap.insert( KeyMap::value_type(SDLK_INSERT, KC_INSERT) );
00148 mKeyMap.insert( KeyMap::value_type(SDLK_DELETE, KC_DELETE) );
00149 mKeyMap.insert( KeyMap::value_type(SDLK_LSUPER, KC_LWIN) );
00150 mKeyMap.insert( KeyMap::value_type(SDLK_RSUPER, KC_RWIN) );
00151
00152 SDL_EnableUNICODE(1);
00153 }
00154
00155
00156 SDLKeyboard::~SDLKeyboard()
00157 {
00158 }
00159
00160
00161 void SDLKeyboard::capture()
00162 {
00163 SDL_Event events[OIS_SDL_KEY_BUFF];
00164 int count = SDL_PeepEvents(events, OIS_SDL_KEY_BUFF, SDL_GETEVENT,
00165 SDL_EVENTMASK(SDL_KEYDOWN) | SDL_EVENTMASK(SDL_KEYUP));
00166
00167 for( int i = 0; i < count; ++i )
00168 {
00169 KeyCode kc = mKeyMap[events[i].key.keysym.sym];
00170 KeyBuffer[kc] = events[i].key.state;
00171
00172 if( mBuffered && listener )
00173 {
00174 if( events[i].key.state == SDL_PRESSED )
00175 {
00176 if( listener->keyPressed(KeyEvent(this, 0, kc, events[i].key.keysym.unicode)) == false )
00177 break;
00178 }
00179 else
00180 {
00181 if( listener->keyReleased(KeyEvent(this, 0, kc, events[i].key.keysym.unicode)) == false )
00182 break;
00183 }
00184 }
00185 }
00186
00187
00188 if( KeyBuffer[KC_RMENU] || KeyBuffer[KC_LMENU])
00189 {
00190 if( KeyBuffer[KC_TAB] )
00191 static_cast<SDLInputManager*>(InputManager::getSingletonPtr())->_setGrabMode(false);
00192 }
00193 }
00194
00195
00196 bool SDLKeyboard::isKeyDown( KeyCode key )
00197 {
00198 return KeyBuffer[key] == 1 ? true : false;
00199 }
00200
00201
00202 const std::string& SDLKeyboard::getAsString( KeyCode kc )
00203 {
00204 switch(kc)
00205 {
00206 case KC_ESCAPE: mGetString = SDL_GetKeyName(SDLK_ESCAPE); break;
00207 case KC_1: mGetString = SDL_GetKeyName(SDLK_1); break;
00208 case KC_2: mGetString = SDL_GetKeyName(SDLK_2); break;
00209 case KC_3: mGetString = SDL_GetKeyName(SDLK_3); break;
00210 case KC_4: mGetString = SDL_GetKeyName(SDLK_4); break;
00211 case KC_5: mGetString = SDL_GetKeyName(SDLK_5); break;
00212 case KC_6: mGetString = SDL_GetKeyName(SDLK_6); break;
00213 case KC_7: mGetString = SDL_GetKeyName(SDLK_7); break;
00214 case KC_8: mGetString = SDL_GetKeyName(SDLK_8); break;
00215 case KC_9: mGetString = SDL_GetKeyName(SDLK_9); break;
00216 case KC_0: mGetString = SDL_GetKeyName(SDLK_0); break;
00217 case KC_MINUS: mGetString = SDL_GetKeyName(SDLK_MINUS); break;
00218 case KC_EQUALS: mGetString = SDL_GetKeyName(SDLK_EQUALS); break;
00219 case KC_BACK: mGetString = SDL_GetKeyName(SDLK_BACKSPACE); break;
00220 case KC_TAB: mGetString = SDL_GetKeyName(SDLK_TAB); break;
00221 case KC_Q: mGetString = SDL_GetKeyName(SDLK_q); break;
00222 case KC_W: mGetString = SDL_GetKeyName(SDLK_w); break;
00223 case KC_E: mGetString = SDL_GetKeyName(SDLK_e); break;
00224 case KC_R: mGetString = SDL_GetKeyName(SDLK_r); break;
00225 case KC_T: mGetString = SDL_GetKeyName(SDLK_t); break;
00226 case KC_Y: mGetString = SDL_GetKeyName(SDLK_y); break;
00227 case KC_U: mGetString = SDL_GetKeyName(SDLK_u); break;
00228 case KC_I: mGetString = SDL_GetKeyName(SDLK_i); break;
00229 case KC_O: mGetString = SDL_GetKeyName(SDLK_o); break;
00230 case KC_P: mGetString = SDL_GetKeyName(SDLK_p); break;
00231 case KC_LBRACKET: mGetString = "["; break;
00232 case KC_RBRACKET: mGetString = "]"; break;
00233 case KC_RETURN: mGetString = SDL_GetKeyName(SDLK_RETURN); break;
00234 case KC_LCONTROL: mGetString = SDL_GetKeyName(SDLK_LCTRL); break;
00235 case KC_A: mGetString = SDL_GetKeyName(SDLK_a); break;
00236 case KC_S: mGetString = SDL_GetKeyName(SDLK_s); break;
00237 case KC_D: mGetString = SDL_GetKeyName(SDLK_d); break;
00238 case KC_F: mGetString = SDL_GetKeyName(SDLK_f); break;
00239 case KC_G: mGetString = SDL_GetKeyName(SDLK_g); break;
00240 case KC_H: mGetString = SDL_GetKeyName(SDLK_h); break;
00241 case KC_J: mGetString = SDL_GetKeyName(SDLK_j); break;
00242 case KC_K: mGetString = SDL_GetKeyName(SDLK_k); break;
00243 case KC_L: mGetString = SDL_GetKeyName(SDLK_l); break;
00244 case KC_SEMICOLON: mGetString = SDL_GetKeyName(SDLK_SEMICOLON); break;
00245 case KC_APOSTROPHE: mGetString = SDL_GetKeyName(SDLK_QUOTE); break;
00246 case KC_GRAVE: mGetString = SDL_GetKeyName(SDLK_BACKQUOTE); break;
00247 case KC_LSHIFT: mGetString = SDL_GetKeyName(SDLK_LSHIFT); break;
00248 case KC_BACKSLASH: mGetString = SDL_GetKeyName(SDLK_BACKSLASH); break;
00249 case KC_Z: mGetString = SDL_GetKeyName(SDLK_z); break;
00250 case KC_X: mGetString = SDL_GetKeyName(SDLK_x); break;
00251 case KC_C: mGetString = SDL_GetKeyName(SDLK_c); break;
00252 case KC_V: mGetString = SDL_GetKeyName(SDLK_v); break;
00253 case KC_B: mGetString = SDL_GetKeyName(SDLK_b); break;
00254 case KC_N: mGetString = SDL_GetKeyName(SDLK_n); break;
00255 case KC_M: mGetString = SDL_GetKeyName(SDLK_m); break;
00256 case KC_COMMA: mGetString = SDL_GetKeyName(SDLK_COMMA); break;
00257 case KC_PERIOD: mGetString = SDL_GetKeyName(SDLK_PERIOD); break;
00258 case KC_SLASH: mGetString = SDL_GetKeyName(SDLK_SLASH); break;
00259 case KC_RSHIFT: mGetString = SDL_GetKeyName(SDLK_RSHIFT); break;
00260 case KC_MULTIPLY: mGetString = SDL_GetKeyName(SDLK_KP_MULTIPLY); break;
00261 case KC_LMENU: mGetString = SDL_GetKeyName(SDLK_LALT); break;
00262 case KC_SPACE: mGetString = SDL_GetKeyName(SDLK_SPACE); break;
00263 case KC_CAPITAL: mGetString = SDL_GetKeyName(SDLK_CAPSLOCK); break;
00264 case KC_F1: mGetString = SDL_GetKeyName(SDLK_F1); break;
00265 case KC_F2: mGetString = SDL_GetKeyName(SDLK_F2); break;
00266 case KC_F3: mGetString = SDL_GetKeyName(SDLK_F3); break;
00267 case KC_F4: mGetString = SDL_GetKeyName(SDLK_F4); break;
00268 case KC_F5: mGetString = SDL_GetKeyName(SDLK_F5); break;
00269 case KC_F6: mGetString = SDL_GetKeyName(SDLK_F6); break;
00270 case KC_F7: mGetString = SDL_GetKeyName(SDLK_F7); break;
00271 case KC_F8: mGetString = SDL_GetKeyName(SDLK_F8); break;
00272 case KC_F9: mGetString = SDL_GetKeyName(SDLK_F9); break;
00273 case KC_F10: mGetString = SDL_GetKeyName(SDLK_F10); break;
00274 case KC_NUMLOCK: mGetString = SDL_GetKeyName(SDLK_NUMLOCK); break;
00275 case KC_SCROLL: mGetString = SDL_GetKeyName(SDLK_SCROLLOCK); break;
00276 case KC_NUMPAD7: mGetString = SDL_GetKeyName(SDLK_KP7); break;
00277 case KC_NUMPAD8: mGetString = SDL_GetKeyName(SDLK_KP8); break;
00278 case KC_NUMPAD9: mGetString = SDL_GetKeyName(SDLK_KP9); break;
00279 case KC_SUBTRACT: mGetString = SDL_GetKeyName(SDLK_KP_MINUS); break;
00280 case KC_NUMPAD4: mGetString = SDL_GetKeyName(SDLK_KP4); break;
00281 case KC_NUMPAD5: mGetString = SDL_GetKeyName(SDLK_KP5); break;
00282 case KC_NUMPAD6: mGetString = SDL_GetKeyName(SDLK_KP6); break;
00283 case KC_ADD: mGetString = SDL_GetKeyName(SDLK_KP_PLUS); break;
00284 case KC_NUMPAD1: mGetString = SDL_GetKeyName(SDLK_KP1); break;
00285 case KC_NUMPAD2: mGetString = SDL_GetKeyName(SDLK_KP2); break;
00286 case KC_NUMPAD3: mGetString = SDL_GetKeyName(SDLK_KP3); break;
00287 case KC_NUMPAD0: mGetString = SDL_GetKeyName(SDLK_KP0); break;
00288 case KC_DECIMAL: mGetString = SDL_GetKeyName(SDLK_KP_PERIOD); break;
00289 case KC_OEM_102: mGetString = "OEM_102"; break;
00290 case KC_F11: mGetString = SDL_GetKeyName(SDLK_F11); break;
00291 case KC_F12: mGetString = SDL_GetKeyName(SDLK_F12); break;
00292 case KC_F13: mGetString = SDL_GetKeyName(SDLK_F13); break;
00293 case KC_F14: mGetString = SDL_GetKeyName(SDLK_F14); break;
00294 case KC_F15: mGetString = SDL_GetKeyName(SDLK_F15); break;
00295 case KC_KANA: mGetString = "Kana"; break;
00296 case KC_ABNT_C1: mGetString = "ABNT_C1"; break;
00297 case KC_CONVERT: mGetString = "CONVERT"; break;
00298 case KC_NOCONVERT: mGetString = "NOCONVERT"; break;
00299 case KC_YEN: mGetString = "YEN"; break;
00300 case KC_ABNT_C2: mGetString = "ABNT_C2"; break;
00301 case KC_NUMPADEQUALS: mGetString = SDL_GetKeyName(SDLK_KP_EQUALS); break;
00302 case KC_PREVTRACK: mGetString = "KC_PREVTRACK"; break;
00303 case KC_AT: mGetString = "KC_AT"; break;
00304 case KC_COLON: mGetString = SDL_GetKeyName(SDLK_COLON); break;
00305 case KC_UNDERLINE: mGetString = "KC_UNDERLINE"; break;
00306 case KC_KANJI: mGetString = "KC_KANJI"; break;
00307 case KC_STOP: mGetString = "KC_STOP"; break;
00308 case KC_AX: mGetString = "KC_AX"; break;
00309 case KC_UNLABELED: mGetString = "KC_UNLABELED"; break;
00310 case KC_NEXTTRACK: mGetString = "KC_NEXTTRACK"; break;
00311 case KC_NUMPADENTER: mGetString = "KC_NUMPADENTER"; break;
00312 case KC_RCONTROL: mGetString = "KC_RCONTROL"; break;
00313 case KC_MUTE: mGetString = "KC_MUTE"; break;
00314 case KC_CALCULATOR: mGetString = "KC_CALCULATOR"; break;
00315 case KC_PLAYPAUSE: mGetString = "KC_PLAYPAUSE"; break;
00316 case KC_MEDIASTOP: mGetString = "KC_MEDIASTOP"; break;
00317 case KC_VOLUMEDOWN: mGetString = "KC_VOLUMEDOWN"; break;
00318 case KC_VOLUMEUP: mGetString = "KC_VOLUMEUP"; break;
00319 case KC_WEBHOME: mGetString = "KC_WEBHOME"; break;
00320 case KC_NUMPADCOMMA: mGetString = "KC_NUMPADCOMMA"; break;
00321 case KC_DIVIDE: mGetString = SDL_GetKeyName(SDLK_KP_DIVIDE); break;
00322 case KC_SYSRQ: mGetString = SDL_GetKeyName(SDLK_SYSREQ); break;
00323 case KC_RMENU: mGetString = SDL_GetKeyName(SDLK_RALT); break;
00324 case KC_PAUSE: mGetString = "Pause"; break;
00325 case KC_HOME: mGetString = SDL_GetKeyName(SDLK_HOME); break;
00326 case KC_UP: mGetString = SDL_GetKeyName(SDLK_UP); break;
00327 case KC_PGUP: mGetString = SDL_GetKeyName(SDLK_PAGEUP); break;
00328 case KC_LEFT: mGetString = SDL_GetKeyName(SDLK_LEFT); break;
00329 case KC_RIGHT: mGetString = SDL_GetKeyName(SDLK_RIGHT); break;
00330 case KC_END: mGetString = SDL_GetKeyName(SDLK_END); break;
00331 case KC_DOWN: mGetString = SDL_GetKeyName(SDLK_DOWN); break;
00332 case KC_PGDOWN: mGetString = SDL_GetKeyName(SDLK_PAGEDOWN); break;
00333 case KC_INSERT: mGetString = SDL_GetKeyName(SDLK_INSERT); break;
00334 case KC_DELETE: mGetString = SDL_GetKeyName(SDLK_DELETE); break;
00335 case KC_LWIN: mGetString = SDL_GetKeyName(SDLK_LSUPER); break;
00336 case KC_RWIN: mGetString = SDL_GetKeyName(SDLK_RSUPER); break;
00337 case KC_APPS: mGetString = "KC_APPS"; break;
00338 case KC_POWER: mGetString = "KC_POWER"; break;
00339 case KC_SLEEP: mGetString = "KC_SLEEP"; break;
00340 case KC_WAKE: mGetString = "KC_WAKE"; break;
00341 case KC_WEBSEARCH: mGetString = "KC_WEBSEARCH"; break;
00342 case KC_WEBFAVORITES: mGetString = "KC_WEBFAVORITES"; break;
00343 case KC_WEBREFRESH: mGetString = "KC_WEBREFRESH"; break;
00344 case KC_WEBSTOP: mGetString = "KC_WEBSTOP"; break;
00345 case KC_WEBFORWARD: mGetString = "KC_WEBFORWARD"; break;
00346 case KC_WEBBACK: mGetString = "KC_WEBBACK"; break;
00347 case KC_MYCOMPUTER: mGetString = "KC_MYCOMPUTER"; break;
00348 case KC_MAIL: mGetString = "KC_MAIL"; break;
00349 case KC_MEDIASELECT: mGetString = "KC_MEDIASELECT"; break;
00350 default: mGetString = "Unknown"; break;
00351 };
00352
00353 return mGetString;
00354 }
00355
00356
00357 void SDLKeyboard::copyKeyStates( char keys[256] )
00358 {
00359 for(int i = 0; i < 256; ++i)
00360 keys[i] = KeyBuffer[i];
00361 }
00362
00363
00364 void SDLKeyboard::setBuffered(bool buffered)
00365 {
00366 mBuffered = buffered;
00367 }
00368
00369
00370 void SDLKeyboard::setTextTranslation( TextTranslationMode mode )
00371 {
00372 mTextMode = mode;
00373 if( mode == Off || mode == Ascii )
00374 SDL_EnableUNICODE(0);
00375 else if( mode == Unicode )
00376 SDL_EnableUNICODE(1);
00377 }