Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions src/library_sdl.js
Original file line number Diff line number Diff line change
Expand Up @@ -823,13 +823,16 @@ var LibrarySDL = {

lookupKeyCodeForEvent(event) {
var code = event.keyCode;
if (code >= 65 && code <= 90) {
if (code >= 65 && code <= 90) { // ASCII A-Z
code += 32; // make lowercase for SDL
} else {
// Look up DOM code in the keyCodes table with fallback for ASCII codes
// which can match between DOM codes and SDL keycodes (allows keyCodes
// to be smaller).
code = SDL.keyCodes[code] || (code < 128 ? code : 0);
#if RUNTIME_DEBUG
if (!(event.keyCode in SDL.keyCodes)) dbg('unknown keyCode: ', event.keyCode);
if (!code) dbg('unmapped keyCode: ', event.keyCode);
#endif
code = SDL.keyCodes[event.keyCode] || event.keyCode;
// If this is one of the modifier keys (224 | 1<<10 - 227 | 1<<10), and the event specifies that it is
// a right key, add 4 to get the right key SDL key code.
if (event.location === 2 /*KeyboardEvent.DOM_KEY_LOCATION_RIGHT*/ && code >= (224 | 1<<10) && code <= (227 | 1<<10)) {
Expand All @@ -854,6 +857,8 @@ var LibrarySDL = {
case 'keyup': {
var down = event.type === 'keydown';
var code = SDL.lookupKeyCodeForEvent(event);
// Ignore key events that we don't (yet) map to SDL keys
if (!code) return;
#if !SAFE_HEAP
// Assigning a boolean to HEAP8, that's alright but Closure would like to warn about it.
// TODO(https://github.com/emscripten-core/emscripten/issues/16311):
Expand Down Expand Up @@ -938,6 +943,8 @@ var LibrarySDL = {
dbg(`received ${event.type} event: keyCode=${event.keyCode}, key=${event.key}, code=${event.code}`);
#endif
var key = SDL.lookupKeyCodeForEvent(event);
// Ignore key events that we don't (yet) map to SDL keys
if (!key) return false;
var scan;
if (key >= 1024) {
scan = key - 1024;
Expand Down
4 changes: 2 additions & 2 deletions test/browser/test_sdl_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ int main(int argc, char **argv) {

emscripten_set_main_loop(one, 0, 0);

EM_ASM({keydown(1250);keydown(38);keyup(38);keyup(1250);}); // alt, up
EM_ASM({keydown(1248);keydown(1249);keydown(40);keyup(40);keyup(1249);keyup(1248);}); // ctrl, shift, down
EM_ASM({keydown(18);keydown(38);keyup(38);keyup(18);}); // alt, up
EM_ASM({keydown(17);keydown(16);keydown(40);keyup(40);keyup(16);keyup(17);}); // ctrl, shift, down
EM_ASM({keydown(37);keyup(37);}); // left
EM_ASM({keydown(39);keyup(39);}); // right

Expand Down
4 changes: 2 additions & 2 deletions test/test_browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -990,8 +990,8 @@ def post():
html = html.replace('</body>', '''
<script src='fake_events.js'></script>
<script>
simulateKeyDown(1250);simulateKeyDown(38);simulateKeyUp(38);simulateKeyUp(1250); // alt, up
simulateKeyDown(1248);simulateKeyDown(1249);simulateKeyDown(40);simulateKeyUp(40);simulateKeyUp(1249);simulateKeyUp(1248); // ctrl, shift, down
simulateKeyDown(18);simulateKeyDown(38);simulateKeyUp(38);simulateKeyUp(18); // alt, up
simulateKeyDown(17);simulateKeyDown(16);simulateKeyDown(40);simulateKeyUp(40);simulateKeyUp(16);simulateKeyUp(17); // ctrl, shift, down
simulateKeyDown(37);simulateKeyUp(37); // left
simulateKeyDown(39);simulateKeyUp(39); // right
simulateKeyDown(65);simulateKeyUp(65); // a
Expand Down
Loading