196 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
package kha;
 | 
						|
 | 
						|
import js.Syntax;
 | 
						|
import js.html.MutationObserver;
 | 
						|
 | 
						|
class Window {
 | 
						|
	static var windows: Array<Window> = [];
 | 
						|
	static var resizeCallbacks: Array<Array<Int->Int->Void>> = [];
 | 
						|
 | 
						|
	var num: Int;
 | 
						|
	var canvas: js.html.CanvasElement;
 | 
						|
	var defaultWidth: Int;
 | 
						|
	var defaultHeight: Int;
 | 
						|
 | 
						|
	@:noCompletion
 | 
						|
	@:noDoc
 | 
						|
	public function new(num: Int, defaultWidth: Int, defaultHeight: Int, canvas: js.html.CanvasElement) {
 | 
						|
		this.num = num;
 | 
						|
		this.canvas = canvas;
 | 
						|
		this.defaultWidth = defaultWidth;
 | 
						|
		this.defaultHeight = defaultHeight;
 | 
						|
		windows.push(this);
 | 
						|
		resizeCallbacks[num] = [];
 | 
						|
		windows.push(this);
 | 
						|
		final observer: MutationObserver = new MutationObserver(function(mutations: Array<js.html.MutationRecord>, observer: MutationObserver) {
 | 
						|
			var isResize = false;
 | 
						|
			for (mutation in mutations) {
 | 
						|
				if (mutation.attributeName == "width" || mutation.attributeName == "height") {
 | 
						|
					isResize = true;
 | 
						|
					break;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			if (isResize) {
 | 
						|
				this.resize(canvas.width, canvas.height);
 | 
						|
			}
 | 
						|
		});
 | 
						|
		observer.observe(canvas, {attributes: true});
 | 
						|
	}
 | 
						|
 | 
						|
	public static function create(win: WindowOptions = null, frame: FramebufferOptions = null): Window {
 | 
						|
		return null;
 | 
						|
	}
 | 
						|
 | 
						|
	public static function destroy(window: Window): Void {}
 | 
						|
 | 
						|
	public static function get(index: Int): Window {
 | 
						|
		return windows[index];
 | 
						|
	}
 | 
						|
 | 
						|
	public static var all(get, never): Array<Window>;
 | 
						|
 | 
						|
	static function get_all(): Array<Window> {
 | 
						|
		return windows;
 | 
						|
	}
 | 
						|
 | 
						|
	public function resize(width: Int, height: Int): Void {
 | 
						|
		for (callback in resizeCallbacks[num]) {
 | 
						|
			callback(width, height);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	public function move(x: Int, y: Int): Void {}
 | 
						|
 | 
						|
	public function changeWindowFeatures(features: Int): Void {}
 | 
						|
 | 
						|
	public function changeFramebuffer(frame: FramebufferOptions): Void {}
 | 
						|
 | 
						|
	public var x(get, set): Int;
 | 
						|
 | 
						|
	function get_x(): Int {
 | 
						|
		return 0;
 | 
						|
	}
 | 
						|
 | 
						|
	function set_x(value: Int): Int {
 | 
						|
		return 0;
 | 
						|
	}
 | 
						|
 | 
						|
	public var y(get, set): Int;
 | 
						|
 | 
						|
	function get_y(): Int {
 | 
						|
		return 0;
 | 
						|
	}
 | 
						|
 | 
						|
	function set_y(value: Int): Int {
 | 
						|
		return 0;
 | 
						|
	}
 | 
						|
 | 
						|
	public var width(get, set): Int;
 | 
						|
 | 
						|
	function get_width(): Int {
 | 
						|
		return canvas.width == 0 ? defaultWidth : canvas.width;
 | 
						|
	}
 | 
						|
 | 
						|
	function set_width(value: Int): Int {
 | 
						|
		return 800;
 | 
						|
	}
 | 
						|
 | 
						|
	public var height(get, set): Int;
 | 
						|
 | 
						|
	function get_height(): Int {
 | 
						|
		return canvas.height == 0 ? defaultHeight : canvas.height;
 | 
						|
	}
 | 
						|
 | 
						|
	function set_height(value: Int): Int {
 | 
						|
		return 600;
 | 
						|
	}
 | 
						|
 | 
						|
	public var mode(get, set): WindowMode;
 | 
						|
 | 
						|
	function get_mode(): WindowMode {
 | 
						|
		return isFullscreen() ? Fullscreen : Windowed;
 | 
						|
	}
 | 
						|
 | 
						|
	function set_mode(mode: WindowMode): WindowMode {
 | 
						|
		if (mode == Fullscreen || mode == ExclusiveFullscreen) {
 | 
						|
			if (!isFullscreen()) {
 | 
						|
				requestFullscreen();
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else {
 | 
						|
			if (isFullscreen()) {
 | 
						|
				exitFullscreen();
 | 
						|
			}
 | 
						|
		}
 | 
						|
		return mode;
 | 
						|
	}
 | 
						|
 | 
						|
	function isFullscreen(): Bool {
 | 
						|
		return Syntax.code("document.fullscreenElement === this.canvas ||
 | 
						|
			document.mozFullScreenElement === this.canvas ||
 | 
						|
			document.webkitFullscreenElement === this.canvas ||
 | 
						|
			document.msFullscreenElement === this.canvas ");
 | 
						|
	}
 | 
						|
 | 
						|
	function requestFullscreen(): Void {
 | 
						|
		untyped if (canvas.requestFullscreen) {
 | 
						|
			var c: Dynamic = canvas;
 | 
						|
			c.requestFullscreen({navigationUI: "hide"});
 | 
						|
		}
 | 
						|
		else if (canvas.msRequestFullscreen) {
 | 
						|
			canvas.msRequestFullscreen();
 | 
						|
		}
 | 
						|
		else if (canvas.mozRequestFullScreen) {
 | 
						|
			canvas.mozRequestFullScreen();
 | 
						|
		}
 | 
						|
		else if (canvas.webkitRequestFullscreen) {
 | 
						|
			canvas.webkitRequestFullscreen();
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	function exitFullscreen(): Void {
 | 
						|
		untyped if (document.exitFullscreen) {
 | 
						|
			document.exitFullscreen();
 | 
						|
		}
 | 
						|
		else if (document.msExitFullscreen) {
 | 
						|
			document.msExitFullscreen();
 | 
						|
		}
 | 
						|
		else if (document.mozCancelFullScreen) {
 | 
						|
			document.mozCancelFullScreen();
 | 
						|
		}
 | 
						|
		else if (document.webkitExitFullscreen) {
 | 
						|
			document.webkitExitFullscreen();
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	public var visible(get, set): Bool;
 | 
						|
 | 
						|
	function get_visible(): Bool {
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
 | 
						|
	function set_visible(value: Bool): Bool {
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
 | 
						|
	public var title(get, set): String;
 | 
						|
 | 
						|
	function get_title(): String {
 | 
						|
		return "Kha";
 | 
						|
	}
 | 
						|
 | 
						|
	function set_title(value: String): String {
 | 
						|
		return "Kha";
 | 
						|
	}
 | 
						|
 | 
						|
	public function notifyOnResize(callback: Int->Int->Void): Void {
 | 
						|
		resizeCallbacks[num].push(callback);
 | 
						|
	}
 | 
						|
 | 
						|
	public var vSynced(get, never): Bool;
 | 
						|
 | 
						|
	function get_vSynced(): Bool {
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
}
 |