UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

962 lines (945 loc) 34.3 kB
// Class: lime._internal.backend.html5.HTML5Window var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../../../hxClasses_stub").default; var $hxEnums = require("./../../../../hxEnums_stub").default; var $import = require("./../../../../import_stub").default; var $bind = require("./../../../../bind_stub").default; function js_Browser() {return require("./../../../../js/Browser");} function lime_graphics_RenderContext() {return require("./../../../../lime/graphics/RenderContext");} function Reflect() {return require("./../../../../Reflect");} function lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$() {return require("./../../../../lime/graphics/_WebGLRenderContext/WebGLRenderContext_Impl_");} function lime_graphics_opengl_GL() {return require("./../../../../lime/graphics/opengl/GL");} function haxe_Timer() {return require("./../../../../haxe/Timer");} function lime_system_System() {return require("./../../../../lime/system/System");} function lime_system_Clipboard() {return require("./../../../../lime/system/Clipboard");} function js_Boot() {return require("./../../../../js/Boot");} function lime_ui_Joystick() {return require("./../../../../lime/ui/Joystick");} function lime_ui_Gamepad() {return require("./../../../../lime/ui/Gamepad");} function StringTools() {return require("./../../../../StringTools");} function lime_ui_MouseWheelMode() {return require("./../../../../lime/ui/MouseWheelMode");} function lime_ui_Touch() {return require("./../../../../lime/ui/Touch");} function lime_math_Rectangle() {return require("./../../../../lime/math/Rectangle");} function Std() {return require("./../../../../Std");} function lime_graphics_Image() {return require("./../../../../lime/graphics/Image");} function lime__$internal_graphics_ImageCanvasUtil() {return require("./../../../../lime/_internal/graphics/ImageCanvasUtil");} function EReg() {return require("./../../../../EReg");} function haxe_ds_List() {return require("./../../../../haxe/ds/List");} function haxe_ds_IntMap() {return require("./../../../../haxe/ds/IntMap");} function lime_ui_MouseCursor() {return require("./../../../../lime/ui/MouseCursor");} // Constructor var HTML5Window = function(parent) { this.imeCompositionActive = false; this.unusedTouchesPool = new (haxe_ds_List().default)(); this.scale = 1.0; this.currentTouches = new (haxe_ds_IntMap().default)(); this.parent = parent; this.cursor = (lime_ui_MouseCursor().default).DEFAULT; this.cacheMouseX = 0; this.cacheMouseY = 0; var attributes = parent.__attributes; if(!(Reflect().default).hasField(attributes,"context")) { attributes.context = { }; } this.renderType = attributes.context.type; if((Reflect().default).hasField(attributes,"element")) { parent.element = attributes.element; } var element = parent.element; if((Reflect().default).hasField(attributes,"allowHighDPI") && attributes.allowHighDPI && this.renderType != "dom") { this.scale = window.devicePixelRatio; } parent.__scale = this.scale; this.setWidth = (Reflect().default).hasField(attributes,"width") ? attributes.width : 0; this.setHeight = (Reflect().default).hasField(attributes,"height") ? attributes.height : 0; parent.__width = this.setWidth; parent.__height = this.setHeight; parent.id = HTML5Window.windowID++; if(((element) instanceof HTMLCanvasElement)) { this.canvas = element; } else if(this.renderType == "dom") { this.div = window.document.createElement("div"); } else { this.canvas = window.document.createElement("canvas"); } if(this.canvas != null) { var style = this.canvas.style; style.setProperty("-webkit-transform","translateZ(0)",null); style.setProperty("transform","translateZ(0)",null); } else if(this.div != null) { var style1 = this.div.style; style1.setProperty("-webkit-transform","translate3D(0,0,0)",null); style1.setProperty("transform","translate3D(0,0,0)",null); style1.position = "relative"; style1.overflow = "hidden"; style1.setProperty("-webkit-user-select","none",null); style1.setProperty("-moz-user-select","none",null); style1.setProperty("-ms-user-select","none",null); style1.setProperty("-o-user-select","none",null); } if(parent.__width == 0 && parent.__height == 0) { if(element != null) { parent.__width = element.clientWidth; parent.__height = element.clientHeight; } else { parent.__width = window.innerWidth; parent.__height = window.innerHeight; } this.cacheElementWidth = parent.__width; this.cacheElementHeight = parent.__height; this.resizeElement = true; } if(this.canvas != null) { this.canvas.width = Math.round(parent.__width * this.scale); this.canvas.height = Math.round(parent.__height * this.scale); this.canvas.style.width = parent.__width + "px"; this.canvas.style.height = parent.__height + "px"; } else { this.div.style.width = parent.__width + "px"; this.div.style.height = parent.__height + "px"; } if((Reflect().default).hasField(attributes,"resizable") && attributes.resizable || !(Reflect().default).hasField(attributes,"width") && this.setWidth == 0 && this.setHeight == 0) { parent.__resizable = true; } this.updateSize(); if(element != null) { if(this.canvas != null) { if(element != this.canvas) { element.appendChild(this.canvas); } } else { element.appendChild(this.div); } var events = ["mousedown","mouseenter","mouseleave","mousemove","mouseup","wheel"]; var _g = 0; while(_g < events.length) { var event = events[_g]; ++_g; element.addEventListener(event,$bind(this,this.handleMouseEvent),true); } element.addEventListener("contextmenu",$bind(this,this.handleContextMenuEvent),true); element.addEventListener("dragstart",$bind(this,this.handleDragEvent),true); element.addEventListener("dragover",$bind(this,this.handleDragEvent),true); element.addEventListener("drop",$bind(this,this.handleDragEvent),true); element.addEventListener("touchstart",$bind(this,this.handleTouchEvent),true); element.addEventListener("touchmove",$bind(this,this.handleTouchEvent),true); element.addEventListener("touchend",$bind(this,this.handleTouchEvent),true); element.addEventListener("touchcancel",$bind(this,this.handleTouchEvent),true); element.addEventListener("gamepadconnected",$bind(this,this.handleGamepadEvent),true); element.addEventListener("gamepaddisconnected",$bind(this,this.handleGamepadEvent),true); } this.createContext(); if(parent.context.type == "webgl") { this.canvas.addEventListener("webglcontextlost",$bind(this,this.handleContextEvent),false); this.canvas.addEventListener("webglcontextrestored",$bind(this,this.handleContextEvent),false); } } // Meta HTML5Window.__name__ = "lime._internal.backend.html5.HTML5Window"; HTML5Window.__isInterface__ = false; HTML5Window.prototype = { alert: function(message,title) { if(message != null) { (js_Browser().default).alert(message); } }, close: function() { var element = this.parent.element; if(element != null) { if(this.canvas != null) { if(element != this.canvas) { element.removeChild(this.canvas); } this.canvas = null; } else if(this.div != null) { element.removeChild(this.div); this.div = null; } var events = ["mousedown","mouseenter","mouseleave","mousemove","mouseup","wheel"]; var _g = 0; while(_g < events.length) { var event = events[_g]; ++_g; element.removeEventListener(event,$bind(this,this.handleMouseEvent),true); } element.removeEventListener("contextmenu",$bind(this,this.handleContextMenuEvent),true); element.removeEventListener("dragstart",$bind(this,this.handleDragEvent),true); element.removeEventListener("dragover",$bind(this,this.handleDragEvent),true); element.removeEventListener("drop",$bind(this,this.handleDragEvent),true); element.removeEventListener("touchstart",$bind(this,this.handleTouchEvent),true); element.removeEventListener("touchmove",$bind(this,this.handleTouchEvent),true); element.removeEventListener("touchend",$bind(this,this.handleTouchEvent),true); element.removeEventListener("touchcancel",$bind(this,this.handleTouchEvent),true); element.removeEventListener("gamepadconnected",$bind(this,this.handleGamepadEvent),true); element.removeEventListener("gamepaddisconnected",$bind(this,this.handleGamepadEvent),true); } this.parent.application.__removeWindow(this.parent); }, createContext: function() { var context = new (lime_graphics_RenderContext().default)(); var contextAttributes = this.parent.__attributes.context; context.window = this.parent; context.attributes = contextAttributes; if(this.div != null) { context.dom = this.div; context.type = "dom"; context.version = ""; } else if(this.canvas != null) { var webgl = null; var forceCanvas = this.renderType == "canvas"; var forceWebGL = this.renderType == "opengl" || this.renderType == "opengles" || this.renderType == "webgl"; var allowWebGL2 = false; var isWebGL2 = false; if(forceWebGL || !forceCanvas && (!(Reflect().default).hasField(contextAttributes,"hardware") || contextAttributes.hardware)) { var transparentBackground = (Reflect().default).hasField(contextAttributes,"background") && contextAttributes.background == null; var colorDepth = (Reflect().default).hasField(contextAttributes,"colorDepth") ? contextAttributes.colorDepth : 16; var options = { alpha : transparentBackground || colorDepth > 16, antialias : (Reflect().default).hasField(contextAttributes,"antialiasing") && contextAttributes.antialiasing > 0, depth : (Reflect().default).hasField(contextAttributes,"depth") ? contextAttributes.depth : true, premultipliedAlpha : true, stencil : (Reflect().default).hasField(contextAttributes,"stencil") && contextAttributes.stencil, preserveDrawingBuffer : (Reflect().default).hasField(contextAttributes,"preserveDrawingBuffer") && contextAttributes.preserveDrawingBuffer, failIfMajorPerformanceCaveat : false}; var glContextType = ["webgl","experimental-webgl"]; if(allowWebGL2) { glContextType.unshift("webgl2"); } var _g = 0; while(_g < glContextType.length) { var name = glContextType[_g]; ++_g; webgl = this.canvas.getContext(name,options); if(webgl != null && name == "webgl2") { isWebGL2 = true; } if(webgl != null) { break; } } } if(webgl == null) { context.canvas2D = this.canvas.getContext("2d"); context.type = "canvas"; context.version = ""; } else { context.webgl = (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).fromWebGL2RenderContext(webgl); if(isWebGL2) { context.webgl2 = webgl; } if((lime_graphics_opengl_GL().default).context == null) { (lime_graphics_opengl_GL().default).context = webgl; (lime_graphics_opengl_GL().default).type = "webgl"; (lime_graphics_opengl_GL().default).version = isWebGL2 ? 2 : 1; } context.type = "webgl"; context.version = isWebGL2 ? "2" : "1"; } } this.parent.context = context; }, focus: function() { }, focusTextInput: function() { var _gthis = this; if(this.__focusPending) { return; } this.__focusPending = true; (haxe_Timer().default).delay(function() { _gthis.__focusPending = false; if(_gthis.textInputEnabled) { HTML5Window.textInput.focus(); } },20); }, getCursor: function() { return this.cursor; }, getDisplay: function() { return (lime_system_System().default).getDisplay(0); }, getDisplayMode: function() { return (lime_system_System().default).getDisplay(0).currentMode; }, getFrameRate: function() { if(this.parent.application == null) { return 0; } if(this.parent.application.__backend.framePeriod < 0) { return 60; } else if(this.parent.application.__backend.framePeriod == 1000) { return 0; } else { return 1000 / this.parent.application.__backend.framePeriod; } }, getMouseLock: function() { return false; }, getOpacity: function() { return 1.0; }, getTextInputEnabled: function() { return this.textInputEnabled; }, handleContextEvent: function(event) { switch(event.type) { case "webglcontextlost": if(event.cancelable) { event.preventDefault(); } var tmp = (lime_graphics_opengl_GL().default).context != null; this.parent.context = null; this.parent.onRenderContextLost.dispatch(); break; case "webglcontextrestored": this.createContext(); this.parent.onRenderContextRestored.dispatch(this.parent.context); break; default: } }, handleContextMenuEvent: function(event) { if((this.parent.onMouseUp.canceled || this.parent.onMouseDown.canceled) && event.cancelable) { event.preventDefault(); } }, handleCutOrCopyEvent: function(event) { var text = (lime_system_Clipboard().default).get_text(); if(text == null) { text = ""; } event.clipboardData.setData("text/plain",text); if(event.cancelable) { event.preventDefault(); } }, handleDragEvent: function(event) { switch(event.type) { case "dragover": event.preventDefault(); return false; case "dragstart": if(((js_Boot().default).__cast(event.target , HTMLElement)).nodeName.toLowerCase() == "img" && event.cancelable) { event.preventDefault(); return false; } break; case "drop": if(event.dataTransfer != null && event.dataTransfer.files.length > 0) { this.parent.onDropFile.dispatch(event.dataTransfer.files); event.preventDefault(); return false; } break; } return true; }, handleFocusEvent: function(event) { if(this.textInputEnabled) { if(event.relatedTarget == null || this.isDescendent(event.relatedTarget)) { this.focusTextInput(); } } }, handleFullscreenEvent: function(event) { var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement; if(fullscreenElement != null) { this.isFullscreen = true; this.parent.__fullscreen = true; if(this.requestedFullscreen) { this.requestedFullscreen = false; this.parent.onFullscreen.dispatch(); } } else { this.isFullscreen = false; this.parent.__fullscreen = false; this.parent.onRestore.dispatch(); var changeEvents = ["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","MSFullscreenChange"]; var errorEvents = ["fullscreenerror","mozfullscreenerror","webkitfullscreenerror","MSFullscreenError"]; var _g = 0; var _g1 = changeEvents.length; while(_g < _g1) { var i = _g++; window.document.removeEventListener(changeEvents[i],$bind(this,this.handleFullscreenEvent),false); window.document.removeEventListener(errorEvents[i],$bind(this,this.handleFullscreenEvent),false); } } }, handleGamepadEvent: function(event) { switch(event.type) { case "gamepadconnected": (lime_ui_Joystick().default).__connect(event.gamepad.index); if(event.gamepad.mapping == "standard") { (lime_ui_Gamepad().default).__connect(event.gamepad.index); } break; case "gamepaddisconnected": (lime_ui_Joystick().default).__disconnect(event.gamepad.index); (lime_ui_Gamepad().default).__disconnect(event.gamepad.index); break; default: } }, handleInputEvent: function(event) { if(this.imeCompositionActive) { return; } if(HTML5Window.textInput.value != HTML5Window.dummyCharacter) { var value = (StringTools().default).replace(HTML5Window.textInput.value,HTML5Window.dummyCharacter,""); if(value.length > 0) { this.parent.onTextInput.dispatch(value); } HTML5Window.textInput.value = HTML5Window.dummyCharacter; } }, handleMouseEvent: function(event) { var x = 0.0; var y = 0.0; if(event.type != "wheel") { if(this.parent.element != null) { if(this.canvas != null) { var rect = this.canvas.getBoundingClientRect(); x = (event.clientX - rect.left) * (this.parent.__width / rect.width); y = (event.clientY - rect.top) * (this.parent.__height / rect.height); } else if(this.div != null) { var rect1 = this.div.getBoundingClientRect(); x = event.clientX - rect1.left; y = event.clientY - rect1.top; } else { var rect2 = this.parent.element.getBoundingClientRect(); x = (event.clientX - rect2.left) * (this.parent.__width / rect2.width); y = (event.clientY - rect2.top) * (this.parent.__height / rect2.height); } } else { x = event.clientX; y = event.clientY; } switch(event.type) { case "mousedown": if(event.currentTarget == this.parent.element) { window.addEventListener("mouseup",$bind(this,this.handleMouseEvent)); } this.parent.clickCount = event.detail; this.parent.onMouseDown.dispatch(x,y,event.button); this.parent.clickCount = 0; if(this.parent.onMouseDown.canceled && event.cancelable) { event.preventDefault(); } break; case "mouseenter": if(event.target == this.parent.element) { this.parent.onEnter.dispatch(); if(this.parent.onEnter.canceled && event.cancelable) { event.preventDefault(); } } break; case "mouseleave": if(event.target == this.parent.element) { this.parent.onLeave.dispatch(); if(this.parent.onLeave.canceled && event.cancelable) { event.preventDefault(); } } break; case "mousemove": if(x != this.cacheMouseX || y != this.cacheMouseY) { this.parent.onMouseMove.dispatch(x,y); this.parent.onMouseMoveRelative.dispatch(x - this.cacheMouseX,y - this.cacheMouseY); if((this.parent.onMouseMove.canceled || this.parent.onMouseMoveRelative.canceled) && event.cancelable) { event.preventDefault(); } } break; case "mouseup": window.removeEventListener("mouseup",$bind(this,this.handleMouseEvent)); if(event.currentTarget == this.parent.element) { event.stopPropagation(); } this.parent.clickCount = event.detail; this.parent.onMouseUp.dispatch(x,y,event.button); this.parent.clickCount = 0; if(this.parent.onMouseUp.canceled && event.cancelable) { event.preventDefault(); } break; default: } this.cacheMouseX = x; this.cacheMouseY = y; } else { var deltaMode; switch(event.deltaMode) { case 0: deltaMode = (lime_ui_MouseWheelMode().default).PIXELS; break; case 1: deltaMode = (lime_ui_MouseWheelMode().default).LINES; break; case 2: deltaMode = (lime_ui_MouseWheelMode().default).PAGES; break; default: deltaMode = (lime_ui_MouseWheelMode().default).UNKNOWN; } this.parent.onMouseWheel.dispatch(event.deltaX,-event.deltaY,deltaMode); if(this.parent.onMouseWheel.canceled && event.cancelable) { event.preventDefault(); } } }, handlePasteEvent: function(event) { if(event.clipboardData.types.indexOf("text/plain") > -1) { var text = event.clipboardData.getData("text/plain"); (lime_system_Clipboard().default).set_text(text); if(this.textInputEnabled) { this.parent.onTextInput.dispatch(text); } if(event.cancelable) { event.preventDefault(); } } }, handleResizeEvent: function(event) { this.primaryTouch = null; this.updateSize(); }, handleTouchEvent: function(event) { if(event.cancelable) { event.preventDefault(); } var rect = null; if(this.parent.element != null) { if(this.canvas != null) { rect = this.canvas.getBoundingClientRect(); } else if(this.div != null) { rect = this.div.getBoundingClientRect(); } else { rect = this.parent.element.getBoundingClientRect(); } } var windowWidth = this.setWidth; var windowHeight = this.setHeight; if(windowWidth == 0 || windowHeight == 0) { if(rect != null) { windowWidth = rect.width; windowHeight = rect.height; } else { windowWidth = 1; windowHeight = 1; } } var touch; var x; var y; var cacheX; var cacheY; var _g = 0; var _g1 = event.changedTouches; while(_g < _g1.length) { var data = _g1[_g]; ++_g; x = 0.0; y = 0.0; if(rect != null) { x = (data.clientX - rect.left) * (windowWidth / rect.width); y = (data.clientY - rect.top) * (windowHeight / rect.height); } else { x = data.clientX; y = data.clientY; } if(event.type == "touchstart") { touch = this.unusedTouchesPool.pop(); if(touch == null) { touch = new (lime_ui_Touch().default)(x / windowWidth,y / windowHeight,data.identifier,0,0,data.force,this.parent.id); } else { touch.x = x / windowWidth; touch.y = y / windowHeight; touch.id = data.identifier; touch.dx = 0; touch.dy = 0; touch.pressure = data.force; touch.device = this.parent.id; } this.currentTouches.set(data.identifier,touch); (lime_ui_Touch().default).onStart.dispatch(touch); if(this.primaryTouch == null) { this.primaryTouch = touch; } if(touch == this.primaryTouch) { this.parent.onMouseDown.dispatch(x,y,0); } } else { touch = this.currentTouches.get(data.identifier); if(touch != null) { cacheX = touch.x; cacheY = touch.y; touch.x = x / windowWidth; touch.y = y / windowHeight; touch.dx = touch.x - cacheX; touch.dy = touch.y - cacheY; touch.pressure = data.force; switch(event.type) { case "touchcancel": (lime_ui_Touch().default).onCancel.dispatch(touch); this.currentTouches.remove(data.identifier); this.unusedTouchesPool.add(touch); if(touch == this.primaryTouch) { this.primaryTouch = null; } break; case "touchend": (lime_ui_Touch().default).onEnd.dispatch(touch); this.currentTouches.remove(data.identifier); this.unusedTouchesPool.add(touch); if(touch == this.primaryTouch) { this.parent.onMouseUp.dispatch(x,y,0); this.primaryTouch = null; } break; case "touchmove": (lime_ui_Touch().default).onMove.dispatch(touch); if(touch == this.primaryTouch) { this.parent.onMouseMove.dispatch(x,y); } break; default: } } } } }, isDescendent: function(node) { if(node == this.parent.element) { return true; } while(node != null) { if(node.parentNode == this.parent.element) { return true; } node = node.parentNode; } return false; }, move: function(x,y) { }, readPixels: function(rect) { if(this.canvas != null) { var stageRect = new (lime_math_Rectangle().default)(0,0,this.canvas.width,this.canvas.height); if(rect == null) { rect = stageRect; } else { rect.intersection(stageRect,rect); } if(rect.width > 0 && rect.height > 0) { var canvas2 = window.document.createElement("canvas"); canvas2.width = (Std().default).int(rect.width); canvas2.height = (Std().default).int(rect.height); var context = canvas2.getContext("2d"); context.drawImage(this.canvas,-rect.x,-rect.y); return (lime_graphics_Image().default).fromCanvas(canvas2); } } return null; }, resize: function(width,height) { }, setMinSize: function(width,height) { }, setMaxSize: function(width,height) { }, setBorderless: function(value) { return value; }, setClipboard: function(value) { if(HTML5Window.textArea == null) { HTML5Window.textArea = window.document.createElement("textarea"); HTML5Window.textArea.style.height = "0px"; HTML5Window.textArea.style.left = "-100px"; HTML5Window.textArea.style.opacity = "0"; HTML5Window.textArea.style.position = "fixed"; HTML5Window.textArea.style.top = "-100px"; HTML5Window.textArea.style.width = "0px"; window.document.body.appendChild(HTML5Window.textArea); } HTML5Window.textArea.value = value; HTML5Window.textArea.focus(); HTML5Window.textArea.select(); if(window.document.queryCommandEnabled("copy")) { window.document.execCommand("copy"); } if(this.textInputEnabled) { this.focusTextInput(); } }, setCursor: function(value) { if(this.cursor != value) { if(value == null) { this.parent.element.style.cursor = "none"; } else { var tmp; switch(value._hx_index) { case 0: tmp = "default"; break; case 1: tmp = "crosshair"; break; case 3: tmp = "move"; break; case 4: tmp = "pointer"; break; case 5: tmp = "nesw-resize"; break; case 6: tmp = "ns-resize"; break; case 7: tmp = "nwse-resize"; break; case 8: tmp = "ew-resize"; break; case 9: tmp = "text"; break; case 10: tmp = "wait"; break; case 11: tmp = "wait"; break; default: tmp = "auto"; } this.parent.element.style.cursor = tmp; } this.cursor = value; } return this.cursor; }, setDisplayMode: function(value) { return value; }, setFrameRate: function(value) { if(this.parent.application != null) { if(value >= 60) { if(this.parent == this.parent.application.get_window()) { this.parent.application.__backend.framePeriod = -1; } } else if(value > 0) { if(this.parent == this.parent.application.get_window()) { this.parent.application.__backend.framePeriod = 1000 / value; } } else if(this.parent == this.parent.application.get_window()) { this.parent.application.__backend.framePeriod = 1000; } } return value; }, setFullscreen: function(value) { if(value) { if(!this.requestedFullscreen && !this.isFullscreen) { this.requestedFullscreen = true; if(($_=this.parent.element,$bind($_,$_.requestFullscreen))) { document.addEventListener("fullscreenchange",$bind(this,this.handleFullscreenEvent),false); document.addEventListener("fullscreenerror",$bind(this,this.handleFullscreenEvent),false); this.parent.element.requestFullscreen(); } else if(this.parent.element.mozRequestFullScreen) { document.addEventListener("mozfullscreenchange",$bind(this,this.handleFullscreenEvent),false); document.addEventListener("mozfullscreenerror",$bind(this,this.handleFullscreenEvent),false); this.parent.element.mozRequestFullScreen(); } else if(this.parent.element.webkitRequestFullscreen) { document.addEventListener("webkitfullscreenchange",$bind(this,this.handleFullscreenEvent),false); document.addEventListener("webkitfullscreenerror",$bind(this,this.handleFullscreenEvent),false); this.parent.element.webkitRequestFullscreen(); } else if(this.parent.element.msRequestFullscreen) { document.addEventListener("MSFullscreenChange",$bind(this,this.handleFullscreenEvent),false); document.addEventListener("MSFullscreenError",$bind(this,this.handleFullscreenEvent),false); this.parent.element.msRequestFullscreen(); } } } else if(this.isFullscreen) { this.requestedFullscreen = false; 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; }, setIcon: function(image) { (lime__$internal_graphics_ImageCanvasUtil().default).convertToCanvas(image); var link = window.document.querySelector("link[rel*='icon']"); if(link == null) { link = window.document.createElement("link"); } link.type = "image/x-icon"; link.rel = "shortcut icon"; link.href = image.buffer.get_src().toDataURL("image/x-icon"); window.document.getElementsByTagName("head")[0].appendChild(link); }, setMaximized: function(value) { return false; }, setMinimized: function(value) { return false; }, setMouseLock: function(value) { }, setOpacity: function(value) { }, setResizable: function(value) { return value; }, setTextInputEnabled: function(value) { if(value) { if(HTML5Window.textInput == null) { HTML5Window.textInput = window.document.createElement("input"); HTML5Window.textInput.type = window.navigator.userAgent.indexOf("Android") >= 0 ? "password" : "text"; HTML5Window.textInput.style.position = "absolute"; HTML5Window.textInput.style.opacity = "0"; HTML5Window.textInput.style.color = "transparent"; HTML5Window.textInput.value = HTML5Window.dummyCharacter; HTML5Window.textInput.autocapitalize = "off"; HTML5Window.textInput.autocorrect = "off"; HTML5Window.textInput.autocomplete = "off"; HTML5Window.textInput.style.left = "0px"; HTML5Window.textInput.style.top = "50%"; if(new (EReg().default)("(iPad|iPhone|iPod).*OS 8_","gi").match(window.navigator.userAgent)) { HTML5Window.textInput.style.fontSize = "0px"; HTML5Window.textInput.style.width = "0px"; HTML5Window.textInput.style.height = "0px"; } else { HTML5Window.textInput.style.width = "1px"; HTML5Window.textInput.style.height = "1px"; } HTML5Window.textInput.style.pointerEvents = "none"; HTML5Window.textInput.style.zIndex = "-10000000"; } if(HTML5Window.textInput.parentNode == null) { this.parent.element.appendChild(HTML5Window.textInput); } if(!this.textInputEnabled) { HTML5Window.textInput.addEventListener("input",$bind(this,this.handleInputEvent),true); HTML5Window.textInput.addEventListener("blur",$bind(this,this.handleFocusEvent),true); HTML5Window.textInput.addEventListener("cut",$bind(this,this.handleCutOrCopyEvent),true); HTML5Window.textInput.addEventListener("copy",$bind(this,this.handleCutOrCopyEvent),true); HTML5Window.textInput.addEventListener("paste",$bind(this,this.handlePasteEvent),true); HTML5Window.textInput.addEventListener("compositionstart",$bind(this,this.handleCompositionstartEvent),true); HTML5Window.textInput.addEventListener("compositionend",$bind(this,this.handleCompositionendEvent),true); } HTML5Window.textInput.focus(); HTML5Window.textInput.select(); } else if(HTML5Window.textInput != null) { HTML5Window.textInput.blur(); HTML5Window.textInput.removeEventListener("input",$bind(this,this.handleInputEvent),true); HTML5Window.textInput.removeEventListener("blur",$bind(this,this.handleFocusEvent),true); HTML5Window.textInput.removeEventListener("cut",$bind(this,this.handleCutOrCopyEvent),true); HTML5Window.textInput.removeEventListener("copy",$bind(this,this.handleCutOrCopyEvent),true); HTML5Window.textInput.removeEventListener("paste",$bind(this,this.handlePasteEvent),true); HTML5Window.textInput.removeEventListener("compositionstart",$bind(this,this.handleCompositionstartEvent),true); HTML5Window.textInput.removeEventListener("compositionend",$bind(this,this.handleCompositionendEvent),true); } return this.textInputEnabled = value; }, setTextInputRect: function(value) { return this.textInputRect = value; }, handleCompositionstartEvent: function(e) { this.imeCompositionActive = true; }, handleCompositionendEvent: function(e) { this.imeCompositionActive = false; this.handleInputEvent(e); }, setTitle: function(value) { if(value != null) { window.document.title = value; } return value; }, setVisible: function(value) { return value; }, updateSize: function() { if(!this.parent.__resizable) { return; } var elementWidth; var elementHeight; if(this.parent.element != null) { elementWidth = this.parent.element.clientWidth; elementHeight = this.parent.element.clientHeight; } else { elementWidth = window.innerWidth; elementHeight = window.innerHeight; } if(elementWidth != this.cacheElementWidth || elementHeight != this.cacheElementHeight) { this.cacheElementWidth = elementWidth; this.cacheElementHeight = elementHeight; var stretch = this.resizeElement || this.setWidth == 0 && this.setHeight == 0; if(this.parent.element != null && (this.div == null || this.div != null && stretch)) { if(stretch) { if(this.parent.__width != elementWidth || this.parent.__height != elementHeight) { this.parent.__width = elementWidth; this.parent.__height = elementHeight; if(this.canvas != null) { if(this.parent.element != this.canvas) { this.canvas.width = Math.round(elementWidth * this.scale); this.canvas.height = Math.round(elementHeight * this.scale); this.canvas.style.width = elementWidth + "px"; this.canvas.style.height = elementHeight + "px"; } } else { this.div.style.width = elementWidth + "px"; this.div.style.height = elementHeight + "px"; } this.parent.onResize.dispatch(elementWidth,elementHeight); } } else { var scaleX = this.setWidth != 0 ? elementWidth / this.setWidth : 1; var scaleY = this.setHeight != 0 ? elementHeight / this.setHeight : 1; var targetWidth = elementWidth; var targetHeight = elementHeight; var marginLeft = 0; var marginTop = 0; if(scaleX < scaleY) { targetHeight = Math.floor(this.setHeight * scaleX); marginTop = Math.floor((elementHeight - targetHeight) / 2); } else { targetWidth = Math.floor(this.setWidth * scaleY); marginLeft = Math.floor((elementWidth - targetWidth) / 2); } if(this.canvas != null) { if(this.parent.element != this.canvas) { this.canvas.style.width = targetWidth + "px"; this.canvas.style.height = targetHeight + "px"; this.canvas.style.marginLeft = marginLeft + "px"; this.canvas.style.marginTop = marginTop + "px"; } } else { this.div.style.width = targetWidth + "px"; this.div.style.height = targetHeight + "px"; this.div.style.marginLeft = marginLeft + "px"; this.div.style.marginTop = marginTop + "px"; } } } } }, warpMouse: function(x,y) { } }; HTML5Window.prototype.__class__ = HTML5Window.prototype.constructor = $hxClasses["lime._internal.backend.html5.HTML5Window"] = HTML5Window; // Init // Statics HTML5Window.dummyCharacter = "" HTML5Window.windowID = 0 // Export exports.default = HTML5Window;