diff --git a/src/library_sdl.js b/src/library_sdl.js index 1ca991b5755d2..37af01af3f00b 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -1767,9 +1767,16 @@ var LibrarySDL = { SDL_GetKeyState: () => _SDL_GetKeyboardState(0), SDL_GetKeyName__proxy: 'sync', - SDL_GetKeyName__deps: ['$stringToNewUTF8'], + SDL_GetKeyName__deps: ['$stringToUTF8', 'realloc'], SDL_GetKeyName: (key) => { - SDL.keyName ||= stringToNewUTF8('unknown key'); + var name = ''; + /* ASCII A-Z or 0-9 */ + if ((key >= 97 && key <= 122) || (key >= 48 && key <= 57)) { + name = String.fromCharCode(key); + } + var size = lengthBytesUTF8(name) + 1; + SDL.keyName = _realloc(SDL.keyName, size); + stringToUTF8(name, SDL.keyName, size); return SDL.keyName; }, diff --git a/test/browser/test_sdl_key_test.c b/test/browser/test_sdl_key_test.c index 84a8b9b974144..3dafe423b4a07 100644 --- a/test/browser/test_sdl_key_test.c +++ b/test/browser/test_sdl_key_test.c @@ -7,8 +7,9 @@ #include #include -#include +#ifdef __EMSCRIPTEN__ #include +#endif int result = 1; @@ -21,13 +22,13 @@ void one() { case SDL_KEYDOWN: if (!keys[event.key.keysym.sym]) { keys[event.key.keysym.sym] = 1; - printf("key down: sym %d scancode %d\n", event.key.keysym.sym, event.key.keysym.scancode); + printf("key down: sym=%d scancode=%d name=%s\n", event.key.keysym.sym, event.key.keysym.scancode, SDL_GetKeyName(event.key.keysym.sym)); } break; case SDL_KEYUP: if (keys[event.key.keysym.sym]) { keys[event.key.keysym.sym] = 0; - printf("key up: sym %d scancode %d\n", event.key.keysym.sym, event.key.keysym.scancode); + printf("key up: sym=%d scancode=%d name=%s\n", event.key.keysym.sym, event.key.keysym.scancode, SDL_GetKeyName(event.key.keysym.sym)); } break; } @@ -40,7 +41,11 @@ int main(int argc, char **argv) { SDL_Init(SDL_INIT_VIDEO); SDL_Surface *screen = SDL_SetVideoMode(600, 450, 32, SDL_HWSURFACE); +#if __EMSCRIPTEN__ emscripten_set_main_loop(one, 0, 0); +#else + while (1) one(); +#endif return 0; } diff --git a/test/test_other.py b/test/test_other.py index 95d94418396dd..bd1857ffba167 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -2392,6 +2392,28 @@ def test_sdl_scan_code_from_key(self): ''') self.do_runf('main.c', '204\n') + def test_sdl_get_key_name(self): + create_file('main.c', r''' + #include + #include + + int main() { + printf("a -> '%s'\n", SDL_GetKeyName(SDLK_a)); + printf("z -> '%s'\n", SDL_GetKeyName(SDLK_z)); + printf("0 -> '%s'\n", SDL_GetKeyName(SDLK_0)); + printf("0 -> '%s'\n", SDL_GetKeyName(SDLK_9)); + printf("F1 -> '%s'\n", SDL_GetKeyName(SDLK_F1)); + return 0; + } + ''') + self.do_runf('main.c', '''\ +a -> 'a' +z -> 'z' +0 -> '0' +0 -> '9' +F1 -> '' +''') + @requires_network def test_sdl2_mixer_wav(self): self.emcc(test_file('browser/test_sdl2_mixer_wav.c'), ['-sUSE_SDL_MIXER=2'], output_filename='a.out.js')