/** * User press key down */ void Keymap_KeyDown(SDL_keysym *sdlkey) { uint8_t STScanCode; int symkey = sdlkey->sym; int modkey = sdlkey->mod; LOG_TRACE(TRACE_KEYMAP, "key down: sym=%i scan=%i mod=0x%x\n", symkey, sdlkey->scancode, modkey); if (ShortCut_CheckKeys(modkey, symkey, 1)) return; /* If using joystick emulation via keyboard, DON'T send keys to keyboard processor!!! * Some games use keyboard as pause! */ if (Joy_KeyDown(symkey, modkey)) return; /* Handle special keys */ if (symkey == SDLK_RALT || symkey == SDLK_LMETA || symkey == SDLK_RMETA || symkey == SDLK_MODE || symkey == SDLK_NUMLOCK) { /* Ignore modifier keys that aren't passed to the ST */ return; } STScanCode = Keymap_RemapKeyToSTScanCode(sdlkey); LOG_TRACE(TRACE_KEYMAP, "key map: sym=0x%x to ST-scan=0x%02x\n", symkey, STScanCode); if (STScanCode != (uint8_t)-1) { if (!Keyboard.KeyStates[STScanCode]) { /* Set down */ Keyboard.KeyStates[STScanCode] = true; IKBD_PressSTKey(STScanCode, true); } } }
/** * User press key down */ void Keymap_KeyDown(SDL_keysym *sdlkey) { bool bPreviousKeyState; char STScanCode; int symkey = sdlkey->sym; int modkey = sdlkey->mod; /*fprintf(stderr, "keydown: sym=%i scan=%i mod=$%x\n",symkey, sdlkey->scancode, modkey);*/ if (ShortCut_CheckKeys(modkey, symkey, 1)) return; /* If using joystick emulation via keyboard, DON'T send keys to keyboard processor!!! * Some games use keyboard as pause! */ if (Joy_KeyDown(symkey, modkey)) return; /* Handle special keys */ if (symkey == SDLK_RALT || symkey == SDLK_LMETA || symkey == SDLK_RMETA || symkey == SDLK_MODE || symkey == SDLK_NUMLOCK) { /* Ignore modifier keys that aren't passed to the ST */ return; } /* Set down */ bPreviousKeyState = Keyboard.KeyStates[symkey]; Keyboard.KeyStates[symkey] = true; STScanCode = Keymap_RemapKeyToSTScanCode(sdlkey); if (STScanCode != (char)-1) { if (!bPreviousKeyState) IKBD_PressSTKey(STScanCode, true); } }