Initial support for fullscreen, setIcon and title on HTML5 window (resolve #985)
This commit is contained in:
@@ -8,11 +8,13 @@ import js.html.Element;
|
||||
import js.html.FocusEvent;
|
||||
import js.html.InputElement;
|
||||
import js.html.InputEvent;
|
||||
import js.html.LinkElement;
|
||||
import js.html.MouseEvent;
|
||||
import js.html.TouchEvent;
|
||||
import js.html.ClipboardEvent;
|
||||
import js.Browser;
|
||||
import lime.app.Application;
|
||||
import lime.graphics.utils.ImageCanvasUtil;
|
||||
import lime.graphics.Image;
|
||||
import lime.system.Display;
|
||||
import lime.system.DisplayMode;
|
||||
@@ -50,8 +52,11 @@ class HTML5Window {
|
||||
private var cacheMouseY:Float;
|
||||
private var currentTouches = new Map<Int, Touch> ();
|
||||
private var enableTextEvents:Bool;
|
||||
private var isFullscreen:Bool;
|
||||
private var parent:Window;
|
||||
private var primaryTouch:Touch;
|
||||
private var requestedFullscreen:Bool;
|
||||
private var resizeElement:Bool;
|
||||
private var scale = 1.0;
|
||||
private var setHeight:Int;
|
||||
private var setWidth:Int;
|
||||
@@ -162,7 +167,7 @@ class HTML5Window {
|
||||
cacheElementWidth = parent.width;
|
||||
cacheElementHeight = parent.height;
|
||||
|
||||
parent.fullscreen = true;
|
||||
resizeElement = true;
|
||||
|
||||
}
|
||||
|
||||
@@ -295,6 +300,42 @@ class HTML5Window {
|
||||
}
|
||||
|
||||
|
||||
private function handleFullscreenEvent (event:Dynamic):Void {
|
||||
|
||||
var fullscreenElement = untyped (document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement);
|
||||
|
||||
if (fullscreenElement != null) {
|
||||
|
||||
isFullscreen = true;
|
||||
parent.__fullscreen = true;
|
||||
|
||||
if (requestedFullscreen) {
|
||||
|
||||
requestedFullscreen = false;
|
||||
parent.onFullscreen.dispatch ();
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
isFullscreen = false;
|
||||
parent.__fullscreen = false;
|
||||
|
||||
var changeEvents = [ "fullscreenchange", "mozfullscreenchange", "webkitfullscreenchange", "MSFullscreenChange" ];
|
||||
var errorEvents = [ "fullscreenerror", "mozfullscreenerror", "webkitfullscreenerror", "MSFullscreenError" ];
|
||||
|
||||
for (i in 0...changeEvents.length) {
|
||||
|
||||
Browser.document.removeEventListener (changeEvents[i], handleFullscreenEvent, false);
|
||||
Browser.document.removeEventListener (errorEvents[i], handleFullscreenEvent, false);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private function handleGamepadEvent (event:Dynamic):Void {
|
||||
|
||||
switch (event.type) {
|
||||
@@ -781,6 +822,59 @@ class HTML5Window {
|
||||
|
||||
public function setFullscreen (value:Bool):Bool {
|
||||
|
||||
if (value) {
|
||||
|
||||
if (!requestedFullscreen && !isFullscreen) {
|
||||
|
||||
requestedFullscreen = true;
|
||||
|
||||
untyped {
|
||||
|
||||
if (element.requestFullscreen) {
|
||||
|
||||
document.addEventListener ("fullscreenchange", handleFullscreenEvent, false);
|
||||
document.addEventListener ("fullscreenerror", handleFullscreenEvent, false);
|
||||
element.requestFullscreen ();
|
||||
|
||||
} else if (element.mozRequestFullScreen) {
|
||||
|
||||
document.addEventListener ("mozfullscreenchange", handleFullscreenEvent, false);
|
||||
document.addEventListener ("mozfullscreenerror", handleFullscreenEvent, false);
|
||||
element.mozRequestFullScreen ();
|
||||
|
||||
} else if (element.webkitRequestFullscreen) {
|
||||
|
||||
document.addEventListener ("webkitfullscreenchange", handleFullscreenEvent, false);
|
||||
document.addEventListener ("webkitfullscreenerror", handleFullscreenEvent, false);
|
||||
element.webkitRequestFullscreen ();
|
||||
|
||||
} else if (element.msRequestFullscreen) {
|
||||
|
||||
document.addEventListener ("MSFullscreenChange", handleFullscreenEvent, false);
|
||||
document.addEventListener ("MSFullscreenError", handleFullscreenEvent, false);
|
||||
element.msRequestFullscreen ();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else if (isFullscreen) {
|
||||
|
||||
requestedFullscreen = false;
|
||||
|
||||
untyped {
|
||||
|
||||
if (document.exitFullscreen) document.exitFullscreen ();
|
||||
else if (document.mozCancelFullScreen) document.mozCancelFullScreen ();
|
||||
else if (document.webkitExitFullscreen) document.webkitExitFullscreen ();
|
||||
else if (document.msExitFullscreen) document.msExitFullscreen ();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return value;
|
||||
|
||||
}
|
||||
@@ -788,7 +882,32 @@ class HTML5Window {
|
||||
|
||||
public function setIcon (image:Image):Void {
|
||||
|
||||
//var iconWidth = 16;
|
||||
//var iconHeight = 16;
|
||||
|
||||
//image = image.clone ();
|
||||
|
||||
//if (image.width != iconWidth || image.height != iconHeight) {
|
||||
//
|
||||
//image.resize (iconWidth, iconHeight);
|
||||
//
|
||||
//}
|
||||
|
||||
ImageCanvasUtil.convertToCanvas (image);
|
||||
|
||||
var link:LinkElement = cast Browser.document.querySelector ("link[rel*='icon']");
|
||||
|
||||
if (link == null) {
|
||||
|
||||
link = cast Browser.document.createElement ("link");
|
||||
|
||||
}
|
||||
|
||||
link.type = "image/x-icon";
|
||||
link.rel = "shortcut icon";
|
||||
link.href = image.buffer.src.toDataURL ("image/x-icon");
|
||||
|
||||
Browser.document.getElementsByTagName ("head")[0].appendChild (link);
|
||||
|
||||
}
|
||||
|
||||
@@ -816,6 +935,12 @@ class HTML5Window {
|
||||
|
||||
public function setTitle (value:String):String {
|
||||
|
||||
if (value != null) {
|
||||
|
||||
Browser.document.title = value;
|
||||
|
||||
}
|
||||
|
||||
return value;
|
||||
|
||||
}
|
||||
@@ -842,7 +967,7 @@ class HTML5Window {
|
||||
cacheElementWidth = elementWidth;
|
||||
cacheElementHeight = elementHeight;
|
||||
|
||||
var stretch = parent.fullscreen || (setWidth == 0 && setHeight == 0);
|
||||
var stretch = resizeElement || (setWidth == 0 && setHeight == 0);
|
||||
|
||||
if (element != null && (div == null || (div != null && stretch))) {
|
||||
|
||||
|
||||
@@ -102,7 +102,9 @@ class Window {
|
||||
if (Reflect.hasField (config, "height")) __height = config.height;
|
||||
if (Reflect.hasField (config, "x")) __x = config.x;
|
||||
if (Reflect.hasField (config, "y")) __y = config.y;
|
||||
#if !web
|
||||
if (Reflect.hasField (config, "fullscreen")) __fullscreen = config.fullscreen;
|
||||
#end
|
||||
if (Reflect.hasField (config, "borderless")) __borderless = config.borderless;
|
||||
if (Reflect.hasField (config, "resizable")) __resizable = config.resizable;
|
||||
if (Reflect.hasField (config, "title")) __title = config.title;
|
||||
|
||||
Reference in New Issue
Block a user