aboutsummaryrefslogtreecommitdiff
path: root/src/library_sdl.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/library_sdl.js')
-rw-r--r--src/library_sdl.js46
1 files changed, 36 insertions, 10 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js
index 7145a7ba..53adf8eb 100644
--- a/src/library_sdl.js
+++ b/src/library_sdl.js
@@ -84,6 +84,9 @@ var LibrarySDL = {
TOUCH_DEFAULT_ID: 0, // Our default deviceID for touch events (we get nothing from the browser)
+ eventHandler: null,
+ eventHandlerContext: null,
+
keyCodes: { // DOM code ==> SDL code. See https://developer.mozilla.org/en/Document_Object_Model_%28DOM%29/KeyboardEvent and SDL_keycode.h
// For keys that don't have unicode value, we map DOM codes with the corresponding scan codes + 1024 (using "| 1 << 10")
16: 225 | 1<<10, // shift
@@ -699,6 +702,9 @@ var LibrarySDL = {
Module.printErr('SDL event queue full, dropping events');
SDL.events = SDL.events.slice(0, 10000);
}
+ // If we have a handler installed, this will push the events to the app
+ // instead of the app polling for them.
+ SDL.flushEventsToHandler();
return;
},
@@ -749,6 +755,30 @@ var LibrarySDL = {
}
}
},
+ flushEventsToHandler: function() {
+ if (!SDL.eventHandler) {
+ return;
+ }
+
+ // All SDLEvents take the same amount of memory
+ var sdlEventPtr = allocate({{{ C_STRUCTS.SDL_KeyboardEvent.__size__ }}}, "i8", ALLOC_STACK);
+
+ while (SDL.pollEvent(sdlEventPtr)) {
+ Runtime.dynCall('iii', SDL.eventHandler, [SDL.eventHandlerContext, sdlEventPtr]);
+ }
+ },
+ pollEvent: function(ptr) {
+ if (SDL.initFlags & 0x200 && SDL.joystickEventState) {
+ // If SDL_INIT_JOYSTICK was supplied AND the joystick system is configured
+ // to automatically query for events, query for joystick events.
+ SDL.queryJoysticks();
+ }
+ if (SDL.events.length === 0) return 0;
+ if (ptr) {
+ SDL.makeCEvent(SDL.events.shift(), ptr);
+ }
+ return 1;
+ },
makeCEvent: function(event, ptr) {
if (typeof event === 'number') {
@@ -1709,16 +1739,7 @@ var LibrarySDL = {
},
SDL_PollEvent: function(ptr) {
- if (SDL.initFlags & 0x200 && SDL.joystickEventState) {
- // If SDL_INIT_JOYSTICK was supplied AND the joystick system is configured
- // to automatically query for events, query for joystick events.
- SDL.queryJoysticks();
- }
- if (SDL.events.length === 0) return 0;
- if (ptr) {
- SDL.makeCEvent(SDL.events.shift(), ptr);
- }
- return 1;
+ return SDL.pollEvent(ptr);
},
SDL_PushEvent: function(ptr) {
@@ -1758,6 +1779,11 @@ var LibrarySDL = {
SDL.handleEvent(event);
});
},
+
+ SDL_SetEventHandler: function(_handler, _userdata){
+ SDL.eventHandler = _handler;
+ SDL.eventHandlerContext = _userdata;
+ },
SDL_SetColors: function(surf, colors, firstColor, nColors) {
var surfData = SDL.surfaces[surf];