I'm trying to check if the colon key is pressed, I'm using a English keyboard which means colon is shift
+ ;
, my though was to read the keyboard state and then check the status of the scancode:
SDL_PumpEvents();
const uint8 *keyState = SDL_GetKeyboardState(NULL);
printf("keystate %d\n", keyState[scancode]);
but then I realized there is a scancode for the keypad colon SDL_SCANCODE_KP_COLON
equivalent toSDLK_KP_COLON
, but there is no scancode for SDLK_COLON
(In case you are wondering: I tried with the keypad version and is not working).
So, I wonder why there is no equivalent scancode for SDLK_COLON
and what's the best way to do this instead?
There is no colon scancode because there is no key on an ANSI (US) layout keyboard that produces a colon without modifiers. SDLK_COLON
exists because there are layouts where a key produces a colon without modifier, like the French layout where the key corresponding to SDL_SCANCODE_PERIOD
(dot .
or greater-than sign >
) makes a colon :
or a slash /
(with shift). So if you press that key on a French keyboard, you receive an event with SDL_SCANCODE_PERIOD
and SDLK_COLON
.
What I assume you want is to know if the user typed a colon, which has nothing to do with scancodes or even keycodes when dealing with different keyboard layouts. For that, you need a SDL_TextInputEvent
. Check out the wiki's tutorial about it.
Or you could use SDL_SCANCODE_SEMICOLON
, check what that key corresponds to for the user, and display that so the user knows what key to press (it would be the ù
key for a French keyboard).