- more keyboard bugfixes so some special keys above 255 work

This commit is contained in:
Mark Vejvoda 2011-03-06 23:45:46 +00:00
parent 4874d31ddd
commit f07b7a3603
3 changed files with 129 additions and 22 deletions

View File

@ -457,7 +457,6 @@ char Config::translateStringToCharKey(const string &value) const {
else if(value == "vkPause") {
result = vkPause;
}
else {
string sError = "Unsupported key translation [" + value + "]";
throw runtime_error(sError.c_str());
@ -468,7 +467,92 @@ char Config::translateStringToCharKey(const string &value) const {
result = value[1];
}
else {
result = value[0];
bool foundKey = false;
if(value.length() > 1) {
for(int i = SDLK_UNKNOWN; i < SDLK_LAST; ++i) {
SDLKey key = static_cast<SDLKey>(i);
string keyName = SDL_GetKeyName(key);
if(value == keyName) {
if(key > 255) {
if(value == "left") {
result = vkLeft;
}
else if(value == "right") {
result = vkRight;
}
else if(value == "up") {
result = vkUp;
}
else if(value == "down") {
result = vkDown;
}
else if(value == "add") {
result = vkAdd;
}
else if(value == "subtract") {
result = vkSubtract;
}
else if(value == "escape") {
result = vkEscape;
}
else if(value == "f1") {
result = vkF1;
}
else if(value == "f2") {
result = vkF2;
}
else if(value == "f3") {
result = vkF3;
}
else if(value == "f4") {
result = vkF4;
}
else if(value == "f5") {
result = vkF5;
}
else if(value == "f6") {
result = vkF6;
}
else if(value == "f7") {
result = vkF7;
}
else if(value == "f8") {
result = vkF8;
}
else if(value == "f9") {
result = vkF9;
}
else if(value == "f10") {
result = vkF10;
}
else if(value == "f11") {
result = vkF11;
}
else if(value == "f12") {
result = vkF12;
}
else if(value == "print-screen") {
result = vkPrint;
}
else if(value == "pause") {
result = vkPause;
}
else {
result = -key;
}
}
else {
result = key;
}
foundKey = true;
break;
}
}
}
if(foundKey == false) {
result = value[0];
}
}
}
else {

View File

@ -331,20 +331,28 @@ void MenuStateKeysetup::keyUp(char key) {
if(hotkeyIndex >= 0) {
if(hotkeyChar != 0) {
string keyName = SDL_GetKeyName(static_cast<SDLKey>(hotkeyChar));
key = hotkeyChar;
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] keyName [%s] char [%d][%d]\n",__FILE__,__FUNCTION__,__LINE__,keyName.c_str(),hotkeyChar,key);
SDLKey keysym = SDLK_UNKNOWN;
if(keyName == "unknown key") {
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
SDLKey keysym = configKeys.translateSpecialStringToSDLKey(hotkeyChar);
keysym = configKeys.translateSpecialStringToSDLKey(hotkeyChar);
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] keysym [%d]\n",__FILE__,__FUNCTION__,__LINE__,keysym);
// SDL skips capital letters
if(keysym >= 65 && keysym <= 90) {
keysym = (SDLKey)((int)keysym + 32);
}
key = keysym;
if(keysym < 255) {
key = keysym;
}
keyName = SDL_GetKeyName(keysym);
}
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] keyName [%s] char [%d]\n",__FILE__,__FUNCTION__,__LINE__,keyName.c_str(),hotkeyChar);
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] keyName [%s] char [%d][%d]\n",__FILE__,__FUNCTION__,__LINE__,keyName.c_str(),hotkeyChar,key);
if(keyName != "unknown key") {
GraphicLabel *label= labels[hotkeyIndex];
@ -355,15 +363,25 @@ void MenuStateKeysetup::keyUp(char key) {
for(int i = 0; i < userProperties.size(); ++i) {
string hotKeyName = userProperties[i].first;
if(nameValuePair.first == hotKeyName) {
userProperties[i].second = "";
userProperties[i].second.push_back(key);
if(keysym > 255) {
userProperties[i].second = keyName;
}
else {
userProperties[i].second = "";
userProperties[i].second.push_back(key);
}
isNewUserKeyEntry = false;
break;
}
}
if(isNewUserKeyEntry == true) {
pair<string,string> newNameValuePair = nameValuePair;
newNameValuePair.second = key;
if(keysym > 255) {
newNameValuePair.second = keyName;
}
else {
newNameValuePair.second = key;
}
userProperties.push_back(newNameValuePair);
}
}

View File

@ -633,7 +633,12 @@ char Window::getRawKey(SDL_keysym keysym) {
char Window::getNormalKey(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);
SDLKey unicodeKey = static_cast<SDLKey>(getRawKey(keysym));
//SDLKey unicodeKey = static_cast<SDLKey>(getRawKey(keysym));
char c = getRawKey(keysym);
SDLKey unicodeKey;
if(c > SDLK_UNKNOWN && c < SDLK_LAST) {
unicodeKey = static_cast<SDLKey>(c);
}
if(unicodeKey == 0) {
unicodeKey = keysym.sym;
}
@ -709,40 +714,40 @@ char Window::getNormalKey(SDL_keysym keysym,bool skipSpecialKeys) {
return ' ';
}
if(keyName == "f1") {
if(keyName == "f1" || keyName == "F1") {
return vkF1;
}
if(keyName == "f2") {
if(keyName == "f2" || keyName == "F2") {
return vkF2;
}
if(keyName == "f3") {
if(keyName == "f3" || keyName == "F3") {
return vkF3;
}
if(keyName == "f4") {
if(keyName == "f4" || keyName == "F4") {
return vkF4;
}
if(keyName == "f5") {
if(keyName == "f5" || keyName == "F5") {
return vkF5;
}
if(keyName == "f6") {
if(keyName == "f6" || keyName == "F6") {
return vkF6;
}
if(keyName == "f7") {
if(keyName == "f7" || keyName == "F7") {
return vkF7;
}
if(keyName == "f8") {
if(keyName == "f8" || keyName == "F8") {
return vkF8;
}
if(keyName == "f9") {
if(keyName == "f9" || keyName == "F9") {
return vkF9;
}
if(keyName == "f10") {
if(keyName == "f10" || keyName == "F10") {
return vkF10;
}
if(keyName == "f11") {
if(keyName == "f11" || keyName == "F11") {
return vkF11;
}
if(keyName == "f12") {
if(keyName == "f12" || keyName == "F12") {
return vkF12;
}
if(keyName == "0") {