diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-04-17 21:18:17 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-04-17 21:18:17 -0700 |
commit | 327b6f859e95be71e5613f24cc1c9d4f4b97c15f (patch) | |
tree | 2e20c2261892aa04cdcc7b8a901d9cc020621ba7 /src/library_sdl.js | |
parent | 735637e9a10049f69525d57d3e50f4ad0b90850e (diff) |
some support for SDL_PeepEvents
Diffstat (limited to 'src/library_sdl.js')
-rw-r--r-- | src/library_sdl.js | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index ccc2c590..f71527af 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -96,6 +96,14 @@ var LibrarySDL = { mouseX: 0, mouseY: 0, + DOMEventToSDLEvent: { + 'keydown': 0x300, + 'keyup': 0x301, + 'mousedown': 0x401, + 'mouseup': 0x402, + 'mousemove': 0x400 + }, + keyCodes: { // DOM code ==> SDL code 38: 1106, // up arrow 40: 1105, // down arrow @@ -334,7 +342,7 @@ var LibrarySDL = { makeCEvent: function(event, ptr) { if (typeof event === 'number') { // This is a pointer to a native C event that was SDL_PushEvent'ed - _memcpy(ptr, event, SDL.structs.KeyboardEvent.__size__); + _memcpy(ptr, event, SDL.structs.KeyboardEvent.__size__); // XXX return; } @@ -347,7 +355,7 @@ var LibrarySDL = { 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.type', 'SDL.DOMEventToSDLEvent[event.type]', '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 @@ -366,13 +374,13 @@ var LibrarySDL = { var y = event.pageY - Module['canvas'].offsetTop; if (event.type != 'mousemove') { var down = event.type === 'mousedown'; - {{{ makeSetValue('ptr', 'SDL.structs.MouseButtonEvent.type', 'down ? 0x401 : 0x402', 'i32') }}}; + {{{ makeSetValue('ptr', 'SDL.structs.MouseButtonEvent.type', 'SDL.DOMEventToSDLEvent[event.type]', 'i32') }}}; {{{ makeSetValue('ptr', 'SDL.structs.MouseButtonEvent.button', 'event.button+1', 'i8') }}}; // DOM buttons are 0-2, SDL 1-3 {{{ makeSetValue('ptr', 'SDL.structs.MouseButtonEvent.state', 'down ? 1 : 0', 'i8') }}}; {{{ makeSetValue('ptr', 'SDL.structs.MouseButtonEvent.x', 'x', 'i32') }}}; {{{ makeSetValue('ptr', 'SDL.structs.MouseButtonEvent.y', 'y', 'i32') }}}; } else { - {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.type', '0x400', 'i32') }}}; + {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.type', 'SDL.DOMEventToSDLEvent[event.type]', 'i32') }}}; {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.button', 'event.button', 'i8') }}}; {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.state', 'down ? 1 : 0', 'i8') }}}; {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.x', 'x', 'i32') }}}; @@ -684,10 +692,28 @@ var LibrarySDL = { SDL_PushEvent: function(ptr) { SDL.events.push(ptr); // XXX Should we copy it? Not clear from API - return 0; }, + SDL_PeepEvents: function(events, numEvents, action, from, to) { + switch(action) { + case 2: { // SDL_GETEVENT + assert(numEvents == 1); + var got = 0; + while (SDL.events.length > 0 && numEvents > 0) { + var type = SDL.DOMEventToSDLEvent[SDL.events[0].type]; + if (type < from || type > to) break; + SDL.makeCEvent(SDL.events.shift(), events); + got++; + numEvents--; + // events += sizeof(..) + } + return got; + } + default: throw 'SDL_PeepEvents does not yet support that action: ' + action; + } + }, + SDL_PumpEvents: function(){}, SDL_SetColors: function(surf, colors, firstColor, nColors) { |