starling-framework
Version:
A fast, productive library for 2D cross-platform development.
271 lines (254 loc) • 11.1 kB
JavaScript
// 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;