Workaround for better AZERTY-Keyboard support

The first row of AZERTY-Keyboards (used in France and Belgium) doesn't
have numbers as keys but ², &, é, ", ', (, -, è, _, ç, à, ), =
(with small differences between France and Belgium).
For some of those keys we don't have keycodes - and neither does SDL2.
See also https://bugzilla.libsdl.org/show_bug.cgi?id=3188

As a workaround, just map those keys to 1, 2, ..., 9, 0 anyway, as those
are keys Quake2 already knows (and those chars are printed on the keys
too, for typing they're reachable via shift).
This workaround only works for SDL2, as SDL1.2 doesn't have scancodes
which we need scancodes to identify the keys.

While at it I unified handling of SDL_KEYDOWN and SDL_KEYUP, the code
is almost identical anyway, apart from one bool argument to Key_Event().

We track this problem in #81
This commit is contained in:
Daniel Gibson 2015-11-22 22:55:06 +01:00
parent 31ffb96614
commit dc155cca9c

View file

@ -385,30 +385,40 @@ IN_Update(void)
}
#endif
if ((event.key.keysym.sym >= SDLK_SPACE) &&
(event.key.keysym.sym < SDLK_DELETE))
{
Key_Event(event.key.keysym.sym, true, false);
}
else
{
Key_Event(IN_TranslateSDLtoQ2Key(event.key.keysym.sym), true, true);
}
break;
// fall-through
case SDL_KEYUP:
{
qboolean down = (event.type == SDL_KEYDOWN);
if ((event.key.keysym.sym >= SDLK_SPACE) &&
(event.key.keysym.sym < SDLK_DELETE))
#if SDL_VERSION_ATLEAST(2, 0, 0)
// workaround for AZERTY-keyboards, which don't have 1, 2, ..., 9, 0 in first row:
// always map those physical keys (scancodes) to those keycodes anyway
// see also https://bugzilla.libsdl.org/show_bug.cgi?id=3188
SDL_Scancode sc = event.key.keysym.scancode;
if(sc >= SDL_SCANCODE_1 && sc <= SDL_SCANCODE_0)
{
Key_Event(event.key.keysym.sym, false, false);
// Note that the SDL_SCANCODEs are SDL_SCANCODE_1, _2, ..., _9, SDL_SCANCODE_0
// while in ASCII it's '0', '1', ..., '9' => handle 0 and 1-9 separately
// (quake2 uses the ASCII values for those keys)
int key = '0'; // implicitly handles SDL_SCANCODE_0
if(sc >= SDL_SCANCODE_1 && sc <= SDL_SCANCODE_9)
{
key = '1' + (sc - SDL_SCANCODE_1);
}
Key_Event(key, down, false);
}
else
#endif // SDL2; SDL1.2 doesn't have scancodes
if ((event.key.keysym.sym >= SDLK_SPACE) &&
(event.key.keysym.sym < SDLK_DELETE))
{
Key_Event(event.key.keysym.sym, down, false);
}
else
{
Key_Event(IN_TranslateSDLtoQ2Key(event.key.keysym.sym), false, true);
Key_Event(IN_TranslateSDLtoQ2Key(event.key.keysym.sym), down, true);
}
}
break;
#if SDL_VERSION_ATLEAST(2, 0, 0)