- attempt to fix previous messup with keyboard keys

This commit is contained in:
Mark Vejvoda 2011-03-02 05:45:02 +00:00
parent 792d0aa665
commit c3286bf1a0

View File

@ -176,14 +176,14 @@ bool Window::handleEvent() {
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] Raw SDL key [%d] mod [%d] unicode [%d] scancode [%d] keyName [%s]\n",__FILE__,__FUNCTION__,__LINE__,event.key.keysym.sym,event.key.keysym.mod,event.key.keysym.unicode,event.key.keysym.scancode,keyName.c_str()); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] Raw SDL key [%d] mod [%d] unicode [%d] scancode [%d] keyName [%s]\n",__FILE__,__FUNCTION__,__LINE__,event.key.keysym.sym,event.key.keysym.mod,event.key.keysym.unicode,event.key.keysym.scancode,keyName.c_str());
/* handle ALT+Return */ /* handle ALT+Return */
if(event.key.keysym.unicode == SDLK_RETURN if(keyName == "return"
&& (event.key.keysym.mod & (KMOD_LALT | KMOD_RALT))) { && (event.key.keysym.mod & (KMOD_LALT | KMOD_RALT))) {
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d] SDLK_RETURN pressed.\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d] SDLK_RETURN pressed.\n",__FILE__,__FUNCTION__,__LINE__);
toggleFullscreen(); toggleFullscreen();
} }
if(global_window) { if(global_window) {
global_window->eventKeyDown(getKey(event.key.keysym,true)); global_window->eventKeyDown(getKey(event.key.keysym,true));
global_window->eventKeyPress(static_cast<char>(event.key.keysym.unicode)); global_window->eventKeyPress(static_cast<char>(event.key.keysym.sym));
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
} }
@ -590,18 +590,19 @@ MouseButton Window::getMouseButton(int sdlButton) {
char Window::getKey(SDL_keysym keysym,bool skipSpecialKeys) { char Window::getKey(SDL_keysym keysym,bool skipSpecialKeys) {
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] keysym.sym [%d] skipSpecialKeys = %d.\n",__FILE__,__FUNCTION__,__LINE__,keysym.sym,skipSpecialKeys); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] keysym.sym [%d] skipSpecialKeys = %d.\n",__FILE__,__FUNCTION__,__LINE__,keysym.sym,skipSpecialKeys);
string keyName = SDL_GetKeyName(keysym.sym);
if(skipSpecialKeys == false) { if(skipSpecialKeys == false) {
switch(keysym.unicode) { if(keyName == "left alt" || keyName == "right alt") {
case SDLK_LALT: return vkAlt;
case SDLK_RALT:
return vkAlt;
case SDLK_LCTRL:
case SDLK_RCTRL:
return vkControl;
case SDLK_LSHIFT:
case SDLK_RSHIFT:
return vkShift;
} }
else if(keyName == "left ctrl" || keyName == "right ctrl") {
return vkControl;
}
else if(keyName == "left shift" || keyName == "right shift") {
return vkShift;
}
if(keysym.mod & (KMOD_LALT | KMOD_RALT)) { if(keysym.mod & (KMOD_LALT | KMOD_RALT)) {
return vkAlt; return vkAlt;
} }
@ -612,147 +613,193 @@ char Window::getKey(SDL_keysym keysym,bool skipSpecialKeys) {
return vkShift; return vkShift;
} }
} }
switch(keysym.unicode) { if(keyName == "plus sign" || keyName == "keypad plus") {
case SDLK_PLUS: return vkAdd;
case SDLK_KP_PLUS: }
return vkAdd; if(keyName == "minus sign" || keyName == "keypad minus") {
case SDLK_MINUS: return vkSubtract;
case SDLK_KP_MINUS: }
return vkSubtract; if(keyName == "escape") {
case SDLK_ESCAPE: return vkEscape;
return vkEscape; }
case SDLK_UP: if(keyName == "up arrow") {
return vkUp; return vkUp;
case SDLK_LEFT: }
return vkLeft; if(keyName == "left arrow") {
case SDLK_RIGHT: return vkLeft;
return vkRight; }
case SDLK_DOWN: if(keyName == "right arrow") {
return vkDown; return vkRight;
case SDLK_RETURN: }
case SDLK_KP_ENTER: if(keyName == "down arrow") {
return vkReturn; return vkDown;
case SDLK_TAB: }
return vkTab; if(keyName == "return" || keyName == "keypad enter") {
case SDLK_BACKSPACE: return vkReturn;
return vkBack; }
case SDLK_DELETE: if(keyName == "tab") {
return vkDelete; return vkTab;
case SDLK_PRINT: }
return vkPrint; if(keyName == "backspace") {
case SDLK_PAUSE: return vkBack;
return vkPause; }
case SDLK_F1: if(keyName == "delete") {
return vkF1; return vkDelete;
break; }
case SDLK_F2: if(keyName == "print-screen") {
return vkF2; return vkPrint;
break; }
case SDLK_F3: if(keyName == "pause") {
return vkF3; return vkPause;
break; }
case SDLK_F4: if(keyName == "F1") {
return vkF4; return vkF1;
break; }
case SDLK_F5: if(keyName == "F2") {
return vkF5; return vkF2;
break; }
case SDLK_F6: if(keyName == "F3") {
return vkF6; return vkF3;
break; }
case SDLK_F7: if(keyName == "F4") {
return vkF7; return vkF4;
break; }
case SDLK_F8: if(keyName == "F5") {
return vkF8; return vkF5;
break; }
case SDLK_F9: if(keyName == "F6") {
return vkF9; return vkF6;
break; }
case SDLK_F10: if(keyName == "F7") {
return vkF10; return vkF7;
break; }
case SDLK_F11: if(keyName == "F8") {
return vkF11; return vkF8;
break; }
case SDLK_F12: if(keyName == "F9") {
return vkF12; return vkF9;
break; }
case SDLK_0: if(keyName == "F10") {
return '0'; return vkF10;
case SDLK_1: }
return '1'; if(keyName == "F11") {
case SDLK_2: return vkF11;
return '2'; }
case SDLK_3: if(keyName == "F12") {
return '3'; return vkF12;
case SDLK_4: }
return '4'; if(keyName == "0") {
case SDLK_5: return '0';
return '5'; }
case SDLK_6: if(keyName == "1") {
return '6'; return '1';
case SDLK_7: }
return '7'; if(keyName == "2") {
case SDLK_8: return '2';
return '8'; }
case SDLK_9: if(keyName == "3") {
return '9'; return '3';
case SDLK_QUESTION: }
return '?'; if(keyName == "4") {
case SDLK_a: return '4';
return 'A'; }
case SDLK_b: if(keyName == "5") {
return 'B'; return '5';
case SDLK_c: }
return 'C'; if(keyName == "6") {
case SDLK_d: return '6';
return 'D'; }
case SDLK_e: if(keyName == "7") {
return 'E'; return '7';
case SDLK_f: }
return 'F'; if(keyName == "8") {
case SDLK_g: return '8';
return 'G'; }
case SDLK_h: if(keyName == "9") {
return 'H'; return '9';
case SDLK_i: }
return 'I'; if(keyName == "question mark") {
case SDLK_j: return '?';
return 'J'; }
case SDLK_k: if(keyName == "a") {
return 'K'; return 'A';
case SDLK_l: }
return 'L'; if(keyName == "b") {
case SDLK_m: return 'B';
return 'M'; }
case SDLK_n: if(keyName == "c") {
return 'N'; return 'C';
case SDLK_o: }
return 'O'; if(keyName == "d") {
case SDLK_p: return 'D';
return 'P'; }
case SDLK_q: if(keyName == "e") {
return 'Q'; return 'E';
case SDLK_r: }
return 'R'; if(keyName == "f") {
case SDLK_s: return 'F';
return 'S'; }
case SDLK_t: if(keyName == "g") {
return 'T'; return 'G';
case SDLK_u: }
return 'U'; if(keyName == "h") {
case SDLK_v: return 'H';
return 'V'; }
case SDLK_w: if(keyName == "i") {
return 'W'; return 'I';
case SDLK_x: }
return 'X'; if(keyName == "j") {
case SDLK_y: return 'J';
return 'Y'; }
case SDLK_z: if(keyName == "k") {
return 'Z'; return 'K';
default: }
if(keyName == "l") {
return 'L';
}
if(keyName == "m") {
return 'M';
}
if(keyName == "n") {
return 'N';
}
if(keyName == "o") {
return 'O';
}
if(keyName == "p") {
return 'P';
}
if(keyName == "q") {
return 'Q';
}
if(keyName == "r") {
return 'R';
}
if(keyName == "s") {
return 'S';
}
if(keyName == "t") {
return 'T';
}
if(keyName == "u") {
return 'U';
}
if(keyName == "v") {
return 'V';
}
if(keyName == "w") {
return 'W';
}
if(keyName == "x") {
return 'X';
}
if(keyName == "y") {
return 'Y';
}
if(keyName == "z") {
return 'Z';
}
else {
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
Uint16 c = keysym.unicode; Uint16 c = keysym.unicode;
if((c & 0xFF80) == 0) { if((c & 0xFF80) == 0) {
@ -764,7 +811,7 @@ char Window::getKey(SDL_keysym keysym,bool skipSpecialKeys) {
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
if(skipSpecialKeys == true) { if(skipSpecialKeys == true) {
switch(keysym.unicode) { switch(keysym.sym) {
case SDLK_LALT: case SDLK_LALT:
case SDLK_RALT: case SDLK_RALT:
return vkAlt; return vkAlt;
@ -787,12 +834,11 @@ char Window::getKey(SDL_keysym keysym,bool skipSpecialKeys) {
} }
} }
c = keysym.unicode; c = keysym.sym;
} }
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %u] c = [%d]\n",__FILE__,__FUNCTION__,__LINE__,c); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %u] c = [%d]\n",__FILE__,__FUNCTION__,__LINE__,c);
return (c & 0xFF); return (c & 0xFF);
break;
} }
return 0; return 0;