aboutsummaryrefslogtreecommitdiff
path: root/src/library_sdl.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-04-17 21:18:17 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-04-17 21:18:17 -0700
commit327b6f859e95be71e5613f24cc1c9d4f4b97c15f (patch)
tree2e20c2261892aa04cdcc7b8a901d9cc020621ba7 /src/library_sdl.js
parent735637e9a10049f69525d57d3e50f4ad0b90850e (diff)
some support for SDL_PeepEvents
Diffstat (limited to 'src/library_sdl.js')
-rw-r--r--src/library_sdl.js36
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) {