diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-04-08 09:34:51 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-04-08 09:34:51 -0700 |
commit | 0a1110333ae81557e6319f2109bc591f834dbc16 (patch) | |
tree | e9aec0920e55d529b5b1133c1f37b3fe384c1ece | |
parent | c78357cce927d3ffc80fcafabc3cd20cf2751d38 (diff) |
support for sdl scancodes
-rw-r--r-- | src/library_sdl.js | 51 | ||||
-rwxr-xr-x | tests/runner.py | 2 | ||||
-rw-r--r-- | tests/sdl_key.c | 9 |
3 files changed, 59 insertions, 3 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index a6c5c559..3ea8fe50 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -108,6 +108,54 @@ mergeInto(LibraryManager.library, { 16: 304 // shift }, + scanCodes: { // SDL keycode ==> SDL scancode + 97: 4, // A + 98: 5, + 99: 6, + 100: 7, + 101: 8, + 102: 9, + 103: 10, + 104: 11, + 105: 12, + 106: 13, + 107: 14, + 108: 15, + 109: 16, + 110: 17, + 111: 18, + 112: 19, + 113: 20, + 114: 21, + 115: 22, + 116: 23, + 117: 24, + 118: 25, + 119: 26, + 120: 27, + 121: 28, + 122: 29, // Z + 48: 30, // 0 + 49: 31, + 50: 32, + 51: 33, + 52: 34, + 53: 35, + 54: 36, + 55: 37, + 56: 38, + 57: 39, // 9 + 13: 40, // return + 9: 43, // tab + 32: 44, // space + 92: 49, // backslash + 47: 56, // slash + 1106: 82, // up arrow + 1105: 81, // down arrow + 1104: 80, // left arrow + 1103: 79 // right arrow + }, + structs: { Rect: Runtime.generateStructInfo([ ['i32', 'x'], ['i32', 'y'], ['i32', 'w'], ['i32', 'h'], @@ -309,12 +357,13 @@ mergeInto(LibraryManager.library, { if (key >= 65 && key <= 90) { key = String.fromCharCode(key).toLowerCase().charCodeAt(0); } + var scan = SDL.scanCodes[key] || key; {{{ makeSetValue('ptr', 'SDL.structs.KeyboardEvent.type', 'down ? 0x300 : 0x301', 'i32') }}} //{{{ makeSetValue('ptr', 'SDL.structs.KeyboardEvent.which', '1', 'i32') }}} {{{ makeSetValue('ptr', 'SDL.structs.KeyboardEvent.state', 'down ? 1 : 0', 'i8') }}} {{{ makeSetValue('ptr', 'SDL.structs.KeyboardEvent.repeat', '0', 'i8') }}} // TODO - {{{ makeSetValue('ptr', 'SDL.structs.KeyboardEvent.keysym + SDL.structs.keysym.scancode', 'key', 'i8') }}} + {{{ makeSetValue('ptr', 'SDL.structs.KeyboardEvent.keysym + SDL.structs.keysym.scancode', 'scan', 'i8') }}} {{{ makeSetValue('ptr', 'SDL.structs.KeyboardEvent.keysym + SDL.structs.keysym.sym', 'key', 'i32') }}} {{{ makeSetValue('ptr', 'SDL.structs.KeyboardEvent.keysym + SDL.structs.keysym.mod', '0', 'i32') }}} //{{{ makeSetValue('ptr', 'SDL.structs.KeyboardEvent.keysym + SDL.structs.keysym.unicode', 'key', 'i32') }}} diff --git a/tests/runner.py b/tests/runner.py index 03ec803f..d13815f3 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -6866,7 +6866,7 @@ elif 'browser' in str(sys.argv): open(os.path.join(self.get_dir(), 'sdl_key.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_key.c')).read())) Popen(['python', EMCC, os.path.join(self.get_dir(), 'sdl_key.c'), '-o', 'page.html', '--pre-js', 'pre.js']).communicate() - self.run_browser('page.html', '', '/report_result?30030') + self.run_browser('page.html', '', '/report_result?510510') def test_sdl_mouse(self): open(os.path.join(self.get_dir(), 'pre.js'), 'w').write(''' diff --git a/tests/sdl_key.c b/tests/sdl_key.c index 633e975f..6a5ad694 100644 --- a/tests/sdl_key.c +++ b/tests/sdl_key.c @@ -19,7 +19,13 @@ void one() { case SDLK_UP: printf("up\n"); result *= 7; break; case SDLK_SPACE: printf("space\n"); result *= 11; break; case SDLK_a: printf("a\n"); result *= 13; break; - default: { REPORT_RESULT(); emscripten_run_script("throw 'done'"); } + default: { + if (event.key.keysym.scancode == SDL_SCANCODE_B) { + printf("b scancode\n"); result *= 17; break; + } + REPORT_RESULT(); + emscripten_run_script("throw 'done'"); + } } break; default: /* Report an unhandled event */ @@ -38,6 +44,7 @@ int main(int argc, char **argv) { emscripten_run_script("simulateKeyEvent(39)"); emscripten_run_script("simulateKeyEvent(32)"); emscripten_run_script("simulateKeyEvent(97)"); + emscripten_run_script("simulateKeyEvent(98)"); emscripten_run_script("simulateKeyEvent(100)"); // trigger the end if (argc == 1337) one(); // keep it alive |