Browse Source

Stage: expose isFocused and send focus events (hl / js only)

trethaller 7 năm trước cách đây
mục cha
commit
e307c59bac
4 tập tin đã thay đổi với 25 bổ sung0 xóa
  1. 2 0
      hxd/Stage.flash.hx
  2. 9 0
      hxd/Stage.hl.hx
  3. 3 0
      hxd/Stage.hx
  4. 11 0
      hxd/Stage.js.hx

+ 2 - 0
hxd/Stage.flash.hx

@@ -11,6 +11,7 @@ class Stage {
 	public var mouseY(get, never) : Int;
 	public var mouseLock(get, set) : Bool;
 	public var vsync(get, set) : Bool;
+	public var isFocused(get, never) : Bool;
 
 	// FLASH
 	var stage : flash.display.Stage;
@@ -291,6 +292,7 @@ class Stage {
 		event(ev);
 	}
 
+	function get_isFocused() : Bool return false;
 
 }
 

+ 9 - 0
hxd/Stage.hl.hx

@@ -17,6 +17,7 @@ class Stage {
 	public var mouseY(get, never) : Int;
 	public var mouseLock(get, set) : Bool;
 	public var vsync(get, set) : Bool;
+	public var isFocused(get, never) : Bool;
 
 	#if hlsdl
 	var window : sdl.Window;
@@ -128,6 +129,8 @@ class Stage {
 		return b;
 	}
 
+	function get_isFocused() : Bool return !wasBlurred;
+
 	var wasBlurred : Bool;
 
 	function onEvent( e : #if hldx dx.Event #else sdl.Event #end ) : Bool {
@@ -148,8 +151,10 @@ class Stage {
 				}
 				#end
 				wasBlurred = false;
+				event(new Event(EFocus));
 			case Blur:
 				wasBlurred = true;
+				event(new Event(EFocusLost));
 				#if hldx
 				// release all keys
 				var ev = new Event(EKeyUp);
@@ -314,6 +319,8 @@ class Stage {
 		return haxe.System.vsync = b;
 	}
 
+	function get_isFocused() : Bool return false;
+
 	#else
 
 	function get_vsync() : Bool return true;
@@ -322,6 +329,8 @@ class Stage {
 		return true;
 	}
 
+	function get_isFocused() : Bool return false;
+
 	#end
 
 	static var inst : Stage = null;

+ 3 - 0
hxd/Stage.hx

@@ -11,6 +11,7 @@ class Stage {
 	public var mouseY(get, never) : Int;
 	public var mouseLock(get, set) : Bool;
 	public var vsync(get, set) : Bool;
+	public var isFocused(get, never) : Bool;
 
 	function new() : Void {
 		eventTargets = new List();
@@ -99,4 +100,6 @@ class Stage {
 		return true;
 	}
 
+	function get_isFocused() : Bool return true;
+
 }

+ 11 - 0
hxd/Stage.js.hx

@@ -11,6 +11,7 @@ class Stage {
 	public var mouseY(get, never) : Int;
 	public var mouseLock(get, set) : Bool;
 	public var vsync(get, set) : Bool;
+	public var isFocused(get, never) : Bool;
 
 	var curMouseX : Float = 0.;
 	var curMouseY : Float = 0.;
@@ -23,6 +24,8 @@ class Stage {
 	var curW : Int;
 	var curH : Int;
 
+	var focused = true;
+
 	public function new( ?canvas : js.html.CanvasElement, ?globalEvents ) : Void {
 		eventTargets = new List();
 		resizeEvents = new List();
@@ -44,6 +47,8 @@ class Stage {
 		element.addEventListener("keydown", onKeyDown);
 		element.addEventListener("keyup", onKeyUp);
 		element.addEventListener("keypress", onKeyPress);
+		element.addEventListener("blur", onFocus.bind(false));
+		element.addEventListener("focus", onFocus.bind(true));
 		if( element == canvas ) {
 			canvas.setAttribute("tabindex","1"); // allow focus
 			canvas.style.outline = 'none';
@@ -252,4 +257,10 @@ class Stage {
 		event(ev);
 	}
 
+	function onFocus(b: Bool) {
+		event(new Event(b ? EFocus : EFocusLost));
+		focused = b;
+	}
+
+	function get_isFocused() : Bool return focused;
 }