bool processKeyInput(SDLKey sdlkey, unsigned int unicode, bool pressed) { //printf("processKeyInput: %d %s pressed %d", sdlkey, SDL_GetKeyName(sdlkey), pressed); int code = -int(sdlkey); if( unicode >= 0x80 ) code = unicode; std::map<int, int>::const_iterator scan = keyMappings.find(code); if( scan == keyMappings.end() ) return false; if( keys[scan->second] == pressed ) return true; bool shift = keyMappingsShift.count(code) > 0 && !keys[KEY_LSHIFT]; bool ctrl = keyMappingsCtrl.count(code) > 0 && !keys[KEY_LCTRL]; bool alt = keyMappingsAlt.count(code) > 0 && !keys[KEY_LALT]; if( pressed ) { if( shift ) keys[KEY_LSHIFT] = true; if( ctrl ) keys[KEY_LCTRL] = true; if( alt ) keys[KEY_LALT] = true; outputSendKeys(); } keys[scan->second] = pressed; outputSendKeys(); if( pressed ) { if( shift ) keys[KEY_LSHIFT] = false; if( ctrl ) keys[KEY_LCTRL] = false; if( alt ) keys[KEY_LALT] = false; outputSendKeys(); } return true; }
void processKeyInput(SDLKey key, int pressed) { if( keys[key] == pressed ) { //printf("processKeyInput: duplicate event %d %d", key, pressed); return; } //printf("processKeyInput: %d %d", key, pressed); keys[key] = pressed; outputSendKeys(); //oldkeys[key] = keys[key]; }