{"version":3,"file":"CanvasMaskSystem.mjs","sources":["../src/CanvasMaskSystem.ts"],"sourcesContent":["import { extensions, ExtensionType, SHAPES } from 'pixijs/core';\n\nimport type { ExtensionMetadata, ISystem, MaskData, Polygon } from 'pixijs/core';\nimport type { Container } from 'pixijs/display';\nimport type { Graphics } from 'pixijs/graphics';\nimport type { CanvasRenderer } from './CanvasRenderer';\n/**\n * A set of functions used to handle masking.\n *\n * Sprite masking is not supported on the CanvasRenderer.\n * @class\n * @memberof PIXI\n */\nexport class CanvasMaskSystem implements ISystem\n{\n    /** @ignore */\n    static extension: ExtensionMetadata = {\n        type:  ExtensionType.CanvasRendererSystem,\n        name: 'mask',\n    };\n\n    /** A reference to the current renderer */\n    private renderer: CanvasRenderer;\n    private _foundShapes: Array<Graphics> = [];\n\n    /** @param renderer - A reference to the current renderer */\n    constructor(renderer: CanvasRenderer)\n    {\n        this.renderer = renderer;\n    }\n\n    /**\n     * This method adds it to the current stack of masks.\n     * @param maskData - the maskData that will be pushed\n     */\n    pushMask(maskData: MaskData | Graphics): void\n    {\n        const renderer = this.renderer;\n        const maskObject = ((maskData as MaskData).maskObject || maskData) as Container;\n\n        renderer.canvasContext.activeContext.save();\n\n        // TODO support sprite alpha masks??\n        // lots of effort required. If demand is great enough..\n\n        const foundShapes = this._foundShapes;\n\n        this.recursiveFindShapes(maskObject, foundShapes);\n        if (foundShapes.length > 0)\n        {\n            const context = renderer.canvasContext.activeContext;\n\n            context.beginPath();\n\n            for (let i = 0; i < foundShapes.length; i++)\n            {\n                const shape = foundShapes[i];\n                const transform = shape.transform.worldTransform;\n\n                this.renderer.canvasContext.setContextTransform(transform);\n\n                this.renderGraphicsShape(shape);\n            }\n\n            foundShapes.length = 0;\n            context.clip();\n        }\n    }\n\n    /**\n     * Renders all PIXI.Graphics shapes in a subtree.\n     * @param container - container to scan.\n     * @param out - where to put found shapes\n     */\n    recursiveFindShapes(container: Container, out: Array<Graphics>): void\n    {\n        if ((container as Graphics).geometry && (container as Graphics).geometry.graphicsData)\n        {\n            out.push(container as Graphics);\n        }\n\n        const { children } = container;\n\n        if (children)\n        {\n            for (let i = 0; i < children.length; i++)\n            {\n                this.recursiveFindShapes(children[i] as Container, out);\n            }\n        }\n    }\n\n    /**\n     * Renders a PIXI.Graphics shape.\n     * @param graphics - The object to render.\n     */\n    renderGraphicsShape(graphics: Graphics): void\n    {\n        graphics.finishPoly();\n\n        const context = this.renderer.canvasContext.activeContext;\n        const graphicsData = graphics.geometry.graphicsData;\n        const len = graphicsData.length;\n\n        if (len === 0)\n        {\n            return;\n        }\n\n        for (let i = 0; i < len; i++)\n        {\n            const data = graphicsData[i];\n            const shape = data.shape;\n\n            if (shape.type === SHAPES.POLY)\n            {\n                let points = shape.points;\n                const holes = data.holes;\n                let outerArea;\n                let innerArea;\n                let px;\n                let py;\n\n                context.moveTo(points[0], points[1]);\n\n                for (let j = 1; j < points.length / 2; j++)\n                {\n                    context.lineTo(points[j * 2], points[(j * 2) + 1]);\n                }\n                if (holes.length > 0)\n                {\n                    outerArea = 0;\n                    px = points[0];\n                    py = points[1];\n                    for (let j = 2; j + 2 < points.length; j += 2)\n                    {\n                        outerArea += ((points[j] - px) * (points[j + 3] - py))\n                            - ((points[j + 2] - px) * (points[j + 1] - py));\n                    }\n\n                    for (let k = 0; k < holes.length; k++)\n                    {\n                        points = (holes[k].shape as Polygon).points;\n\n                        if (!points)\n                        {\n                            continue;\n                        }\n\n                        innerArea = 0;\n                        px = points[0];\n                        py = points[1];\n                        for (let j = 2; j + 2 < points.length; j += 2)\n                        {\n                            innerArea += ((points[j] - px) * (points[j + 3] - py))\n                                - ((points[j + 2] - px) * (points[j + 1] - py));\n                        }\n\n                        if (innerArea * outerArea < 0)\n                        {\n                            context.moveTo(points[0], points[1]);\n\n                            for (let j = 2; j < points.length; j += 2)\n                            {\n                                context.lineTo(points[j], points[j + 1]);\n                            }\n                        }\n                        else\n                        {\n                            context.moveTo(points[points.length - 2], points[points.length - 1]);\n\n                            for (let j = points.length - 4; j >= 0; j -= 2)\n                            {\n                                context.lineTo(points[j], points[j + 1]);\n                            }\n                        }\n\n                        if ((holes[k].shape as Polygon).closeStroke)\n                        {\n                            context.closePath();\n                        }\n                    }\n                }\n                // if the first and last point are the same close the path - much neater :)\n                if (points[0] === points[points.length - 2] && points[1] === points[points.length - 1])\n                {\n                    context.closePath();\n                }\n            }\n            else if (shape.type === SHAPES.RECT)\n            {\n                context.rect(shape.x, shape.y, shape.width, shape.height);\n                context.closePath();\n            }\n            else if (shape.type === SHAPES.CIRC)\n            {\n                // TODO - need to be Undefined!\n                context.arc(shape.x, shape.y, shape.radius, 0, 2 * Math.PI);\n                context.closePath();\n            }\n            else if (shape.type === SHAPES.ELIP)\n            {\n                // ellipse code taken from: http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n\n                const w = shape.width * 2;\n                const h = shape.height * 2;\n\n                const x = shape.x - (w / 2);\n                const y = shape.y - (h / 2);\n\n                const kappa = 0.5522848;\n                const ox = (w / 2) * kappa; // control point offset horizontal\n                const oy = (h / 2) * kappa; // control point offset vertical\n                const xe = x + w; // x-end\n                const ye = y + h; // y-end\n                const xm = x + (w / 2); // x-middle\n                const ym = y + (h / 2); // y-middle\n\n                context.moveTo(x, ym);\n                context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n                context.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n                context.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n                context.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n                context.closePath();\n            }\n            else if (shape.type === SHAPES.RREC)\n            {\n                const rx = shape.x;\n                const ry = shape.y;\n                const width = shape.width;\n                const height = shape.height;\n                let radius = shape.radius;\n\n                const maxRadius = Math.min(width, height) / 2;\n\n                radius = radius > maxRadius ? maxRadius : radius;\n\n                context.moveTo(rx, ry + radius);\n                context.lineTo(rx, ry + height - radius);\n                context.quadraticCurveTo(rx, ry + height, rx + radius, ry + height);\n                context.lineTo(rx + width - radius, ry + height);\n                context.quadraticCurveTo(rx + width, ry + height, rx + width, ry + height - radius);\n                context.lineTo(rx + width, ry + radius);\n                context.quadraticCurveTo(rx + width, ry, rx + width - radius, ry);\n                context.lineTo(rx + radius, ry);\n                context.quadraticCurveTo(rx, ry, rx, ry + radius);\n                context.closePath();\n            }\n        }\n    }\n\n    /**\n     * Restores the current drawing context to the state it was before the mask was applied.\n     * @param renderer - The renderer context to use.\n     */\n    popMask(renderer: CanvasRenderer): void\n    {\n        renderer.canvasContext.activeContext.restore();\n        renderer.canvasContext.invalidateBlendMode();\n    }\n\n    /** Destroys this canvas mask manager. */\n    public destroy(): void\n    {\n        /* empty */\n    }\n}\n\nextensions.add(CanvasMaskSystem);\n"],"names":[],"mappings":"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"}