UNPKG

openfl

Version:

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

1,381 lines (1,367 loc) 51.4 kB
// Class: openfl.display._internal.CanvasGraphics 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; function openfl_display__$internal_DrawCommandBuffer() {return require("./../../../openfl/display/_internal/DrawCommandBuffer");} function lime__$internal_graphics_ImageCanvasUtil() {return require("./../../../lime/_internal/graphics/ImageCanvasUtil");} function openfl_geom_Matrix() {return require("./../../../openfl/geom/Matrix");} function openfl_geom_Point() {return require("./../../../openfl/geom/Point");} function Std() {return require("./../../../Std");} function _$UInt_UInt_$Impl_$() {return require("./../../../_UInt/UInt_Impl_");} function openfl_display__$internal_DrawCommandReader() {return require("./../../../openfl/display/_internal/DrawCommandReader");} function openfl_display__$internal_DrawCommandType() {return require("./../../../openfl/display/_internal/DrawCommandType");} function openfl__$Vector_Vector_$Impl_$() {return require("./../../../openfl/_Vector/Vector_Impl_");} function StringTools() {return require("./../../../StringTools");} function openfl_geom_Rectangle() {return require("./../../../openfl/geom/Rectangle");} function openfl_display_BitmapData() {return require("./../../../openfl/display/BitmapData");} // Constructor var CanvasGraphics = function(){} // Meta CanvasGraphics.__name__ = "openfl.display._internal.CanvasGraphics"; CanvasGraphics.__isInterface__ = false; CanvasGraphics.prototype = { }; CanvasGraphics.prototype.__class__ = CanvasGraphics.prototype.constructor = $hxClasses["openfl.display._internal.CanvasGraphics"] = CanvasGraphics; // Init { CanvasGraphics.hitTestCanvas = typeof(window) != "undefined" ? window.document.createElement("canvas") : null; CanvasGraphics.hitTestContext = typeof(window) != "undefined" ? CanvasGraphics.hitTestCanvas.getContext("2d") : null; }; // Statics CanvasGraphics.closePath = function(strokeBefore) { if(strokeBefore == null) { strokeBefore = false; } if(CanvasGraphics.context.strokeStyle == null) { return; } if(!strokeBefore) { CanvasGraphics.context.closePath(); } CanvasGraphics.context.stroke(); if(strokeBefore) { CanvasGraphics.context.closePath(); } CanvasGraphics.context.beginPath(); } CanvasGraphics.createBitmapFill = function(bitmap,bitmapRepeat,smooth) { (lime__$internal_graphics_ImageCanvasUtil().default).convertToCanvas(bitmap.image); CanvasGraphics.setSmoothing(smooth); return CanvasGraphics.context.createPattern(bitmap.image.get_src(),bitmapRepeat ? "repeat" : "no-repeat"); } CanvasGraphics.createGradientPattern = function(type,colors,alphas,ratios,matrix,spreadMethod,interpolationMethod,focalPointRatio) { var gradientFill = null; var point = null; var point2 = null; var releaseMatrix = false; var ratio = 0.0; if(matrix == null) { matrix = (openfl_geom_Matrix().default).__pool.get(); matrix.identity(); releaseMatrix = true; } switch(type) { case "linear": if(spreadMethod == "pad") { gradientFill = CanvasGraphics.context.createLinearGradient(-819.2,0,819.2,0); CanvasGraphics.pendingMatrix = matrix.clone(); CanvasGraphics.inversePendingMatrix = matrix.clone(); CanvasGraphics.inversePendingMatrix.invert(); var _g = 0; var _g1 = colors.length; while(_g < _g1) { var i = _g++; ratio = ratios[i] / 255; if(ratio < 0) { ratio = 0; } else if(ratio > 1) { ratio = 1; } gradientFill.addColorStop(ratio,CanvasGraphics.getRGBA(colors[i],alphas[i])); } if(point != null) { (openfl_geom_Point().default).__pool.release(point); } if(point2 != null) { (openfl_geom_Point().default).__pool.release(point2); } if(releaseMatrix) { (openfl_geom_Matrix().default).__pool.release(matrix); } return gradientFill; } var gradientScale = spreadMethod == "pad" ? 1.0 : 25.0; var dx = 0.5 * (gradientScale - 1.0) * 1638.4; var canvas = window.document.createElement("canvas"); var context2 = canvas.getContext("2d"); var dimensions = CanvasGraphics.getDimensions(matrix); canvas.width = CanvasGraphics.context.canvas.width; canvas.height = CanvasGraphics.context.canvas.height; gradientFill = CanvasGraphics.context.createLinearGradient(-819.2 - dx,0,819.2 + dx,0); if(spreadMethod == "reflect") { var t = 0; var step = 0.04; var a; while(t < 1) { var _g2 = 0; var _g11 = colors.length; while(_g2 < _g11) { var i1 = _g2++; ratio = ratios[i1] / 255; ratio = t + ratio * step; if(ratio < 0) { ratio = 0; } else if(ratio > 1) { ratio = 1; } gradientFill.addColorStop(ratio,CanvasGraphics.getRGBA(colors[i1],alphas[i1])); } t += step; a = colors.length - 1; while(a >= 0) { ratio = ratios[a] / 255; ratio = t + (1.0 - ratio) * step; if(ratio < 0) { ratio = 0; } else if(ratio > 1) { ratio = 1; } gradientFill.addColorStop(ratio,CanvasGraphics.getRGBA(colors[a],alphas[a])); --a; } t += step; } } else if(spreadMethod == "repeat") { var t1 = 0; var step1 = 0.04; var a1; while(t1 < 1) { var _g3 = 0; var _g12 = colors.length; while(_g3 < _g12) { var i2 = _g3++; ratio = ratios[i2] / 255; ratio = t1 + ratio * step1; if(ratio < 0) { ratio = 0; } else if(ratio > 1) { ratio = 0.999; } gradientFill.addColorStop(ratio,CanvasGraphics.getRGBA(colors[i2],alphas[i2])); } ratio = t1 + 0.001; if(ratio < 0) { ratio = 0; } else if(ratio > 1) { ratio = 1; } gradientFill.addColorStop(ratio - 0.001,CanvasGraphics.getRGBA(colors[colors.length - 1],alphas[alphas.length - 1])); gradientFill.addColorStop(ratio,CanvasGraphics.getRGBA(colors[0],alphas[0])); t1 += step1; } } CanvasGraphics.pendingMatrix = new (openfl_geom_Matrix().default)(); CanvasGraphics.pendingMatrix.tx = matrix.tx - dimensions.width / 2; CanvasGraphics.pendingMatrix.ty = matrix.ty - dimensions.height / 2; CanvasGraphics.inversePendingMatrix = CanvasGraphics.pendingMatrix.clone(); CanvasGraphics.inversePendingMatrix.invert(); var path = new Path2D(); path.rect(0,0,canvas.width,canvas.height); path.closePath(); var gradientMatrix = new DOMMatrix([matrix.a,matrix.b,matrix.c,matrix.d,matrix.tx,matrix.ty]); var inverseMatrix = gradientMatrix.inverse(); var untransformedPath = new Path2D(); untransformedPath.addPath(path,inverseMatrix); context2.fillStyle = gradientFill; context2.setTransform(gradientMatrix); context2.fill(untransformedPath); return CanvasGraphics.context.createPattern(canvas,"no-repeat"); case "radial": var radius = 819.2; focalPointRatio = focalPointRatio > 1.0 ? 1.0 : focalPointRatio < -1.0 ? -1.0 : focalPointRatio; gradientFill = CanvasGraphics.context.createRadialGradient(radius * focalPointRatio,0,0,0,0,radius); CanvasGraphics.pendingMatrix = matrix.clone(); CanvasGraphics.inversePendingMatrix = matrix.clone(); CanvasGraphics.inversePendingMatrix.invert(); var _g4 = 0; var _g13 = colors.length; while(_g4 < _g13) { var i3 = _g4++; ratio = ratios[i3] / 255; if(ratio < 0) { ratio = 0; } else if(ratio > 1) { ratio = 1; } gradientFill.addColorStop(ratio,CanvasGraphics.getRGBA(colors[i3],alphas[i3])); } if(point != null) { (openfl_geom_Point().default).__pool.release(point); } if(point2 != null) { (openfl_geom_Point().default).__pool.release(point2); } if(releaseMatrix) { (openfl_geom_Matrix().default).__pool.release(matrix); } return gradientFill; } } CanvasGraphics.getRGBA = function(color,alpha) { var r = (color & 16711680) >>> 16; var g = (color & 65280) >>> 8; var b = color & 255; return "rgba(" + (Std().default).string(r == null ? null : (_$UInt_UInt_$Impl_$().default).toFloat(r)) + ", " + (Std().default).string(g == null ? null : (_$UInt_UInt_$Impl_$().default).toFloat(g)) + ", " + (Std().default).string(b == null ? null : (_$UInt_UInt_$Impl_$().default).toFloat(b)) + ", " + alpha + ")"; } CanvasGraphics.getDimensions = function(matrix) { var angle = Math.atan2(matrix.c,matrix.a); var cos = Math.cos(angle); var w = matrix.a / cos * 1638.4; var h = matrix.d / cos * 1638.4; if(w == 0 && h == 0) { h = 819.2; w = h; } return { width : w, height : h}; } CanvasGraphics.createTempPatternCanvas = function(bitmap,repeat,width,height) { var canvas = window.document.createElement("canvas"); var context = canvas.getContext("2d"); canvas.width = width; canvas.height = height; var tmp = bitmap.image.get_src(); context.fillStyle = context.createPattern(tmp,repeat ? "repeat" : "no-repeat"); context.beginPath(); context.moveTo(0,0); context.lineTo(0,height); context.lineTo(width,height); context.lineTo(width,0); context.lineTo(0,0); context.closePath(); if(!CanvasGraphics.hitTesting) { context.fill(CanvasGraphics.windingRule); } return canvas; } CanvasGraphics.drawRoundRect = function(x,y,width,height,ellipseWidth,ellipseHeight) { if(ellipseHeight == null) { ellipseHeight = ellipseWidth; } ellipseWidth *= 0.5; ellipseHeight *= 0.5; if(ellipseWidth > width / 2) { ellipseWidth = width / 2; } if(ellipseHeight > height / 2) { ellipseHeight = height / 2; } var xe = x + width; var ye = y + height; var cx1 = -ellipseWidth + ellipseWidth * 0.70710678118654752440084436210485; var cx2 = -ellipseWidth + ellipseWidth * 0.4142135623730950488016887242097; var cy1 = -ellipseHeight + ellipseHeight * 0.70710678118654752440084436210485; var cy2 = -ellipseHeight + ellipseHeight * 0.4142135623730950488016887242097; CanvasGraphics.context.moveTo(xe,ye - ellipseHeight); CanvasGraphics.context.quadraticCurveTo(xe,ye + cy2,xe + cx1,ye + cy1); CanvasGraphics.context.quadraticCurveTo(xe + cx2,ye,xe - ellipseWidth,ye); CanvasGraphics.context.lineTo(x + ellipseWidth,ye); CanvasGraphics.context.quadraticCurveTo(x - cx2,ye,x - cx1,ye + cy1); CanvasGraphics.context.quadraticCurveTo(x,ye + cy2,x,ye - ellipseHeight); CanvasGraphics.context.lineTo(x,y + ellipseHeight); CanvasGraphics.context.quadraticCurveTo(x,y - cy2,x - cx1,y - cy1); CanvasGraphics.context.quadraticCurveTo(x - cx2,y,x + ellipseWidth,y); CanvasGraphics.context.lineTo(xe - ellipseWidth,y); CanvasGraphics.context.quadraticCurveTo(xe + cx2,y,xe + cx1,y - cy1); CanvasGraphics.context.quadraticCurveTo(xe,y - cy2,xe,y + ellipseHeight); CanvasGraphics.context.lineTo(xe,ye - ellipseHeight); } CanvasGraphics.endFill = function() { CanvasGraphics.context.beginPath(); CanvasGraphics.playCommands(CanvasGraphics.fillCommands,false); CanvasGraphics.fillCommands.clear(); } CanvasGraphics.endStroke = function() { CanvasGraphics.context.beginPath(); CanvasGraphics.playCommands(CanvasGraphics.strokeCommands,true); CanvasGraphics.context.closePath(); CanvasGraphics.strokeCommands.clear(); } CanvasGraphics.hitTest = function(graphics,x,y) { CanvasGraphics.bounds = graphics.__bounds; CanvasGraphics.graphics = graphics; if(graphics.__commands.get_length() == 0 || CanvasGraphics.bounds == null || CanvasGraphics.bounds.width <= 0 || CanvasGraphics.bounds.height <= 0) { CanvasGraphics.graphics = null; return false; } else { CanvasGraphics.hitTesting = true; var transform = graphics.__renderTransform; var px = transform.__transformX(x,y); var py = transform.__transformY(x,y); x = px; y = py; x -= transform.__transformX(CanvasGraphics.bounds.x,CanvasGraphics.bounds.y); y -= transform.__transformY(CanvasGraphics.bounds.x,CanvasGraphics.bounds.y); var cacheCanvas = graphics.__canvas; var cacheContext = graphics.__context; graphics.__canvas = CanvasGraphics.hitTestCanvas; graphics.__context = CanvasGraphics.hitTestContext; CanvasGraphics.context = graphics.__context; CanvasGraphics.context.setTransform(transform.a,transform.b,transform.c,transform.d,transform.tx,transform.ty); CanvasGraphics.fillCommands.clear(); CanvasGraphics.strokeCommands.clear(); CanvasGraphics.hasFill = false; CanvasGraphics.hasStroke = false; CanvasGraphics.bitmapFill = null; CanvasGraphics.bitmapRepeat = false; CanvasGraphics.windingRule = "evenodd"; var data = new (openfl_display__$internal_DrawCommandReader().default)(graphics.__commands); var _g = 0; var _g1 = graphics.__commands.types; while(_g < _g1.length) { var type = _g1[_g]; ++_g; switch(type._hx_index) { case 0:case 1:case 2:case 3: CanvasGraphics.endFill(); if(CanvasGraphics.hasFill && CanvasGraphics.context.isPointInPath(x,y,CanvasGraphics.windingRule)) { data.destroy(); graphics.__canvas = cacheCanvas; graphics.__context = cacheContext; CanvasGraphics.graphics = null; return true; } CanvasGraphics.endStroke(); if(CanvasGraphics.hasStroke && CanvasGraphics.context.isPointInStroke(x,y)) { data.destroy(); graphics.__canvas = cacheCanvas; graphics.__context = cacheContext; CanvasGraphics.graphics = null; return true; } if(type == (openfl_display__$internal_DrawCommandType().default).BEGIN_BITMAP_FILL) { var c = data.readBeginBitmapFill(); CanvasGraphics.fillCommands.beginBitmapFill(c.obj(0),c.obj(1),c.bool(0),c.bool(1)); CanvasGraphics.strokeCommands.beginBitmapFill(c.obj(0),c.obj(1),c.bool(0),c.bool(1)); } else if(type == (openfl_display__$internal_DrawCommandType().default).BEGIN_GRADIENT_FILL) { var c1 = data.readBeginGradientFill(); CanvasGraphics.fillCommands.beginGradientFill(c1.obj(0),c1.iArr(0),c1.fArr(0),c1.iArr(1),c1.obj(1),c1.obj(2),c1.obj(3),c1.float(0)); CanvasGraphics.strokeCommands.beginGradientFill(c1.obj(0),c1.iArr(0),c1.fArr(0),c1.iArr(1),c1.obj(1),c1.obj(2),c1.obj(3),c1.float(0)); } else if(type == (openfl_display__$internal_DrawCommandType().default).BEGIN_SHADER_FILL) { var c2 = data.readBeginShaderFill(); CanvasGraphics.fillCommands.beginShaderFill(c2.obj(0)); CanvasGraphics.strokeCommands.beginShaderFill(c2.obj(0)); } else { var c3 = data.readBeginFill(); CanvasGraphics.fillCommands.beginFill(c3.int(0),1); CanvasGraphics.strokeCommands.beginFill(c3.int(0),1); } break; case 4: var c4 = data.readCubicCurveTo(); CanvasGraphics.fillCommands.cubicCurveTo(c4.float(0),c4.float(1),c4.float(2),c4.float(3),c4.float(4),c4.float(5)); CanvasGraphics.strokeCommands.cubicCurveTo(c4.float(0),c4.float(1),c4.float(2),c4.float(3),c4.float(4),c4.float(5)); break; case 5: var c5 = data.readCurveTo(); CanvasGraphics.fillCommands.curveTo(c5.float(0),c5.float(1),c5.float(2),c5.float(3)); CanvasGraphics.strokeCommands.curveTo(c5.float(0),c5.float(1),c5.float(2),c5.float(3)); break; case 6: var c6 = data.readDrawCircle(); CanvasGraphics.fillCommands.drawCircle(c6.float(0),c6.float(1),c6.float(2)); CanvasGraphics.strokeCommands.drawCircle(c6.float(0),c6.float(1),c6.float(2)); break; case 7: var c7 = data.readDrawEllipse(); CanvasGraphics.fillCommands.drawEllipse(c7.float(0),c7.float(1),c7.float(2),c7.float(3)); CanvasGraphics.strokeCommands.drawEllipse(c7.float(0),c7.float(1),c7.float(2),c7.float(3)); break; case 9: var c8 = data.readDrawRect(); CanvasGraphics.fillCommands.drawRect(c8.float(0),c8.float(1),c8.float(2),c8.float(3)); CanvasGraphics.strokeCommands.drawRect(c8.float(0),c8.float(1),c8.float(2),c8.float(3)); break; case 10: var c9 = data.readDrawRoundRect(); CanvasGraphics.fillCommands.drawRoundRect(c9.float(0),c9.float(1),c9.float(2),c9.float(3),c9.float(4),c9.obj(0)); CanvasGraphics.strokeCommands.drawRoundRect(c9.float(0),c9.float(1),c9.float(2),c9.float(3),c9.float(4),c9.obj(0)); break; case 13: data.readEndFill(); CanvasGraphics.endFill(); if(CanvasGraphics.hasFill && CanvasGraphics.context.isPointInPath(x,y,CanvasGraphics.windingRule)) { data.destroy(); graphics.__canvas = cacheCanvas; graphics.__context = cacheContext; CanvasGraphics.graphics = null; return true; } CanvasGraphics.endStroke(); if(CanvasGraphics.hasStroke && CanvasGraphics.context.isPointInStroke(x,y)) { data.destroy(); graphics.__canvas = cacheCanvas; graphics.__context = cacheContext; CanvasGraphics.graphics = null; return true; } CanvasGraphics.hasFill = false; CanvasGraphics.bitmapFill = null; break; case 14: var c10 = data.readLineBitmapStyle(); CanvasGraphics.strokeCommands.lineBitmapStyle(c10.obj(0),c10.obj(1),c10.bool(0),c10.bool(1)); break; case 15: var c11 = data.readLineGradientStyle(); CanvasGraphics.strokeCommands.lineGradientStyle(c11.obj(0),c11.iArr(0),c11.fArr(0),c11.iArr(1),c11.obj(1),c11.obj(2),c11.obj(3),c11.float(0)); break; case 16: CanvasGraphics.endStroke(); if(CanvasGraphics.hasStroke && CanvasGraphics.context.isPointInStroke(x,y)) { data.destroy(); graphics.__canvas = cacheCanvas; graphics.__context = cacheContext; CanvasGraphics.graphics = null; return true; } var c12 = data.readLineStyle(); CanvasGraphics.strokeCommands.lineStyle(c12.obj(0),c12.int(0),1,c12.bool(0),c12.obj(1),c12.obj(2),c12.obj(3),c12.float(1)); break; case 17: var c13 = data.readLineTo(); CanvasGraphics.fillCommands.lineTo(c13.float(0),c13.float(1)); CanvasGraphics.strokeCommands.lineTo(c13.float(0),c13.float(1)); break; case 18: var c14 = data.readMoveTo(); CanvasGraphics.fillCommands.moveTo(c14.float(0),c14.float(1)); CanvasGraphics.strokeCommands.moveTo(c14.float(0),c14.float(1)); break; case 21: CanvasGraphics.windingRule = "evenodd"; break; case 22: CanvasGraphics.windingRule = "nonzero"; break; default: data.skip(type); } } var hitTest = false; if(CanvasGraphics.fillCommands.get_length() > 0) { CanvasGraphics.endFill(); } if(CanvasGraphics.hasFill && CanvasGraphics.context.isPointInPath(x,y,CanvasGraphics.windingRule)) { hitTest = true; } if(CanvasGraphics.strokeCommands.get_length() > 0) { CanvasGraphics.endStroke(); } if(CanvasGraphics.hasStroke && CanvasGraphics.context.isPointInStroke(x,y)) { hitTest = true; } data.destroy(); graphics.__canvas = cacheCanvas; graphics.__context = cacheContext; CanvasGraphics.graphics = null; return hitTest; } } CanvasGraphics.isCCW = function(x1,y1,x2,y2,x3,y3) { return (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1) < 0; } CanvasGraphics.normalizeUVT = function(uvt,skipT) { if(skipT == null) { skipT = false; } var max = -Infinity; var tmp = -Infinity; var len = uvt.get_length(); var _g = 1; var _g1 = len + 1; while(_g < _g1) { var t = _g++; if(skipT && t % 3 == 0) { continue; } tmp = uvt[t - 1]; if(max < tmp) { max = tmp; } } if(!skipT) { return { max : max, uvt : uvt}; } var result = (openfl__$Vector_Vector_$Impl_$().default)._new(); var _g2 = 1; var _g3 = len + 1; while(_g2 < _g3) { var t1 = _g2++; if(skipT && t1 % 3 == 0) { continue; } (openfl__$Vector_Vector_$Impl_$().default).push(result,uvt[t1 - 1]); } return { max : max, uvt : result}; } CanvasGraphics.playCommands = function(commands,stroke) { if(stroke == null) { stroke = false; } CanvasGraphics.bounds = CanvasGraphics.graphics.__bounds; var offsetX = CanvasGraphics.bounds.x; var offsetY = CanvasGraphics.bounds.y; var positionX = 0.0; var positionY = 0.0; var closeGap = false; var startX = 0.0; var startY = 0.0; var setStart = false; CanvasGraphics.windingRule = "evenodd"; CanvasGraphics.setSmoothing(true); var hasPath = false; var data = new (openfl_display__$internal_DrawCommandReader().default)(commands); var x; var y; var width; var height; var kappa = 0.5522848; var ox; var oy; var xe; var ye; var xm; var ym; var r; var g; var b; var optimizationUsed; var canOptimizeMatrix; var st; var sr; var sb; var sl; var stl = null; var sbr = null; var _g = 0; var _g1 = commands.types; _hx_loop1: while(_g < _g1.length) { var type = _g1[_g]; ++_g; switch(type._hx_index) { case 0: var c = data.readBeginBitmapFill(); CanvasGraphics.bitmapFill = c.obj(0); if(c.obj(0).readable) { var tmp = c.obj(0); var tmp1 = c.bool(0); var tmp2 = c.bool(1); CanvasGraphics.context.fillStyle = CanvasGraphics.createBitmapFill(tmp,tmp1,tmp2); } else { var tmp3 = (StringTools().default).hex(0,6); CanvasGraphics.context.fillStyle = "#" + tmp3; } CanvasGraphics.hasFill = true; if(c.obj(1) != null) { CanvasGraphics.pendingMatrix = c.obj(1); CanvasGraphics.inversePendingMatrix = c.obj(1).clone(); CanvasGraphics.inversePendingMatrix.invert(); } else { CanvasGraphics.pendingMatrix = null; CanvasGraphics.inversePendingMatrix = null; } break; case 1: var c1 = data.readBeginFill(); if(c1.float(0) < 0.005) { CanvasGraphics.hasFill = false; } else { if(c1.float(0) == 1) { var tmp4 = (StringTools().default).hex(c1.int(0) & 16777215,6); CanvasGraphics.context.fillStyle = "#" + tmp4; } else { r = (c1.int(0) & 16711680) >>> 16; g = (c1.int(0) & 65280) >>> 8; b = c1.int(0) & 255; var tmp5 = "rgba(" + r + ", " + g + ", " + b + ", " + c1.float(0); CanvasGraphics.context.fillStyle = tmp5 + ")"; } CanvasGraphics.bitmapFill = null; CanvasGraphics.setSmoothing(true); CanvasGraphics.hasFill = true; } break; case 2: var c2 = data.readBeginGradientFill(); var tmp6 = c2.obj(0); var tmp7 = c2.iArr(0); var tmp8 = c2.fArr(0); var tmp9 = c2.iArr(1); var tmp10 = c2.obj(1); var tmp11 = c2.obj(2); var tmp12 = c2.obj(3); CanvasGraphics.context.fillStyle = CanvasGraphics.createGradientPattern(tmp6,tmp7,tmp8,tmp9,tmp10,tmp11,tmp12,c2.float(0)); CanvasGraphics.bitmapFill = null; CanvasGraphics.setSmoothing(true); CanvasGraphics.hasFill = true; break; case 3: var c3 = data.readBeginShaderFill(); var shaderBuffer = c3.obj(0); if(shaderBuffer.inputCount > 0) { CanvasGraphics.bitmapFill = shaderBuffer.inputs[0]; if(CanvasGraphics.bitmapFill.readable) { CanvasGraphics.context.fillStyle = CanvasGraphics.createBitmapFill(CanvasGraphics.bitmapFill,shaderBuffer.inputWrap[0] != "clamp",shaderBuffer.inputFilter[0] != "nearest"); } else { var tmp13 = (StringTools().default).hex(0,6); CanvasGraphics.context.fillStyle = "#" + tmp13; } CanvasGraphics.hasFill = true; CanvasGraphics.pendingMatrix = null; CanvasGraphics.inversePendingMatrix = null; } break; case 4: var c4 = data.readCubicCurveTo(); hasPath = true; CanvasGraphics.context.bezierCurveTo(c4.float(0) - offsetX,c4.float(1) - offsetY,c4.float(2) - offsetX,c4.float(3) - offsetY,c4.float(4) - offsetX,c4.float(5) - offsetY); positionX = c4.float(4); positionY = c4.float(5); break; case 5: var c5 = data.readCurveTo(); hasPath = true; CanvasGraphics.context.quadraticCurveTo(c5.float(0) - offsetX,c5.float(1) - offsetY,c5.float(2) - offsetX,c5.float(3) - offsetY); positionX = c5.float(2); positionY = c5.float(3); break; case 6: var c6 = data.readDrawCircle(); hasPath = true; CanvasGraphics.context.moveTo(c6.float(0) - offsetX + c6.float(2),c6.float(1) - offsetY); CanvasGraphics.context.arc(c6.float(0) - offsetX,c6.float(1) - offsetY,c6.float(2),0,Math.PI * 2,true); break; case 7: var c7 = data.readDrawEllipse(); hasPath = true; x = c7.float(0); y = c7.float(1); width = c7.float(2); height = c7.float(3); x -= offsetX; y -= offsetY; ox = width / 2 * kappa; oy = height / 2 * kappa; xe = x + width; ye = y + height; xm = x + width / 2; ym = y + height / 2; CanvasGraphics.context.moveTo(x,ym); CanvasGraphics.context.bezierCurveTo(x,ym - oy,xm - ox,y,xm,y); CanvasGraphics.context.bezierCurveTo(xm + ox,y,xe,ym - oy,xe,ym); CanvasGraphics.context.bezierCurveTo(xe,ym + oy,xm + ox,ye,xm,ye); CanvasGraphics.context.bezierCurveTo(xm - ox,ye,x,ym + oy,x,ym); break; case 8: var c8 = data.readDrawQuads(); var rects = c8.obj(0); var indices = c8.obj(1); var transforms = c8.obj(2); var hasIndices = indices != null; var transformABCD = false; var transformXY = false; var length = hasIndices ? indices.get_length() : Math.floor(rects.get_length() / 4); if(length == 0) { return; } if(transforms != null) { if(transforms.get_length() >= length * 6) { transformABCD = true; transformXY = true; } else if(transforms.get_length() >= length * 4) { transformABCD = true; } else if(transforms.get_length() >= length * 2) { transformXY = true; } } var tileRect = (openfl_geom_Rectangle().default).__pool.get(); var tileTransform = (openfl_geom_Matrix().default).__pool.get(); var transform = CanvasGraphics.graphics.__renderTransform; var alpha = CanvasGraphics.worldAlpha; var ri; var ti; CanvasGraphics.context.save(); var _g2 = 0; var _g11 = length; while(_g2 < _g11) { var i = _g2++; ri = hasIndices ? indices[i] * 4 : i * 4; if(ri < 0) { continue; } tileRect.setTo(rects[ri],rects[ri + 1],rects[ri + 2],rects[ri + 3]); if(tileRect.width <= 0 || tileRect.height <= 0) { continue; } if(transformABCD && transformXY) { ti = i * 6; tileTransform.setTo(transforms[ti],transforms[ti + 1],transforms[ti + 2],transforms[ti + 3],transforms[ti + 4],transforms[ti + 5]); } else if(transformABCD) { ti = i * 4; tileTransform.setTo(transforms[ti],transforms[ti + 1],transforms[ti + 2],transforms[ti + 3],tileRect.x,tileRect.y); } else if(transformXY) { ti = i * 2; tileTransform.tx = transforms[ti]; tileTransform.ty = transforms[ti + 1]; } else { tileTransform.tx = tileRect.x; tileTransform.ty = tileRect.y; } tileTransform.tx += positionX - offsetX; tileTransform.ty += positionY - offsetY; tileTransform.concat(transform); CanvasGraphics.context.setTransform(tileTransform.a,tileTransform.b,tileTransform.c,tileTransform.d,tileTransform.tx,tileTransform.ty); if(CanvasGraphics.bitmapFill != null && CanvasGraphics.bitmapFill.readable) { CanvasGraphics.context.drawImage(CanvasGraphics.bitmapFill.image.get_src(),tileRect.x,tileRect.y,tileRect.width,tileRect.height,0,0,tileRect.width,tileRect.height); } else { CanvasGraphics.context.fillRect(0,0,tileRect.width,tileRect.height); } } (openfl_geom_Rectangle().default).__pool.release(tileRect); (openfl_geom_Matrix().default).__pool.release(tileTransform); CanvasGraphics.context.restore(); break; case 9: var c9 = data.readDrawRect(); optimizationUsed = false; if(CanvasGraphics.bitmapFill != null && CanvasGraphics.bitmapFill.readable && !CanvasGraphics.hitTesting) { st = 0; sr = 0; sb = 0; sl = 0; canOptimizeMatrix = true; if(CanvasGraphics.pendingMatrix != null) { if(CanvasGraphics.pendingMatrix.b != 0 || CanvasGraphics.pendingMatrix.c != 0) { canOptimizeMatrix = false; } else { if(stl == null) { stl = (openfl_geom_Point().default).__pool.get(); } if(sbr == null) { sbr = (openfl_geom_Point().default).__pool.get(); } stl.setTo(c9.float(0),c9.float(1)); CanvasGraphics.inversePendingMatrix.__transformPoint(stl); sbr.setTo(c9.float(0) + c9.float(2),c9.float(1) + c9.float(3)); CanvasGraphics.inversePendingMatrix.__transformPoint(sbr); st = stl.y; sl = stl.x; sb = sbr.y; sr = sbr.x; } } else { st = c9.float(1); sl = c9.float(0); sb = c9.float(1) + c9.float(3); sr = c9.float(0) + c9.float(2); } if(canOptimizeMatrix && st >= 0 && sl >= 0 && sr <= CanvasGraphics.bitmapFill.width && sb <= CanvasGraphics.bitmapFill.height) { optimizationUsed = true; if(!CanvasGraphics.hitTesting) { CanvasGraphics.context.drawImage(CanvasGraphics.bitmapFill.image.get_src(),sl,st,sr - sl,sb - st,c9.float(0) - offsetX,c9.float(1) - offsetY,c9.float(2),c9.float(3)); } } } if(!optimizationUsed) { hasPath = true; CanvasGraphics.context.rect(c9.float(0) - offsetX,c9.float(1) - offsetY,c9.float(2),c9.float(3)); } break; case 10: var c10 = data.readDrawRoundRect(); hasPath = true; CanvasGraphics.drawRoundRect(c10.float(0) - offsetX,c10.float(1) - offsetY,c10.float(2),c10.float(3),c10.float(4),c10.obj(0)); break; case 12: var c11 = data.readDrawTriangles(); var v = c11.obj(0); var ind = c11.obj(1); var uvt = c11.obj(2); var pattern = null; var colorFill = CanvasGraphics.bitmapFill == null; if(colorFill && uvt != null) { break _hx_loop1; } if(!colorFill) { if(uvt == null) { uvt = (openfl__$Vector_Vector_$Impl_$().default)._new(); var _g3 = 0; var _g12 = (Std().default).int(v.get_length() / 2); while(_g3 < _g12) { var i1 = _g3++; (openfl__$Vector_Vector_$Impl_$().default).push(uvt,v[i1 * 2] - offsetX / CanvasGraphics.bitmapFill.width); (openfl__$Vector_Vector_$Impl_$().default).push(uvt,v[i1 * 2 + 1] - offsetY / CanvasGraphics.bitmapFill.height); } } var skipT = uvt.get_length() != v.get_length(); var normalizedUVT = CanvasGraphics.normalizeUVT(uvt,skipT); var maxUVT = normalizedUVT.max; uvt = normalizedUVT.uvt; if(maxUVT > 1) { pattern = CanvasGraphics.createTempPatternCanvas(CanvasGraphics.bitmapFill,CanvasGraphics.bitmapRepeat,(Std().default).int(CanvasGraphics.bounds.width),(Std().default).int(CanvasGraphics.bounds.height)); } else { pattern = CanvasGraphics.createTempPatternCanvas(CanvasGraphics.bitmapFill,CanvasGraphics.bitmapRepeat,CanvasGraphics.bitmapFill.width,CanvasGraphics.bitmapFill.height); } } var i2 = 0; var l = ind.get_length(); var a_; var b_; var c_; var iax; var iay; var ibx; var iby; var icx; var icy; var x1; var y1; var x2; var y2; var x3; var y3; var uvx1; var uvy1; var uvx2; var uvy2; var uvx3; var uvy3; var denom; var t1; var t2; var t3; var t4; var dx; var dy; while(i2 < l) { a_ = i2; b_ = i2 + 1; c_ = i2 + 2; iax = ind[a_] * 2; iay = ind[a_] * 2 + 1; ibx = ind[b_] * 2; iby = ind[b_] * 2 + 1; icx = ind[c_] * 2; icy = ind[c_] * 2 + 1; x1 = v[iax] - offsetX; y1 = v[iay] - offsetY; x2 = v[ibx] - offsetX; y2 = v[iby] - offsetY; x3 = v[icx] - offsetX; y3 = v[icy] - offsetY; switch(c11.obj(3)) { case "negative": if(CanvasGraphics.isCCW(x1,y1,x2,y2,x3,y3)) { i2 += 3; continue; } break; case "positive": if(!CanvasGraphics.isCCW(x1,y1,x2,y2,x3,y3)) { i2 += 3; continue; } break; default: } if(colorFill) { CanvasGraphics.context.beginPath(); CanvasGraphics.context.moveTo(x1,y1); CanvasGraphics.context.lineTo(x2,y2); CanvasGraphics.context.lineTo(x3,y3); CanvasGraphics.context.closePath(); if(!CanvasGraphics.hitTesting) { CanvasGraphics.context.fill(CanvasGraphics.windingRule); } i2 += 3; continue; } uvx1 = uvt[iax] * pattern.width; uvx2 = uvt[ibx] * pattern.width; uvx3 = uvt[icx] * pattern.width; uvy1 = uvt[iay] * pattern.height; uvy2 = uvt[iby] * pattern.height; uvy3 = uvt[icy] * pattern.height; denom = uvx1 * (uvy3 - uvy2) - uvx2 * uvy3 + uvx3 * uvy2 + (uvx2 - uvx3) * uvy1; if(denom == 0) { i2 += 3; CanvasGraphics.context.restore(); continue; } CanvasGraphics.context.save(); CanvasGraphics.context.beginPath(); CanvasGraphics.context.moveTo(x1,y1); CanvasGraphics.context.lineTo(x2,y2); CanvasGraphics.context.lineTo(x3,y3); CanvasGraphics.context.closePath(); CanvasGraphics.context.clip(); t1 = -(uvy1 * (x3 - x2) - uvy2 * x3 + uvy3 * x2 + (uvy2 - uvy3) * x1) / denom; t2 = (uvy2 * y3 + uvy1 * (y2 - y3) - uvy3 * y2 + (uvy3 - uvy2) * y1) / denom; t3 = (uvx1 * (x3 - x2) - uvx2 * x3 + uvx3 * x2 + (uvx2 - uvx3) * x1) / denom; t4 = -(uvx2 * y3 + uvx1 * (y2 - y3) - uvx3 * y2 + (uvx3 - uvx2) * y1) / denom; dx = (uvx1 * (uvy3 * x2 - uvy2 * x3) + uvy1 * (uvx2 * x3 - uvx3 * x2) + (uvx3 * uvy2 - uvx2 * uvy3) * x1) / denom; dy = (uvx1 * (uvy3 * y2 - uvy2 * y3) + uvy1 * (uvx2 * y3 - uvx3 * y2) + (uvx3 * uvy2 - uvx2 * uvy3) * y1) / denom; CanvasGraphics.context.transform(t1,t2,t3,t4,dx,dy); CanvasGraphics.context.drawImage(pattern,0,0,pattern.width,pattern.height); CanvasGraphics.context.restore(); i2 += 3; } break; case 14: var c12 = data.readLineBitmapStyle(); if(stroke && CanvasGraphics.hasStroke) { CanvasGraphics.closePath(true); } CanvasGraphics.context.moveTo(positionX - offsetX,positionY - offsetY); if(c12.obj(0).readable) { var tmp14 = c12.obj(0); var tmp15 = c12.bool(0); CanvasGraphics.context.strokeStyle = CanvasGraphics.createBitmapFill(tmp14,tmp15,c12.bool(1)); } else { var tmp16 = (StringTools().default).hex(0,6); CanvasGraphics.context.strokeStyle = "#" + tmp16; } CanvasGraphics.hasStroke = true; break; case 15: var c13 = data.readLineGradientStyle(); if(stroke && CanvasGraphics.hasStroke) { CanvasGraphics.closePath(true); } CanvasGraphics.context.moveTo(positionX - offsetX,positionY - offsetY); var tmp17 = c13.obj(0); var tmp18 = c13.iArr(0); var tmp19 = c13.fArr(0); var tmp20 = c13.iArr(1); var tmp21 = c13.obj(1); var tmp22 = c13.obj(2); var tmp23 = c13.obj(3); CanvasGraphics.context.strokeStyle = CanvasGraphics.createGradientPattern(tmp17,tmp18,tmp19,tmp20,tmp21,tmp22,tmp23,c13.float(0)); CanvasGraphics.setSmoothing(true); CanvasGraphics.hasStroke = true; break; case 16: var c14 = data.readLineStyle(); if(stroke && CanvasGraphics.hasStroke) { CanvasGraphics.closePath(true); } CanvasGraphics.context.moveTo(positionX - offsetX,positionY - offsetY); if(c14.obj(0) == null) { CanvasGraphics.hasStroke = false; } else { var tmp24 = c14.obj(0) > 0 ? c14.obj(0) : 1; CanvasGraphics.context.lineWidth = tmp24; var tmp25 = c14.obj(3) == null ? "round" : (Std().default).string(c14.obj(3)).toLowerCase(); CanvasGraphics.context.lineJoin = tmp25; var tmp26 = c14.obj(2) == null ? "round" : c14.obj(2) == "none" ? "butt" : (Std().default).string(c14.obj(2)).toLowerCase(); CanvasGraphics.context.lineCap = tmp26; CanvasGraphics.context.miterLimit = c14.float(1); if(c14.float(0) == 1) { var tmp27 = (StringTools().default).hex(c14.int(0) & 16777215,6); CanvasGraphics.context.strokeStyle = "#" + tmp27; } else { r = (c14.int(0) & 16711680) >>> 16; g = (c14.int(0) & 65280) >>> 8; b = c14.int(0) & 255; var tmp28 = "rgba(" + r + ", " + g + ", " + b + ", " + c14.float(0); CanvasGraphics.context.strokeStyle = tmp28 + ")"; } CanvasGraphics.setSmoothing(true); CanvasGraphics.hasStroke = true; } break; case 17: var c15 = data.readLineTo(); hasPath = true; CanvasGraphics.context.lineTo(c15.float(0) - offsetX,c15.float(1) - offsetY); positionX = c15.float(0); positionY = c15.float(1); if(positionX == startX && positionY == startY) { closeGap = true; } break; case 18: var c16 = data.readMoveTo(); CanvasGraphics.context.moveTo(c16.float(0) - offsetX,c16.float(1) - offsetY); positionX = c16.float(0); positionY = c16.float(1); if(setStart && c16.float(0) != startX && c16.float(1) != startY) { closeGap = true; } startX = c16.float(0); startY = c16.float(1); setStart = true; break; case 21: CanvasGraphics.windingRule = "evenodd"; break; case 22: CanvasGraphics.windingRule = "nonzero"; break; default: data.skip(type); } } if(stl != null) { (openfl_geom_Point().default).__pool.release(stl); } if(sbr != null) { (openfl_geom_Point().default).__pool.release(sbr); } data.destroy(); if(hasPath) { if(stroke && CanvasGraphics.hasStroke) { if(CanvasGraphics.hasFill) { if(positionX != startX || positionY != startY) { CanvasGraphics.context.lineTo(startX - offsetX,startY - offsetY); closeGap = true; } if(closeGap) { CanvasGraphics.closePath(true); } } else if(closeGap && positionX == startX && positionY == startY) { CanvasGraphics.closePath(true); } if(!CanvasGraphics.hitTesting) { CanvasGraphics.context.stroke(); } } if(!stroke) { if(CanvasGraphics.hasFill || CanvasGraphics.bitmapFill != null) { CanvasGraphics.context.translate(-CanvasGraphics.bounds.x,-CanvasGraphics.bounds.y); if(CanvasGraphics.pendingMatrix != null) { CanvasGraphics.context.transform(CanvasGraphics.pendingMatrix.a,CanvasGraphics.pendingMatrix.b,CanvasGraphics.pendingMatrix.c,CanvasGraphics.pendingMatrix.d,CanvasGraphics.pendingMatrix.tx,CanvasGraphics.pendingMatrix.ty); if(!CanvasGraphics.hitTesting) { CanvasGraphics.context.fill(CanvasGraphics.windingRule); } CanvasGraphics.context.transform(CanvasGraphics.inversePendingMatrix.a,CanvasGraphics.inversePendingMatrix.b,CanvasGraphics.inversePendingMatrix.c,CanvasGraphics.inversePendingMatrix.d,CanvasGraphics.inversePendingMatrix.tx,CanvasGraphics.inversePendingMatrix.ty); } else if(!CanvasGraphics.hitTesting) { CanvasGraphics.context.fill(CanvasGraphics.windingRule); } CanvasGraphics.context.translate(CanvasGraphics.bounds.x,CanvasGraphics.bounds.y); CanvasGraphics.context.closePath(); } } } } CanvasGraphics.render = function(graphics,renderer) { var pixelRatio = renderer.__pixelRatio; graphics.__update(renderer.__worldTransform,pixelRatio); if(graphics.__softwareDirty) { CanvasGraphics.hitTesting = false; CanvasGraphics.graphics = graphics; CanvasGraphics.allowSmoothing = renderer.__allowSmoothing; CanvasGraphics.worldAlpha = renderer.__getAlpha(graphics.__owner.__worldAlpha); CanvasGraphics.bounds = graphics.__bounds; var width = graphics.__width; var height = graphics.__height; if(!graphics.__visible || graphics.__commands.get_length() == 0 || CanvasGraphics.bounds == null || width < 1 || height < 1) { graphics.__canvas = null; graphics.__context = null; graphics.__bitmap = null; } else { if(graphics.__canvas == null) { graphics.__canvas = window.document.createElement("canvas"); graphics.__context = graphics.__canvas.getContext("2d"); } CanvasGraphics.context = graphics.__context; var transform = graphics.__renderTransform; var canvas = graphics.__canvas; var scale = renderer.__pixelRatio; var scaledWidth = (Std().default).int(width * scale); var scaledHeight = (Std().default).int(height * scale); renderer.__setBlendModeContext(CanvasGraphics.context,"normal"); if(renderer.__isDOM) { if(canvas.width == scaledWidth && canvas.height == scaledHeight) { CanvasGraphics.context.clearRect(0,0,scaledWidth,scaledHeight); } else { canvas.width = scaledWidth; canvas.height = scaledHeight; canvas.style.width = width + "px"; canvas.style.height = height + "px"; } var transform1 = graphics.__renderTransform; CanvasGraphics.context.setTransform(transform1.a * scale,transform1.b * scale,transform1.c * scale,transform1.d * scale,transform1.tx * scale,transform1.ty * scale); } else { if(canvas.width == scaledWidth && canvas.height == scaledHeight) { CanvasGraphics.context.closePath(); CanvasGraphics.context.setTransform(1,0,0,1,0,0); CanvasGraphics.context.clearRect(0,0,scaledWidth,scaledHeight); } else { canvas.width = width; canvas.height = height; } CanvasGraphics.context.setTransform(transform.a,transform.b,transform.c,transform.d,transform.tx,transform.ty); } CanvasGraphics.fillCommands.clear(); CanvasGraphics.strokeCommands.clear(); CanvasGraphics.hasFill = false; CanvasGraphics.hasStroke = false; CanvasGraphics.bitmapFill = null; CanvasGraphics.bitmapRepeat = false; var hasLineStyle = false; var initStrokeX = 0.0; var initStrokeY = 0.0; CanvasGraphics.windingRule = "evenodd"; var data = new (openfl_display__$internal_DrawCommandReader().default)(graphics.__commands); var _g = 0; var _g1 = graphics.__commands.types; while(_g < _g1.length) { var type = _g1[_g]; ++_g; switch(type._hx_index) { case 0:case 1:case 2:case 3: CanvasGraphics.endFill(); CanvasGraphics.endStroke(); if(type == (openfl_display__$internal_DrawCommandType().default).BEGIN_BITMAP_FILL) { var c = data.readBeginBitmapFill(); CanvasGraphics.fillCommands.beginBitmapFill(c.obj(0),c.obj(1),c.bool(0),c.bool(1)); CanvasGraphics.strokeCommands.beginBitmapFill(c.obj(0),c.obj(1),c.bool(0),c.bool(1)); } else if(type == (openfl_display__$internal_DrawCommandType().default).BEGIN_GRADIENT_FILL) { var c1 = data.readBeginGradientFill(); CanvasGraphics.fillCommands.beginGradientFill(c1.obj(0),c1.iArr(0),c1.fArr(0),c1.iArr(1),c1.obj(1),c1.obj(2),c1.obj(3),c1.float(0)); CanvasGraphics.strokeCommands.beginGradientFill(c1.obj(0),c1.iArr(0),c1.fArr(0),c1.iArr(1),c1.obj(1),c1.obj(2),c1.obj(3),c1.float(0)); } else if(type == (openfl_display__$internal_DrawCommandType().default).BEGIN_SHADER_FILL) { var c2 = data.readBeginShaderFill(); CanvasGraphics.fillCommands.beginShaderFill(c2.obj(0)); CanvasGraphics.strokeCommands.beginShaderFill(c2.obj(0)); } else { var c3 = data.readBeginFill(); CanvasGraphics.fillCommands.beginFill(c3.int(0),c3.float(0)); CanvasGraphics.strokeCommands.beginFill(c3.int(0),c3.float(0)); } break; case 4: var c4 = data.readCubicCurveTo(); CanvasGraphics.fillCommands.cubicCurveTo(c4.float(0),c4.float(1),c4.float(2),c4.float(3),c4.float(4),c4.float(5)); if(hasLineStyle) { CanvasGraphics.strokeCommands.cubicCurveTo(c4.float(0),c4.float(1),c4.float(2),c4.float(3),c4.float(4),c4.float(5)); } else { initStrokeX = c4.float(4); initStrokeY = c4.float(5); } break; case 5: var c5 = data.readCurveTo(); CanvasGraphics.fillCommands.curveTo(c5.float(0),c5.float(1),c5.float(2),c5.float(3)); if(hasLineStyle) { CanvasGraphics.strokeCommands.curveTo(c5.float(0),c5.float(1),c5.float(2),c5.float(3)); } else { initStrokeX = c5.float(2); initStrokeY = c5.float(3); } break; case 6: var c6 = data.readDrawCircle(); CanvasGraphics.fillCommands.drawCircle(c6.float(0),c6.float(1),c6.float(2)); if(hasLineStyle) { CanvasGraphics.strokeCommands.drawCircle(c6.float(0),c6.float(1),c6.float(2)); } break; case 7: var c7 = data.readDrawEllipse(); CanvasGraphics.fillCommands.drawEllipse(c7.float(0),c7.float(1),c7.float(2),c7.float(3)); if(hasLineStyle) { CanvasGraphics.strokeCommands.drawEllipse(c7.float(0),c7.float(1),c7.float(2),c7.float(3)); } break; case 8: var c8 = data.readDrawQuads(); CanvasGraphics.fillCommands.drawQuads(c8.obj(0),c8.obj(1),c8.obj(2)); break; case 9: var c9 = data.readDrawRect(); CanvasGraphics.fillCommands.drawRect(c9.float(0),c9.float(1),c9.float(2),c9.float(3)); if(hasLineStyle) { CanvasGraphics.strokeCommands.drawRect(c9.float(0),c9.float(1),c9.float(2),c9.float(3)); } break; case 10: var c10 = data.readDrawRoundRect(); CanvasGraphics.fillCommands.drawRoundRect(c10.float(0),c10.float(1),c10.float(2),c10.float(3),c10.float(4),c10.obj(0)); if(hasLineStyle) { CanvasGraphics.strokeCommands.drawRoundRect(c10.float(0),c10.float(1),c10.float(2),c10.float(3),c10.float(4),c10.obj(0)); } break; case 12: var c11 = data.readDrawTriangles(); CanvasGraphics.fillCommands.drawTriangles(c11.obj(0),c11.obj(1),c11.obj(2),c11.obj(3)); break; case 13: data.readEndFill(); CanvasGraphics.endFill(); CanvasGraphics.endStroke(); CanvasGraphics.hasFill = false; hasLineStyle = false; CanvasGraphics.bitmapFill = null; initStrokeX = 0; initStrokeY = 0; break; case 14: var c12 = data.readLineBitmapStyle(); if(!hasLineStyle && (initStrokeX != 0 || initStrokeY != 0)) { CanvasGraphics.strokeCommands.moveTo(initStrokeX,initStrokeY); initStrokeX = 0; initStrokeY = 0; } hasLineStyle = true; CanvasGraphics.strokeCommands.lineBitmapStyle(c12.obj(0),c12.obj(1),c12.bool(0),c12.bool(1)); break; case 15: var c13 = data.readLineGradientStyle(); if(!hasLineStyle && (initStrokeX != 0 || initStrokeY != 0)) { CanvasGraphics.strokeCommands.moveTo(initStrokeX,initStrokeY); initStrokeX = 0; initStrokeY = 0; } hasLineStyle = true; CanvasGraphics.strokeCommands.lineGradientStyle(c13.obj(0),c13.iArr(0),c13.fArr(0),c13.iArr(1),c13.obj(1),c13.obj(2),c13.obj(3),c13.float(0)); break; case 16: var c14 = data.readLineStyle(); if(!hasLineStyle && c14.obj(0) != null) { if(initStrokeX != 0 || initStrokeY != 0) { CanvasGraphics.strokeCommands.moveTo(initStrokeX,initStrokeY); initStrokeX = 0; initStrokeY = 0; } } hasLineStyle = c14.obj(0) != null; CanvasGraphics.strokeCommands.lineStyle(c14.obj(0),c14.int(0),c14.float(0),c14.bool(0),c14.obj(1),c14.obj(2),c14.obj(3),c14.float(1)); break; case 17: var c15 = data.readLineTo(); CanvasGraphics.fillCommands.lineTo(c15.float(0),c15.float(1)); if(hasLineStyle) { CanvasGraphics.strokeCommands.lineTo(c15.float(0),c15.float(1)); } else { initStrokeX = c15.float(0); initStrokeY = c15.float(1); } break; case 18: var c16 = data.readMoveTo(); CanvasGraphics.fillCommands.moveTo(c16.float(0),c16.float(1)); if(hasLineStyle) { CanvasGraphics.strokeCommands.moveTo(c16.float(0),c16.float(1)); } else { initStrokeX = c16.float(0); initStrokeY = c16.float(1); } break; case 19: var c17 = data.readOverrideBlendMode(); renderer.__setBlendModeContext(CanvasGraphics.context,c17.obj(0)); break; case 21: data.readWindingEvenOdd(); CanvasGraphics.fillCommands.windingEvenOdd(); CanvasGraphics.windingRule = "evenodd"; break; case 22: data.readWindingNonZero(); CanvasGraphics.fillCommands.windingNonZero(); CanvasGraphics.windingRule = "nonzero"; break; default: data.skip(type); } } if(CanvasGraphics.fillCommands.get_length() > 0) { CanvasGraphics.endFill(); } if(CanvasGraphics.strokeCommands.get_length() > 0) { CanvasGraphics.endStroke(); } data.destroy(); graphics.__bitmap = (openfl_display_BitmapData().default).fromCanvas(graphics.__canvas); } graphics.__softwareDirty = false; graphics.set___dirty(false); CanvasGraphics.graphics = null; } } CanvasGraphics.renderMask = function(graphics,renderer) { if(graphics.__commands.get_length() != 0) { CanvasGraphics.context = renderer.context; var positionX = 0.0; var positionY = 0.0; var offsetX = 0; var offsetY = 0; var data = new (openfl_display__$internal_DrawCommandReader().default)(graphics.__commands); var x; var y; var width; var height; var kappa = 0.5522848; var ox; var oy; var xe; var ye; var xm; var ym; var _g = 0; var _g1 = graphics.__commands.types; while(_g < _g1.length) { var type = _g1[_g]; ++_g; switch(type._hx_index) { case 4: var c = data.readCubicCurveTo(); CanvasGraphics.context.bezierCurveTo(c.float(0) - offsetX,c.float(1) - offsetY,c.float(2) - offsetX,c.float(3) - offsetY,c.float(4) - offsetX,c.float(5) - offsetY); positionX = c.float(4); positionY = c.float(5); break; case 5: var c1 = data.readCurveTo(); CanvasGraphics.context.quadraticCurveTo(c1.float(0) - offsetX,c1.float(1) - offsetY,c1.float(2) - offsetX,c1.float(3) - offsetY); positionX = c1.float(2); positionY = c1.float(3); break; case 6: var c2 = data.readDrawCircle(); CanvasGraphics.context.arc(c2.float(0) - offsetX,c2.float(1) - offsetY,c2.float(2),0,Math.PI * 2,true); break; case 7: var c3 = data.readDrawEllipse(); x = c3.float(0); y = c3.float(1); width = c3.float(2); height = c3.float(3); x -= offsetX; y -= offsetY; ox = width / 2 * kappa; oy = height / 2 * kappa; xe = x + width; ye = y + height; xm = x + width / 2; ym = y + height / 2; CanvasGraphics.context.moveTo(x,ym); CanvasGraphics.context.bezierCurveTo(x,ym - oy,xm - ox,y,xm,y); CanvasGraphics.context.bezierCurveTo(xm + ox,y,xe,ym - oy,xe,ym); CanvasGraphics.context.bezierCurveTo(xe,ym + oy,xm + ox,ye,xm,ye); CanvasGraphics.context.bezierCurveTo(xm - ox,ye,x,ym + oy,x,ym); break; case 9: var c4 = data.readDrawRect(); CanvasGraphics.context.beginPath(); CanvasGraphics.context.rect(c4.float(0) - offsetX,c4.float(1) - offsetY,c4.float(2),c4.float(3)); CanvasGraphics.context.closePath(); break; case 10: var c5 = data.readDrawRoundRect(); CanvasGraphics.drawRoundRect(c5.float(0) - offsetX,c5.float(1) - offsetY,c5.float(2),c5.float(3),c5.fl