|
@@ -26,6 +26,7 @@ class Window {
|
|
|
|
|
|
var curMouseX : Float = 0.;
|
|
|
var curMouseY : Float = 0.;
|
|
|
+ var _mouseLock : Bool = false;
|
|
|
|
|
|
var canvas : js.html.CanvasElement;
|
|
|
var element : js.html.EventTarget;
|
|
@@ -73,10 +74,15 @@ class Window {
|
|
|
canvasPos = canvas.getBoundingClientRect();
|
|
|
// add mousemove on window (track mouse even when outside of component)
|
|
|
// unless we're having a custom canvas (prevent leaking the listener)
|
|
|
- if( customCanvas )
|
|
|
+ if( customCanvas ) {
|
|
|
canvas.addEventListener("mousemove", onMouseMove);
|
|
|
- else
|
|
|
+ }
|
|
|
+
|
|
|
+ else {
|
|
|
js.Browser.window.addEventListener("mousemove", onMouseMove);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
element.addEventListener("mousedown", onMouseDown);
|
|
|
element.addEventListener("mouseup", onMouseUp);
|
|
|
element.addEventListener("wheel", onMouseWheel);
|
|
@@ -215,12 +221,21 @@ class Window {
|
|
|
}
|
|
|
|
|
|
function get_mouseLock() : Bool {
|
|
|
- return false;
|
|
|
+ return _mouseLock;
|
|
|
}
|
|
|
|
|
|
function set_mouseLock( v : Bool ) : Bool {
|
|
|
- if( v ) throw "Not implemented";
|
|
|
- return false;
|
|
|
+ var customCanvas = canvas != null;
|
|
|
+ if (v) {
|
|
|
+ if (customCanvas) canvas.requestPointerLock();
|
|
|
+ else js.Browser.window.document.documentElement.requestPointerLock();
|
|
|
+ }
|
|
|
+
|
|
|
+ else {
|
|
|
+ if (customCanvas) canvas.ownerDocument.exitPointerLock();
|
|
|
+ else js.Browser.window.document.exitPointerLock();
|
|
|
+ }
|
|
|
+ return _mouseLock = v;
|
|
|
}
|
|
|
|
|
|
function get_vsync() : Bool return true;
|
|
@@ -231,8 +246,14 @@ class Window {
|
|
|
}
|
|
|
|
|
|
function onMouseDown(e:js.html.MouseEvent) {
|
|
|
- if(e.clientX != curMouseX || e.clientY != curMouseY)
|
|
|
- onMouseMove(e);
|
|
|
+ if (mouseLock) {
|
|
|
+ if (e.movementX != 0 || e.movementY != 0)
|
|
|
+ onMouseMove(e);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if(e.clientX != curMouseX || e.clientY != curMouseY)
|
|
|
+ onMouseMove(e);
|
|
|
+ }
|
|
|
var ev = new Event(EPush, mouseX, mouseY);
|
|
|
ev.button = switch( e.button ) {
|
|
|
case 1: 2;
|
|
@@ -243,8 +264,14 @@ class Window {
|
|
|
}
|
|
|
|
|
|
function onMouseUp(e:js.html.MouseEvent) {
|
|
|
- if(e.clientX != curMouseX || e.clientY != curMouseY)
|
|
|
- onMouseMove(e);
|
|
|
+ if (mouseLock) {
|
|
|
+ if (e.movementX != 0 || e.movementY != 0)
|
|
|
+ onMouseMove(e);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if(e.clientX != curMouseX || e.clientY != curMouseY)
|
|
|
+ onMouseMove(e);
|
|
|
+ }
|
|
|
var ev = new Event(ERelease, mouseX, mouseY);
|
|
|
ev.button = switch( e.button ) {
|
|
|
case 1: 2;
|
|
@@ -255,8 +282,15 @@ class Window {
|
|
|
}
|
|
|
|
|
|
function onMouseMove(e:js.html.MouseEvent) {
|
|
|
- curMouseX = e.clientX;
|
|
|
- curMouseY = e.clientY;
|
|
|
+ if (mouseLock) {
|
|
|
+ curMouseX += e.movementX;
|
|
|
+ curMouseY += e.movementY;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ curMouseX = e.clientX;
|
|
|
+ curMouseY = e.clientY;
|
|
|
+ }
|
|
|
+
|
|
|
event(new Event(EMove, mouseX, mouseY));
|
|
|
}
|
|
|
|