shadow$provide.module$node_modules$pixi_DOT_js$lib$rendering$mask$stencil$CanvasStencilMaskPipe = function(global, require, module, exports) { function buildShapePath(context, shape) { switch(shape.type) { case "rectangle": context.rect(shape.x, shape.y, shape.width, shape.height); break; case "roundedRectangle": var x = shape.x, y = shape.y, width = shape.width, height = shape.height; shape = shape.radius; shape = Math.max(0, Math.min(shape, Math.min(width, height) / 2)); context.moveTo(x + shape, y); context.lineTo(x + width - shape, y); context.quadraticCurveTo(x + width, y, x + width, y + shape); context.lineTo(x + width, y + height - shape); context.quadraticCurveTo(x + width, y + height, x + width - shape, y + height); context.lineTo(x + shape, y + height); context.quadraticCurveTo(x, y + height, x, y + height - shape); context.lineTo(x, y + shape); context.quadraticCurveTo(x, y, x + shape, y); break; case "circle": context.moveTo(shape.x + shape.radius, shape.y); context.arc(shape.x, shape.y, shape.radius, 0, 2 * Math.PI); break; case "ellipse": context.ellipse ? (context.moveTo(shape.x + shape.halfWidth, shape.y), context.ellipse(shape.x, shape.y, shape.halfWidth, shape.halfHeight, 0, 0, 2 * Math.PI)) : (context.save(), context.translate(shape.x, shape.y), context.scale(shape.halfWidth, shape.halfHeight), context.moveTo(1, 0), context.arc(0, 0, 1, 0, 2 * Math.PI), context.restore()); break; case "triangle": context.moveTo(shape.x, shape.y); context.lineTo(shape.x2, shape.y2); context.lineTo(shape.x3, shape.y3); context.closePath(); break; default: if (x = shape.points, x?.length) { context.moveTo(x[0], x[1]); for (y = 2; y < x.length; y += 2) { context.lineTo(x[y], x[y + 1]); } shape.closePath && context.closePath(); } } } global = require("module$node_modules$pixi_DOT_js$lib$extensions$Extensions"); var buildLine = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$buildCommands$buildLine"), Graphics = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$Graphics"), buildContextBatches = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$utils$buildContextBatches"), warn = require("module$node_modules$pixi_DOT_js$lib$utils$logging$warn"); "use strict"; class CanvasStencilMaskPipe { constructor(renderer) { this._warnedMaskTypes = new Set(); this._canvasMaskStack = []; this._renderer = renderer; } push(mask, _container, instructionSet) { this._renderer.renderPipes.batch.break(instructionSet); instructionSet.add({renderPipeId:"stencilMask", action:"pushMaskBegin", mask, inverse:_container._maskOptions.inverse, canBundle:!1}); } pop(_mask, _container, instructionSet) { this._renderer.renderPipes.batch.break(instructionSet); instructionSet.add({renderPipeId:"stencilMask", action:"popMaskEnd", mask:_mask, inverse:_container._maskOptions.inverse, canBundle:!1}); } execute(instruction) { if ("pushMaskBegin" === instruction.action || "popMaskEnd" === instruction.action) { var canvasRenderer = this._renderer, contextSystem = canvasRenderer.canvasContext, context = contextSystem?.activeContext; if (context) { if ("popMaskEnd" === instruction.action) { this._canvasMaskStack.pop() && context.restore(); } else { instruction.inverse && this._warnOnce("inverse", "CanvasRenderer: inverse masks are not supported on Canvas2D; ignoring inverse flag."); var maskContainer = instruction.mask.mask; if (maskContainer instanceof Graphics.Graphics) { if (instruction = maskContainer.context?.instructions, instruction?.length) { context.save(); contextSystem.setContextTransform(maskContainer.groupTransform, 1 === (canvasRenderer._roundPixels | maskContainer._roundPixels)); context.beginPath(); var drewPath = !1; canvasRenderer = !1; for (contextSystem = 0; contextSystem < instruction.length; contextSystem++) { maskContainer = instruction[contextSystem]; var action = maskContainer.action; if ("fill" === action || "stroke" === action) { maskContainer = maskContainer.data; var shapePath = maskContainer?.path?.shapePath; if (shapePath?.shapePrimitives?.length) { action = "stroke" === action; shapePath = shapePath.shapePrimitives; for (let j = 0; j < shapePath.length; j++) { var primitive = shapePath[j]; if (!primitive?.shape) { continue; } var transform = primitive.transform; const hasTransform = transform && !transform.isIdentity(); hasTransform && (context.save(), context.transform(transform.a, transform.b, transform.c, transform.d, transform.tx, transform.ty)); if (action && maskContainer.style) { transform = context; var shape = primitive.shape, points = []; primitive = []; var indices = []; if (buildContextBatches.shapeBuilders[shape.type]?.build(shape, points)) { buildLine.buildLine(points, maskContainer.style, !1, shape.closePath ?? !0, primitive, indices); for (shape = 0; shape < indices.length; shape += 3) { points = 2 * indices[shape]; const i1 = 2 * indices[shape + 1], i2 = 2 * indices[shape + 2]; transform.moveTo(primitive[points], primitive[points + 1]); transform.lineTo(primitive[i1], primitive[i1 + 1]); transform.lineTo(primitive[i2], primitive[i2 + 1]); transform.closePath(); } transform = !0; } else { transform = !1; } drewPath = transform || drewPath; } else { buildShapePath(context, primitive.shape); drewPath = context; transform = primitive.holes; if (transform?.length) { for (primitive = 0; primitive < transform.length; primitive++) { if (indices = transform[primitive], indices?.shape) { if (points = (shape = indices.transform) && !shape.isIdentity()) { drewPath.save(), drewPath.transform(shape.a, shape.b, shape.c, shape.d, shape.tx, shape.ty); } buildShapePath(drewPath, indices.shape); points && drewPath.restore(); } } drewPath = !0; } else { drewPath = !1; } canvasRenderer = drewPath || canvasRenderer; drewPath = !0; } hasTransform && context.restore(); } } } } drewPath ? (canvasRenderer ? context.clip("evenodd") : context.clip(), this._canvasMaskStack.push(!0)) : (context.restore(), this._canvasMaskStack.push(!1)); } else { this._canvasMaskStack.push(!1); } } else { this._warnOnce("nonGraphics", "CanvasRenderer: only Graphics masks are supported in Canvas2D; skipping mask."), this._canvasMaskStack.push(!1); } } } } } destroy() { this._canvasMaskStack = this._warnedMaskTypes = this._renderer = null; } _warnOnce(key, message) { this._warnedMaskTypes.has(key) || (this._warnedMaskTypes.add(key), warn.warn(message)); } } CanvasStencilMaskPipe.extension = {type:[global.ExtensionType.CanvasPipes], name:"stencilMask"}; exports.CanvasStencilMaskPipe = CanvasStencilMaskPipe; }; //# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$rendering$mask$stencil$CanvasStencilMaskPipe.js.map