aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-04-08 09:34:51 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-04-08 09:34:51 -0700
commit0a1110333ae81557e6319f2109bc591f834dbc16 (patch)
treee9aec0920e55d529b5b1133c1f37b3fe384c1ece
parentc78357cce927d3ffc80fcafabc3cd20cf2751d38 (diff)
support for sdl scancodes
-rw-r--r--src/library_sdl.js51
-rwxr-xr-xtests/runner.py2
-rw-r--r--tests/sdl_key.c9
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