Преглед изворни кода

added displayMode and title property to window. deprecated setFullscreen (#732)

Aksel пре 5 година
родитељ
комит
25416772c3
5 измењених фајлова са 160 додато и 17 уклоњено
  1. 3 2
      h3d/Engine.hx
  2. 47 12
      hxd/Window.flash.hx
  3. 45 3
      hxd/Window.hl.hx
  4. 24 0
      hxd/Window.hx
  5. 41 0
      hxd/Window.js.hx

+ 3 - 2
h3d/Engine.hx

@@ -262,8 +262,9 @@ class Engine {
 
 	function set_fullScreen(v) {
 		fullScreen = v;
-		if( mem != null && hxd.System.getValue(IsWindowed) )
-			window.setFullScreen(v);
+		if( mem != null && hxd.System.getValue(IsWindowed) ) {
+			window.displayMode = v ? Borderless : Windowed;
+		}
 		return v;
 	}
 

+ 47 - 12
hxd/Window.flash.hx

@@ -1,5 +1,12 @@
 package hxd;
 
+enum DisplayMode {
+	Windowed;
+	Borderless;
+	Fullscreen;
+	FullscreenResize;
+}
+
 class Window {
 
 	var resizeEvents : List<Void -> Void>;
@@ -13,6 +20,10 @@ class Window {
 	public var vsync(get, set) : Bool;
 	public var isFocused(get, never) : Bool;
 
+	public var title(get, set) : String;
+	@:isVar
+	public var displayMode(get, set) : DisplayMode;
+
 	// FLASH
 	var stage : flash.display.Stage;
 	var fsDelayed : Bool;
@@ -105,19 +116,10 @@ class Window {
 	public function resize( width : Int, height : Int ) : Void {
 	}
 
+
+	@:deprecated("Use the displayMode property instead")
 	public function setFullScreen( v : Bool ) : Void {
-		var isAir = isAir();
-		var state = v ? (isAir ? flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE : flash.display.StageDisplayState.FULL_SCREEN) : flash.display.StageDisplayState.NORMAL;
-		if( stage.displayState != state ) {
-			var t = flash.Lib.getTimer();
-			// delay first fullsrceen toggle on OSX/Air to prevent the command window to spawn over
-			if( v && isAir && t < 5000 && !fsDelayed && flash.system.Capabilities.os.indexOf("Mac") != -1 ) {
-				fsDelayed = true;
-				haxe.Timer.delay(function() this.setFullScreen(v), 1000);
-				return;
-			}
-			stage.displayState = state;
-		}
+		this.displayMode = v ? Borderless : Windowed;
 	}
 
 	static var inst : Window = null;
@@ -294,5 +296,38 @@ class Window {
 
 	function get_isFocused() : Bool return false;
 
+	function get_displayMode() : DisplayMode {
+		if (stage.displayState == flash.display.StageDisplayState.NORMAL) {
+			return Windowed;
+		}
+
+		return Borderless;
+	}
+
+	function set_displayMode( m : DisplayMode ) : DisplayMode {
+		var fullscreen = m != Windowed;
+		var isAir = isAir();
+		var state = fullscreen ? (isAir ? flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE : flash.display.StageDisplayState.FULL_SCREEN) : flash.display.StageDisplayState.NORMAL;
+		if( stage.displayState != state ) {
+			var t = flash.Lib.getTimer();
+			// delay first fullsrceen toggle on OSX/Air to prevent the command window to spawn over
+			if( fullscreen && isAir && t < 5000 && !fsDelayed && flash.system.Capabilities.os.indexOf("Mac") != -1 ) {
+				fsDelayed = true;
+				haxe.Timer.delay(function() { this.displayMode = m; }, 1000);
+				return m;
+			}
+			stage.displayState = state;
+		}
+
+		return m;
+	}
+
+	function get_title() : String {
+		return "";
+	}
+
+	function set_title( t : String ) : String {
+		return t;
+	}
 }
 

+ 45 - 3
hxd/Window.hl.hx

@@ -5,6 +5,19 @@ import hxd.Key in K;
 #error "You shouldn't use both -lib hlsdl and -lib hldx"
 #end
 
+#if hlsdl
+typedef DisplayMode = sdl.Window.DisplayMode;
+#elseif hldx
+typedef DisplayMode = dx.Window.DisplayMode;
+#else
+enum DisplayMode {
+	Windowed;
+	Borderless;
+	Fullscreen;
+	FullscreenResize;
+}
+#end
+
 //@:coreApi
 class Window {
 
@@ -19,12 +32,13 @@ class Window {
 	public var vsync(get, set) : Bool;
 	public var isFocused(get, never) : Bool;
 
+	public var title(get, set) : String;
+	public var displayMode(get, set) : DisplayMode;
+
 	#if hlsdl
 	var window : sdl.Window;
-	var fullScreenMode : sdl.Window.DisplayMode = Borderless;
 	#elseif hldx
 	var window : dx.Window;
-	var fullScreenMode : dx.Window.DisplayMode = Borderless;
 	#end
 	var windowWidth = 800;
 	var windowHeight = 600;
@@ -94,9 +108,10 @@ class Window {
 		for( f in resizeEvents ) f();
 	}
 
+	@:deprecated("Use the displayMode property instead")
 	public function setFullScreen( v : Bool ) : Void {
 		#if (hldx || hlsdl)
-		window.displayMode = v ? fullScreenMode : Windowed;
+		window.displayMode = v ? Borderless : Windowed;
 		#end
 	}
 
@@ -382,6 +397,33 @@ class Window {
 
 	#end
 
+	function get_displayMode() : DisplayMode {
+		#if (hldx || hlsdl)
+		return window.displayMode;
+		#end
+		return Windowed;
+	}
+
+	function set_displayMode( m : DisplayMode ) : DisplayMode {
+		#if (hldx || hlsdl)
+		window.displayMode = m;
+		#end
+		return displayMode;
+	}
+
+	function get_title() : String {
+		#if (hldx || hlsdl)
+		return window.title;
+		#end
+		return "";
+	}
+	function set_title( t : String ) : String {
+		#if (hldx || hlsdl)
+		return window.title = t;
+		#end
+		return "";
+	}
+
 	static var inst : Window = null;
 	public static function getInstance() : Window {
 		return inst;

+ 24 - 0
hxd/Window.hx

@@ -1,5 +1,12 @@
 package hxd;
 
+enum DisplayMode {
+	Windowed;
+	Borderless;
+	Fullscreen;
+	FullscreenResize;
+}
+
 class Window {
 
 	var resizeEvents : List<Void -> Void>;
@@ -13,6 +20,9 @@ class Window {
 	public var vsync(get, set) : Bool;
 	public var isFocused(get, never) : Bool;
 
+	public var title(get, set) : String;
+	public var displayMode(get, set) : DisplayMode;
+
 	function new() : Void {
 		eventTargets = new List();
 		resizeEvents = new List();
@@ -59,6 +69,7 @@ class Window {
 	public function resize( width : Int, height : Int ) : Void {
 	}
 
+	@:deprecated("Use the displayMode property instead")
 	public function setFullScreen( v : Bool ) : Void {
 	}
 
@@ -102,4 +113,17 @@ class Window {
 
 	function get_isFocused() : Bool return true;
 
+	function get_displayMode() : DisplayMode {
+		return Windowed;
+	}
+	function set_displayMode( m : DisplayMode ) : DisplayMode {
+		return m;
+	}
+
+	function get_title() : String {
+		return "";
+	}
+	function set_title( t : String ) : String {
+		return t;
+	}
 }

+ 41 - 0
hxd/Window.js.hx

@@ -1,5 +1,12 @@
 package hxd;
 
+enum DisplayMode {
+	Windowed;
+	Borderless;
+	Fullscreen;
+	FullscreenResize;
+}
+
 class Window {
 
 	var resizeEvents : List<Void -> Void>;
@@ -14,6 +21,9 @@ class Window {
 	public var isFocused(get, never) : Bool;
 	public var propagateKeyEvents : Bool;
 
+	public var title(get, set) : String;
+	public var displayMode(get, set) : DisplayMode;
+
 	var curMouseX : Float = 0.;
 	var curMouseY : Float = 0.;
 
@@ -157,6 +167,7 @@ class Window {
 	public function resize( width : Int, height : Int ) : Void {
 	}
 
+	@:deprecated("Use the displayMode property instead")
 	public function setFullScreen( v : Bool ) : Void {
 		var doc = js.Browser.document;
 		var elt : Dynamic = doc.documentElement;
@@ -333,4 +344,34 @@ class Window {
 	}
 
 	function get_isFocused() : Bool return focused;
+
+	function get_displayMode() : DisplayMode {
+		var doc = js.Browser.document;
+		if ( doc.fullscreenElement != null) {
+			return Borderless;
+		}
+
+		return Windowed;
+	}
+
+	function set_displayMode( m : DisplayMode ) : DisplayMode {
+		var doc = js.Browser.document;
+		var elt : Dynamic = doc.documentElement;
+		var fullscreen = m != Windowed;
+		if( (doc.fullscreenElement == elt) == fullscreen )
+			return Windowed;
+		if( m != Windowed )
+			elt.requestFullscreen();
+		else
+			doc.exitFullscreen();
+
+		return m;
+	}
+
+	function get_title() : String {
+		return js.Browser.document.title;
+	}
+	function set_title( t : String ) : String {
+		return js.Browser.document.title = t;
+	}
 }