From 7232d1bf6fc58a8f49786b471730b1d6f460c5bd Mon Sep 17 00:00:00 2001 From: Maurizio Porrato Date: Wed, 29 Apr 2020 22:48:44 +0100 Subject: [PATCH] Properly handle shifted keys. Allow ignoring keyboard modifiers. --- dev_lem1802.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/dev_lem1802.c b/dev_lem1802.c index a55a3a3..969eedd 100644 --- a/dev_lem1802.c +++ b/dev_lem1802.c @@ -59,6 +59,8 @@ uint8_t kbuf[KBUF_SIZE]; uint8_t khead, klen; uint16_t kint; +bool ignore_modifiers = false; + void update_glyph_tiles() { SDL_SetSurfacePalette(glyph_shapes, palette); @@ -160,15 +162,14 @@ void lem1802_free() // SDL_Quit(); } -void process_key(SDL_KeyboardEvent *ke) +void process_key(SDL_Event *e) { uint8_t k=0; - if ((ke->keysym.sym >= 0x20) && (ke->keysym.sym <= 0x7f)) { - k = ke->keysym.sym; - // printf("sym=%d mod=%d\n", k, ke->keysym.mod); - } else { - switch (ke->keysym.sym) { + if ((e->type == SDL_TEXTINPUT) && (e->text.text[0] >= 0x20) && (e->text.text[0] <= 0x7f)) + k = e->text.text[0]; + else if (e->type == SDL_KEYDOWN) { + switch (e->key.keysym.sym) { case SDLK_BACKSPACE: k = 0x10; break; @@ -196,11 +197,13 @@ void process_key(SDL_KeyboardEvent *ke) break; case SDLK_LSHIFT: case SDLK_RSHIFT: - k = 0x90; + if (!ignore_modifiers) + k = 0x90; break; case SDLK_LCTRL: case SDLK_RCTRL: - k = 0x91; + if (!ignore_modifiers) + k = 0x91; break; default: break; @@ -240,8 +243,14 @@ void lem1802_tick() else if (e.key.keysym.sym == SDLK_F11) { update_font(); update_palette(); + } else if (e.key.keysym.sym == SDLK_F10) { + ignore_modifiers = !ignore_modifiers; } else - process_key(&e.key); + process_key(&e); + } + if (e.type == SDL_TEXTINPUT) { + // printf("Text input: %s\n", &e.text.text); + process_key(&e); } }