Properly handle shifted keys. Allow ignoring keyboard modifiers.

This commit is contained in:
Maurizio Porrato 2020-04-29 22:48:44 +01:00
parent 07b5b504ae
commit 7232d1bf6f
1 changed files with 18 additions and 9 deletions

View File

@ -59,6 +59,8 @@ uint8_t kbuf[KBUF_SIZE];
uint8_t khead, klen; uint8_t khead, klen;
uint16_t kint; uint16_t kint;
bool ignore_modifiers = false;
void update_glyph_tiles() void update_glyph_tiles()
{ {
SDL_SetSurfacePalette(glyph_shapes, palette); SDL_SetSurfacePalette(glyph_shapes, palette);
@ -160,15 +162,14 @@ void lem1802_free()
// SDL_Quit(); // SDL_Quit();
} }
void process_key(SDL_KeyboardEvent *ke) void process_key(SDL_Event *e)
{ {
uint8_t k=0; uint8_t k=0;
if ((ke->keysym.sym >= 0x20) && (ke->keysym.sym <= 0x7f)) { if ((e->type == SDL_TEXTINPUT) && (e->text.text[0] >= 0x20) && (e->text.text[0] <= 0x7f))
k = ke->keysym.sym; k = e->text.text[0];
// printf("sym=%d mod=%d\n", k, ke->keysym.mod); else if (e->type == SDL_KEYDOWN) {
} else { switch (e->key.keysym.sym) {
switch (ke->keysym.sym) {
case SDLK_BACKSPACE: case SDLK_BACKSPACE:
k = 0x10; k = 0x10;
break; break;
@ -196,11 +197,13 @@ void process_key(SDL_KeyboardEvent *ke)
break; break;
case SDLK_LSHIFT: case SDLK_LSHIFT:
case SDLK_RSHIFT: case SDLK_RSHIFT:
k = 0x90; if (!ignore_modifiers)
k = 0x90;
break; break;
case SDLK_LCTRL: case SDLK_LCTRL:
case SDLK_RCTRL: case SDLK_RCTRL:
k = 0x91; if (!ignore_modifiers)
k = 0x91;
break; break;
default: default:
break; break;
@ -240,8 +243,14 @@ void lem1802_tick()
else if (e.key.keysym.sym == SDLK_F11) { else if (e.key.keysym.sym == SDLK_F11) {
update_font(); update_font();
update_palette(); update_palette();
} else if (e.key.keysym.sym == SDLK_F10) {
ignore_modifiers = !ignore_modifiers;
} else } else
process_key(&e.key); process_key(&e);
}
if (e.type == SDL_TEXTINPUT) {
// printf("Text input: %s\n", &e.text.text);
process_key(&e);
} }
} }