diff options
Diffstat (limited to 'src/library_sdl.js')
-rw-r--r-- | src/library_sdl.js | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index 3dbb9a33..77305609 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -35,6 +35,7 @@ var LibrarySDL = { mixerFormat: 0x8010, // AUDIO_S16LSB mixerNumChannels: 2, mixerChunkSize: 1024, + channelMinimumNumber: 0, GL: false, // Set to true if we call SDL_SetVideoMode with SDL_OPENGL, and if so, we do not create 2D canvases&contexts for blitting // Note that images loaded before SDL_SetVideoMode will not get this optimization @@ -442,6 +443,23 @@ var LibrarySDL = { return false; }, + offsetsTemp: { left: 0, top: 0 }, // temporary object to avoid generating garbage in offsets(). assumes the object is not captured + + offsets: function(element) { + var left = 0; + var top = 0; + + do { + left += element.offsetLeft; + top += element.offsetTop; + } while (element = element.offsetParent) + + var ret = SDL.offsetsTemp; + ret.left = left; + ret.top = top; + return ret; + }, + makeCEvent: function(event, ptr) { if (typeof event === 'number') { // This is a pointer to a native C event that was SDL_PushEvent'ed @@ -523,8 +541,9 @@ var LibrarySDL = { } else { // Otherwise, calculate the movement based on the changes // in the coordinates. - var x = event.pageX - Module["canvas"].offsetLeft; - var y = event.pageY - Module["canvas"].offsetTop; + var offsets = SDL.offsets(Module["canvas"]); + var x = event.pageX - offsets.left; + var y = event.pageY - offsets.top; var movementX = x - SDL.mouseX; var movementY = y - SDL.mouseY; } @@ -911,10 +930,11 @@ var LibrarySDL = { SDL_WarpMouse: function(x, y) { return; // TODO: implement this in a non-buggy way. Need to keep relative mouse movements correct after calling this + var offsets = SDL.offsets(Module["canvas"]); SDL.events.push({ type: 'mousemove', - pageX: x + Module['canvas'].offsetLeft, - pageY: y + Module['canvas'].offsetTop + pageX: x + offsets.left, + pageY: y + offsets.top }); }, @@ -1235,7 +1255,6 @@ var LibrarySDL = { Mix_Init: function(flags) { if (!flags) return 0; - SDL.channelMinimumNumber = 0; return 8; /* MIX_INIT_OGG */ }, Mix_Quit: function(){}, |