Browse Source

Fix release click/key outside of scene (#970)

Fix a bug where if the click or a key such as alt, ctrl or shift was hit in a 3d scene then released outside of it, the release event was not captured. Causing to stay locked on a specific edit mode even though the key is released.
Jed974 4 years ago
parent
commit
81623cda19
2 changed files with 13 additions and 0 deletions
  1. 2 0
      hxd/Key.hx
  2. 11 0
      hxd/Window.js.hx

+ 2 - 0
hxd/Key.hx

@@ -227,6 +227,8 @@ class Key {
 			if( e.button < 5 ) keyPressed[e.button] = getFrame();
 		case ERelease:
 			if( e.button < 5 ) keyPressed[e.button] = -getFrame();
+		case EReleaseOutside:
+			keyPressed = [];
 		case EWheel:
 			keyPressed[e.wheelDelta > 0 ? MOUSE_WHEEL_DOWN : MOUSE_WHEEL_UP] = getFrame();
 		default:

+ 11 - 0
hxd/Window.js.hx

@@ -84,6 +84,7 @@ class Window {
 		
 		element.addEventListener("mousedown", onMouseDown);
 		element.addEventListener("mouseup", onMouseUp);
+		element.addEventListener("mouseleave", onMouseLeave);
 		element.addEventListener("wheel", onMouseWheel);
 		element.addEventListener("touchstart", onTouchStart);
 		element.addEventListener("touchmove", onTouchMove);
@@ -277,6 +278,16 @@ class Window {
 		event(ev);
 	}
 
+	function onMouseLeave(e:js.html.MouseEvent) {
+		var ev = new Event(EReleaseOutside, mouseX, mouseY);
+		ev.button = switch( e.button ) {
+			case 1: 2;
+			case 2: 1;
+			case x: x;
+		};
+		event(ev);
+	}
+
 	function onMouseMove(e:js.html.MouseEvent) {
 		if (mouseLock) {
 			curMouseX += e.movementX;