diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-06-17 10:34:17 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-06-17 10:34:17 -0700 |
commit | 8f371ae5c3aeebb018e2e0c60f4c2f27e2b36837 (patch) | |
tree | a499c9e7f2c56aa9be8f5f1e80c4b534a412c8d4 | |
parent | 045eaebb7211eff633df80b5d44126ffbc260772 (diff) | |
parent | a69f74fab0f71c3c50bb97370abff621fee0b450 (diff) |
Merge pull request #474 from ehsan/mouselockmovement
Fix the mouse coordinates in pointer lock mode
-rw-r--r-- | src/library_browser.js | 10 | ||||
-rw-r--r-- | src/library_sdl.js | 21 |
2 files changed, 21 insertions, 10 deletions
diff --git a/src/library_browser.js b/src/library_browser.js index 59d37336..9283913f 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -128,20 +128,18 @@ mergeInto(LibraryManager.library, { window.requestAnimationFrame(func); }, - getMovementX: function(delta, event) { - if (!Browser.pointerLock) return delta; + getMovementX: function(event) { return event['movementX'] || event['mozMovementX'] || event['webkitMovementX'] || - 0; // delta; + 0; }, - getMovementY: function(delta, event) { - if (!Browser.pointerLock) return delta; + getMovementY: function(event) { return event['movementY'] || event['mozMovementY'] || event['webkitMovementY'] || - 0; // delta; + 0; }, asyncLoad: function(url, callback) { diff --git a/src/library_sdl.js b/src/library_sdl.js index 6575c334..41898056 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -439,8 +439,21 @@ var LibrarySDL = { } // fall through case 'mousemove': { - var x = event.pageX - Module['canvas'].offsetLeft; - var y = event.pageY - Module['canvas'].offsetTop; + if (Browser.pointerLock) { + // When the pointer is locked, calculate the coordinates + // based on the movement of the mouse. + var movementX = Browser.getMovementX(event); + var movementY = Browser.getMovementY(event); + var x = SDL.mouseX + movementX; + var y = SDL.mouseY + movementY; + } 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 movementX = x - SDL.mouseX; + var movementY = y - SDL.mouseY; + } if (event.type != 'mousemove') { var down = event.type === 'mousedown'; {{{ makeSetValue('ptr', 'SDL.structs.MouseButtonEvent.type', 'SDL.DOMEventToSDLEvent[event.type]', 'i32') }}}; @@ -453,8 +466,8 @@ var LibrarySDL = { {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.state', 'SDL.buttonState', 'i8') }}}; {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.x', 'x', 'i32') }}}; {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.y', 'y', 'i32') }}}; - {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.xrel', 'Browser.getMovementX(x - SDL.mouseX, event)', 'i32') }}}; - {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.yrel', 'Browser.getMovementY(y - SDL.mouseY, event)', 'i32') }}}; + {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.xrel', 'movementX', 'i32') }}}; + {{{ makeSetValue('ptr', 'SDL.structs.MouseMotionEvent.yrel', 'movementY', 'i32') }}}; } SDL.mouseX = x; SDL.mouseY = y; |