UNPKG

starling-framework

Version:

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

271 lines (254 loc) 11.1 kB
// Class: starling.display.Canvas 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 starling_display_DisplayObjectContainer() {return require("./../../starling/display/DisplayObjectContainer");} function starling_geom_Polygon() {return require("./../../starling/geom/Polygon");} function openfl__$Vector_Vector_$Impl_$() {return require("./../../openfl/_Vector/Vector_Impl_");} function openfl_display_GraphicsSolidFill() {return $import(require("openfl/display/GraphicsSolidFill"));} function js_Boot() {return require("./../../js/Boot");} function openfl_display_GraphicsPath() {return $import(require("openfl/display/GraphicsPath"));} function haxe_Log() {return require("./../../haxe/Log");} function openfl_display_GraphicsEndFill() {return $import(require("openfl/display/GraphicsEndFill"));} function starling_rendering_VertexData() {return require("./../../starling/rendering/VertexData");} function starling_rendering_IndexData() {return require("./../../starling/rendering/IndexData");} function starling_display_Mesh() {return require("./../../starling/display/Mesh");} function openfl_VectorData() {return $import(require("openfl/Vector"));} function starling_utils_MathUtil() {return require("./../../starling/utils/MathUtil");} // Constructor var Canvas = function() { (starling_display_DisplayObjectContainer().default).call(this); this.__polygons = (openfl__$Vector_Vector_$Impl_$().default)._new(); this.__currentPath = (openfl__$Vector_Vector_$Impl_$().default)._new(); this.__fillColor = 16777215; this.__fillAlpha = 1.0; this.set_touchGroup(true); } // Meta Canvas.__name__ = "starling.display.Canvas"; Canvas.__isInterface__ = false; Canvas.__super__ = (starling_display_DisplayObjectContainer().default); Canvas.prototype = $extend((starling_display_DisplayObjectContainer().default).prototype, { dispose: function() { this.__polygons.length = 0; this.__currentPath.length = 0; (starling_display_DisplayObjectContainer().default).prototype.dispose.call(this); }, hitTest: function(localPoint) { if(!this.get_visible() || !this.get_touchable() || !this.hitTestMask(localPoint)) { return null; } var len = this.__polygons.length; var _g = 0; var _g1 = len; while(_g < _g1) { var i = _g++; if(this.__polygons[i].containsPoint(localPoint)) { return this; } } return null; }, drawCircle: function(x,y,radius,numSides) { if(numSides == null) { numSides = -1; } this.drawPolygon((starling_geom_Polygon().default).createCircle(x,y,radius,numSides)); }, drawEllipse: function(x,y,width,height,numSides) { if(numSides == null) { numSides = -1; } var radiusX = width / 2.0; var radiusY = height / 2.0; this.drawPolygon((starling_geom_Polygon().default).createEllipse(x + radiusX,y + radiusY,radiusX,radiusY,numSides)); }, drawRectangle: function(x,y,width,height) { this.drawPolygon((starling_geom_Polygon().default).createRectangle(x,y,width,height)); }, drawRoundRectangle: function(x,y,width,height,ellipseWidth,ellipseHeight) { if(ellipseHeight == null) { ellipseHeight = NaN; } this.drawPolygon((starling_geom_Polygon().default).createRoundRectangle(x,y,width,height,ellipseWidth,ellipseHeight)); }, beginFill: function(color,alpha) { if(alpha == null) { alpha = 1.0; } if(color == null) { color = 16777215; } this.closeCurrentPathIfNeeded(); this.__fillColor = color; this.__fillAlpha = alpha; }, endFill: function() { this.closeCurrentPathIfNeeded(); this.__fillColor = 16777215; this.__fillAlpha = 1.0; }, moveTo: function(x,y) { this.closeCurrentPathIfNeeded(); this.__currentPath.length = 0; (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,x); (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,y); }, lineTo: function(x,y) { if(this.__currentPath.length == 0) { (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,0); (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,0); } (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,x); (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,y); this.__drawPathIfClosed(); }, curveTo: function(controlX,controlY,anchorX,anchorY) { if(this.__currentPath.length == 0) { (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,0); (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,0); } var lastX = this.__currentPath[this.__currentPath.length - 2]; var lastY = this.__currentPath[this.__currentPath.length - 1]; Canvas.__tesselateCurve(lastX,lastY,controlX,controlY,anchorX,anchorY,this.__currentPath); this.__drawPathIfClosed(); }, closeCurrentPathIfNeeded: function() { if(this.__currentPath.length < 6) { return; } var firstX = this.__currentPath[0]; var firstY = this.__currentPath[1]; var lastX = this.__currentPath[this.__currentPath.length - 2]; var lastY = this.__currentPath[this.__currentPath.length - 1]; var isClosed = lastX == firstX && lastY == firstY; if(!isClosed) { (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,firstX); (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,firstY); } this.__drawPathIfClosed(); }, drawGraphicsData: function(graphicsData) { var graphicsDataLength = graphicsData.length; var _g = 0; var _g1 = graphicsDataLength; while(_g < _g1) { var graphPropIndex = _g++; var graphicsProperties = graphicsData[graphPropIndex]; if(((graphicsProperties) instanceof (openfl_display_GraphicsSolidFill().default))) { this.beginFill(((js_Boot().default).__cast(graphicsProperties , (openfl_display_GraphicsSolidFill().default))).color,((js_Boot().default).__cast(graphicsProperties , (openfl_display_GraphicsSolidFill().default))).alpha); } else if(((graphicsProperties) instanceof (openfl_display_GraphicsPath().default))) { var i = 0; var data = ((js_Boot().default).__cast(graphicsProperties , (openfl_display_GraphicsPath().default))).data; var commandLength = ((js_Boot().default).__cast(graphicsProperties , (openfl_display_GraphicsPath().default))).commands.length; var _g2 = 0; var _g11 = commandLength; while(_g2 < _g11) { var commandIndex = _g2++; var command = ((js_Boot().default).__cast(graphicsProperties , (openfl_display_GraphicsPath().default))).commands[commandIndex]; switch(command) { case 1: this.moveTo(data[i],data[i + 1]); i += 2; break; case 2: this.lineTo(data[i],data[i + 1]); i += 2; break; case 3: this.curveTo(data[i],data[i + 1],data[i + 2],data[i + 3]); i += 4; break; default: (haxe_Log().default).trace("[Starling] Canvas.drawGraphicsData: Unimplemented Command in Graphics Path of type",{ fileName : "../src/starling/display/Canvas.hx", lineNumber : 247, className : "starling.display.Canvas", methodName : "drawGraphicsData", customParams : [command]}); } } } else if(((graphicsProperties) instanceof (openfl_display_GraphicsEndFill().default))) { this.endFill(); } else { (haxe_Log().default).trace("[Starling] Canvas.drawGraphicsData: Unimplemented Graphics Data in input:",{ fileName : "../src/starling/display/Canvas.hx", lineNumber : 253, className : "starling.display.Canvas", methodName : "drawGraphicsData", customParams : [graphicsProperties,"at index",(Array.prototype.indexOf.call)(graphicsData,graphicsProperties,0)]}); } } }, clear: function() { this.removeChildren(0,-1,true); this.__polygons.length = 0; this.__currentPath.length = 0; }, drawPolygon: function(polygon) { var vertexData = new (starling_rendering_VertexData().default)(); var indexData = new (starling_rendering_IndexData().default)(polygon.get_numTriangles() * 3); polygon.triangulate(indexData); polygon.copyToVertexData(vertexData); vertexData.colorize("color",this.__fillColor,this.__fillAlpha); this.addChild(new (starling_display_Mesh().default)(vertexData,indexData)); (openfl__$Vector_Vector_$Impl_$().default).set(this.__polygons,this.__polygons.length,polygon); }, __drawPathIfClosed: function() { if(this.__currentPath.length < 4) { return; } var lastX = this.__currentPath[this.__currentPath.length - 2]; var lastY = this.__currentPath[this.__currentPath.length - 1]; if(lastX == this.__currentPath[0] && lastY == this.__currentPath[1]) { var pathCopy = (openfl_VectorData().default).ofArray(this.__currentPath); this.__currentPath.length = 0; this.drawPolygon((starling_geom_Polygon().default).fromVector(pathCopy)); (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,lastX); (openfl__$Vector_Vector_$Impl_$().default).push(this.__currentPath,lastY); } } }); Canvas.prototype.__class__ = Canvas.prototype.constructor = $hxClasses["starling.display.Canvas"] = Canvas; // Init // Statics Canvas.__tesselateCurve = function(startx,starty,cx,cy,endx,endy,array_out,iterationCnt) { if(iterationCnt == null) { iterationCnt = 0; } var maxIterations = 6; var minAngle = 1; var minLengthSqr = 1; var c1x = (startx + cx) * 0.5; var c1y = (starty + cy) * 0.5; var c2x = (cx + endx) * 0.5; var c2y = (cy + endy) * 0.5; var ax = (c1x + c2x) * 0.5; var ay = (c1y + c2y) * 0.5; if(iterationCnt >= maxIterations) { (openfl__$Vector_Vector_$Impl_$().default).push(array_out,ax); (openfl__$Vector_Vector_$Impl_$().default).push(array_out,ay); (openfl__$Vector_Vector_$Impl_$().default).push(array_out,endx); (openfl__$Vector_Vector_$Impl_$().default).push(array_out,endy); return; } var diff_x = endx - startx; var diff_y = endy - starty; var lenSq = diff_x * diff_x + diff_y * diff_y; if(lenSq < minLengthSqr) { (openfl__$Vector_Vector_$Impl_$().default).push(array_out,endx); (openfl__$Vector_Vector_$Impl_$().default).push(array_out,endy); return; } var angle_1 = (starling_utils_MathUtil().default).rad2deg(Math.atan2(cy - starty,cx - startx)); var angle_2 = (starling_utils_MathUtil().default).rad2deg(Math.atan2(endy - cy,endx - cx)); var angle_delta = angle_2 - angle_1; while(angle_delta > 180) angle_delta -= 360; while(angle_delta < -180) angle_delta += 360; angle_delta = angle_delta < 0 ? -angle_delta : angle_delta; if(angle_delta <= minAngle) { (openfl__$Vector_Vector_$Impl_$().default).push(array_out,endx); (openfl__$Vector_Vector_$Impl_$().default).push(array_out,endy); return; } ++iterationCnt; Canvas.__tesselateCurve(startx,starty,c1x,c1y,ax,ay,array_out,iterationCnt); Canvas.__tesselateCurve(ax,ay,c2x,c2y,endx,endy,array_out,iterationCnt); } // Export exports.default = Canvas;