Properly handle shifted keys. Allow ignoring keyboard modifiers.
This commit is contained in:
parent
07b5b504ae
commit
7232d1bf6f
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue