UNPKG

openfl

Version:

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

309 lines (292 loc) 11.2 kB
// Class: openfl.display.DOMRenderer 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 $extend = require("./../../extend_stub").default; function openfl_display_DisplayObjectRenderer() {return require("./../../openfl/display/DisplayObjectRenderer");} function openfl_geom_Rectangle() {return require("./../../openfl/geom/Rectangle");} function openfl_display__$internal_DOMBitmap() {return require("./../../openfl/display/_internal/DOMBitmap");} function openfl_display__$internal_DOMDisplayObject() {return require("./../../openfl/display/_internal/DOMDisplayObject");} function openfl_display__$internal_DOMDisplayObjectContainer() {return require("./../../openfl/display/_internal/DOMDisplayObjectContainer");} function openfl_display__$internal_DOMSimpleButton() {return require("./../../openfl/display/_internal/DOMSimpleButton");} function openfl_display__$internal_DOMTextField() {return require("./../../openfl/display/_internal/DOMTextField");} function openfl_display__$internal_DOMVideo() {return require("./../../openfl/display/_internal/DOMVideo");} function openfl_display__$internal_DOMTilemap() {return require("./../../openfl/display/_internal/DOMTilemap");} function openfl_geom_Matrix() {return require("./../../openfl/geom/Matrix");} function openfl_display_DisplayObject() {return require("./../../openfl/display/DisplayObject");} function openfl_display_CanvasRenderer() {return require("./../../openfl/display/CanvasRenderer");} // Constructor var DOMRenderer = function(element) { (openfl_display_DisplayObjectRenderer().default).call(this); this.element = element; (openfl_display_DisplayObject().default).__supportDOM = true; var prefix = ((function () { var styles = window.getComputedStyle(document.documentElement, ''), pre = (Array.prototype.slice .call(styles) .join('') .match(/-(moz|webkit|ms)-/) || (styles.OLink === '' && ['', 'o']) )[1], dom = ('WebKit|Moz|MS|O').match(new RegExp('(' + pre + ')', 'i'))[1]; return { dom: dom, lowercase: pre, css: '-' + pre + '-', js: pre[0].toUpperCase() + pre.substr(1) }; }))(); this.__vendorPrefix = prefix.lowercase; this.__transformProperty = prefix.lowercase == "webkit" ? "-webkit-transform" : "transform"; this.__transformOriginProperty = prefix.lowercase == "webkit" ? "-webkit-transform-origin" : "transform-origin"; this.__clipRects = []; this.__numClipRects = 0; this.__z = 0; this.__type = "dom"; this.__canvasRenderer = new (openfl_display_CanvasRenderer().default)(null); this.__canvasRenderer.__isDOM = true; } // Meta DOMRenderer.__name__ = "openfl.display.DOMRenderer"; DOMRenderer.__isInterface__ = false; DOMRenderer.__super__ = (openfl_display_DisplayObjectRenderer().default); DOMRenderer.prototype = $extend((openfl_display_DisplayObjectRenderer().default).prototype, { applyStyle: function(parent,childElement) { if(parent != null && childElement != null) { if(parent.__style == null || childElement.parentElement != this.element) { this.__initializeElement(parent,childElement); } parent.__style = childElement.style; this.__updateClip(parent); this.__applyStyle(parent,true,true,true); } }, clearStyle: function(childElement) { if(childElement != null && childElement.parentElement == this.element) { this.element.removeChild(childElement); } }, __applyStyle: function(displayObject,setTransform,setAlpha,setClip) { var style = displayObject.__style; if(setTransform && displayObject.__renderTransformChanged) { style.setProperty(this.__transformProperty,displayObject.__renderTransform.to3DString(this.__roundPixels),null); } if(displayObject.__worldZ != ++this.__z) { displayObject.__worldZ = this.__z; style.setProperty("z-index",displayObject.__worldZ == null ? "null" : "" + displayObject.__worldZ,null); } if(setAlpha && displayObject.__worldAlphaChanged) { if(displayObject.__worldAlpha < 1) { style.setProperty("opacity",displayObject.__worldAlpha == null ? "null" : "" + displayObject.__worldAlpha,null); } else { style.removeProperty("opacity"); } } if(setClip && displayObject.__worldClipChanged) { if(displayObject.__worldClip == null) { style.removeProperty("clip"); } else { var clip = displayObject.__worldClip; style.setProperty("clip","rect(" + clip.y + "px, " + clip.get_right() + "px, " + clip.get_bottom() + "px, " + clip.x + "px)",null); } } }, __initializeElement: function(displayObject,element) { var style = displayObject.__style = element.style; style.setProperty("position","absolute",null); style.setProperty("top","0",null); style.setProperty("left","0",null); style.setProperty(this.__transformOriginProperty,"0 0 0",null); this.element.appendChild(element); displayObject.__worldAlphaChanged = true; displayObject.__renderTransformChanged = true; displayObject.__worldVisibleChanged = true; displayObject.__worldClipChanged = true; displayObject.__worldClip = null; displayObject.__worldZ = -1; }, __popMask: function() { this.__popMaskRect(); }, __popMaskObject: function(object,handleScrollRect) { if(handleScrollRect == null) { handleScrollRect = true; } if(object.__mask != null) { this.__popMask(); } if(handleScrollRect && object.__scrollRect != null) { this.__popMaskRect(); } }, __popMaskRect: function() { if(this.__numClipRects > 0) { this.__numClipRects--; if(this.__numClipRects > 0) { this.__currentClipRect = this.__clipRects[this.__numClipRects - 1]; } else { this.__currentClipRect = null; } } }, __pushMask: function(mask) { this.__pushMaskRect(mask.getBounds(mask),mask.__renderTransform); }, __pushMaskObject: function(object,handleScrollRect) { if(handleScrollRect == null) { handleScrollRect = true; } if(handleScrollRect && object.__scrollRect != null) { this.__pushMaskRect(object.__scrollRect,object.__renderTransform); } if(object.__mask != null) { this.__pushMask(object.__mask); } }, __pushMaskRect: function(rect,transform) { if(this.__numClipRects == this.__clipRects.length) { this.__clipRects[this.__numClipRects] = new (openfl_geom_Rectangle().default)(); } var clipRect = this.__clipRects[this.__numClipRects]; rect.__transform(clipRect,transform); if(this.__numClipRects > 0) { var parentClipRect = this.__clipRects[this.__numClipRects - 1]; clipRect.__contract(parentClipRect.x,parentClipRect.y,parentClipRect.width,parentClipRect.height); } if(clipRect.height < 0) { clipRect.height = 0; } if(clipRect.width < 0) { clipRect.width = 0; } this.__currentClipRect = clipRect; this.__numClipRects++; }, __render: function(object) { if(!this.__stage.__transparent) { this.element.style.background = this.__stage.__colorString; } else { this.element.style.background = "none"; } this.__z = 1; this.__renderDrawable(object); }, __renderDrawable: function(object) { if(object == null) { return; } switch(object.__drawableType) { case 0: break; case 2: (openfl_display__$internal_DOMBitmap().default).renderDrawable(object,this); break; case 3: (openfl_display__$internal_DOMDisplayObject().default).renderDrawable(object,this); break; case 4:case 5: (openfl_display__$internal_DOMDisplayObjectContainer().default).renderDrawable(object,this); break; case 6: (openfl_display__$internal_DOMSimpleButton().default).renderDrawable(object,this); break; case 7: (openfl_display__$internal_DOMTextField().default).renderDrawable(object,this); break; case 8: (openfl_display__$internal_DOMVideo().default).renderDrawable(object,this); break; case 9: (openfl_display__$internal_DOMTilemap().default).renderDrawable(object,this); break; case 10: var domElement = object; if(domElement.stage != null && domElement.__worldVisible && domElement.__renderable) { if(!domElement.__active) { this.__initializeElement(domElement,domElement.__element); domElement.__active = true; } this.__updateClip(domElement); this.__applyStyle(domElement,true,true,true); } else if(domElement.__active) { this.element.removeChild(domElement.__element); domElement.__active = false; } (openfl_display__$internal_DOMDisplayObject().default).renderDrawable(domElement,this); break; default: } }, __renderDrawableClear: function(object) { if(object == null) { return; } switch(object.__drawableType) { case 0: break; case 2: (openfl_display__$internal_DOMBitmap().default).renderDrawableClear(object,this); break; case 3: (openfl_display__$internal_DOMDisplayObject().default).renderDrawableClear(object,this); break; case 4:case 5: (openfl_display__$internal_DOMDisplayObjectContainer().default).renderDrawableClear(object,this); break; case 6: (openfl_display__$internal_DOMSimpleButton().default).renderDrawableClear(object,this); break; case 7: (openfl_display__$internal_DOMTextField().default).renderDrawableClear(object,this); break; case 8: (openfl_display__$internal_DOMVideo().default).renderDrawableClear(object,this); break; case 9: (openfl_display__$internal_DOMTilemap().default).renderDrawableClear(object,this); break; default: } }, __setBlendMode: function(value) { if(this.__overrideBlendMode != null) { value = this.__overrideBlendMode; } if(this.__blendMode == value) { return; } this.__blendMode = value; }, __updateClip: function(displayObject) { if(this.__currentClipRect == null) { displayObject.__worldClipChanged = displayObject.__worldClip != null; displayObject.__worldClip = null; } else { if(displayObject.__worldClip == null) { displayObject.__worldClip = new (openfl_geom_Rectangle().default)(); } var clip = (openfl_geom_Rectangle().default).__pool.get(); var matrix = (openfl_geom_Matrix().default).__pool.get(); matrix.copyFrom(displayObject.__renderTransform); matrix.invert(); this.__currentClipRect.__transform(clip,matrix); if(clip.equals(displayObject.__worldClip)) { displayObject.__worldClipChanged = false; } else { displayObject.__worldClip.copyFrom(clip); displayObject.__worldClipChanged = true; } (openfl_geom_Rectangle().default).__pool.release(clip); (openfl_geom_Matrix().default).__pool.release(matrix); } } }); DOMRenderer.prototype.__class__ = DOMRenderer.prototype.constructor = $hxClasses["openfl.display.DOMRenderer"] = DOMRenderer; // Init // Statics DOMRenderer.__meta__ = { fields : { element : { SuppressWarnings : ["checkstyle:Dynamic"]}, applyStyle : { SuppressWarnings : ["checkstyle:Dynamic"]}, clearStyle : { SuppressWarnings : ["checkstyle:Dynamic"]}, _ : { SuppressWarnings : ["checkstyle:Dynamic"]}}} // Export exports.default = DOMRenderer;