{"version":3,"file":"BlurFilter.mjs","sources":["../src/BlurFilter.ts"],"sourcesContent":["import { CLEAR_MODES, Filter } from 'pixijs/core';\nimport { BlurFilterPass } from './BlurFilterPass';\n\nimport type { BLEND_MODES, FilterSystem, RenderTexture } from 'pixijs/core';\n\n/**\n * The BlurFilter applies a Gaussian blur to an object.\n *\n * The strength of the blur can be set for the x-axis and y-axis separately.\n * @memberof PIXI\n */\nexport class BlurFilter extends Filter\n{\n    public blurXFilter: BlurFilterPass;\n    public blurYFilter: BlurFilterPass;\n\n    private _repeatEdgePixels: boolean;\n\n    /**\n     * @param strength - The strength of the blur filter.\n     * @param quality - The quality of the blur filter.\n     * @param [resolution=Filter.defaultResolution] - The resolution of the blur filter.\n     * @param kernelSize - The kernelSize of the blur filter.Options: 5, 7, 9, 11, 13, 15.\n     */\n    constructor(strength = 8, quality = 4, resolution = Filter.defaultResolution, kernelSize = 5)\n    {\n        super();\n\n        this.blurXFilter = new BlurFilterPass(true, strength, quality, resolution, kernelSize);\n        this.blurYFilter = new BlurFilterPass(false, strength, quality, resolution, kernelSize);\n\n        this.resolution = resolution;\n        this.quality = quality;\n        this.blur = strength;\n\n        this.repeatEdgePixels = false;\n    }\n\n    /**\n     * Applies the filter.\n     * @param filterManager - The manager.\n     * @param input - The input target.\n     * @param output - The output target.\n     * @param clearMode - How to clear\n     */\n    apply(filterManager: FilterSystem, input: RenderTexture, output: RenderTexture, clearMode: CLEAR_MODES): void\n    {\n        const xStrength = Math.abs(this.blurXFilter.strength);\n        const yStrength = Math.abs(this.blurYFilter.strength);\n\n        if (xStrength && yStrength)\n        {\n            const renderTarget = filterManager.getFilterTexture();\n\n            this.blurXFilter.apply(filterManager, input, renderTarget, CLEAR_MODES.CLEAR);\n            this.blurYFilter.apply(filterManager, renderTarget, output, clearMode);\n\n            filterManager.returnFilterTexture(renderTarget);\n        }\n        else if (yStrength)\n        {\n            this.blurYFilter.apply(filterManager, input, output, clearMode);\n        }\n        else\n        {\n            this.blurXFilter.apply(filterManager, input, output, clearMode);\n        }\n    }\n\n    protected updatePadding(): void\n    {\n        if (this._repeatEdgePixels)\n        {\n            this.padding = 0;\n        }\n        else\n        {\n            this.padding = Math.max(Math.abs(this.blurXFilter.strength), Math.abs(this.blurYFilter.strength)) * 2;\n        }\n    }\n\n    /**\n     * Sets the strength of both the blurX and blurY properties simultaneously\n     * @default 2\n     */\n    get blur(): number\n    {\n        return this.blurXFilter.blur;\n    }\n\n    set blur(value: number)\n    {\n        this.blurXFilter.blur = this.blurYFilter.blur = value;\n        this.updatePadding();\n    }\n\n    /**\n     * Sets the number of passes for blur. More passes means higher quality bluring.\n     * @default 1\n     */\n    get quality(): number\n    {\n        return this.blurXFilter.quality;\n    }\n\n    set quality(value: number)\n    {\n        this.blurXFilter.quality = this.blurYFilter.quality = value;\n    }\n\n    /**\n     * Sets the strength of the blurX property\n     * @default 2\n     */\n    get blurX(): number\n    {\n        return this.blurXFilter.blur;\n    }\n\n    set blurX(value: number)\n    {\n        this.blurXFilter.blur = value;\n        this.updatePadding();\n    }\n\n    /**\n     * Sets the strength of the blurY property\n     * @default 2\n     */\n    get blurY(): number\n    {\n        return this.blurYFilter.blur;\n    }\n\n    set blurY(value: number)\n    {\n        this.blurYFilter.blur = value;\n        this.updatePadding();\n    }\n\n    /**\n     * Sets the blendmode of the filter\n     * @default PIXI.BLEND_MODES.NORMAL\n     */\n    get blendMode(): BLEND_MODES\n    {\n        return this.blurYFilter.blendMode;\n    }\n\n    set blendMode(value: BLEND_MODES)\n    {\n        this.blurYFilter.blendMode = value;\n    }\n\n    /**\n     * If set to true the edge of the target will be clamped\n     * @default false\n     */\n    get repeatEdgePixels(): boolean\n    {\n        return this._repeatEdgePixels;\n    }\n\n    set repeatEdgePixels(value: boolean)\n    {\n        this._repeatEdgePixels = value;\n        this.updatePadding();\n    }\n}\n"],"names":[],"mappings":";;;AAWO,MAAM,mBAAmB,MAChC,CAAA;AAAA,EAYI,WAAA,CAAY,WAAW,CAAG,EAAA,OAAA,GAAU,GAAG,UAAa,GAAA,MAAA,CAAO,iBAAmB,EAAA,UAAA,GAAa,CAC3F,EAAA;AACI,IAAM,KAAA,EAAA,CAAA;AAEN,IAAA,IAAA,CAAK,cAAc,IAAI,cAAA,CAAe,MAAM,QAAU,EAAA,OAAA,EAAS,YAAY,UAAU,CAAA,CAAA;AACrF,IAAA,IAAA,CAAK,cAAc,IAAI,cAAA,CAAe,OAAO,QAAU,EAAA,OAAA,EAAS,YAAY,UAAU,CAAA,CAAA;AAEtF,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAClB,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA,CAAA;AACf,IAAA,IAAA,CAAK,IAAO,GAAA,QAAA,CAAA;AAEZ,IAAA,IAAA,CAAK,gBAAmB,GAAA,KAAA,CAAA;AAAA,GAC5B;AAAA,EASA,KAAM,CAAA,aAAA,EAA6B,KAAsB,EAAA,MAAA,EAAuB,SAChF,EAAA;AACI,IAAA,MAAM,SAAY,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,YAAY,QAAQ,CAAA,CAAA;AACpD,IAAA,MAAM,SAAY,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,YAAY,QAAQ,CAAA,CAAA;AAEpD,IAAA,IAAI,aAAa,SACjB,EAAA;AACI,MAAM,MAAA,YAAA,GAAe,cAAc,gBAAiB,EAAA,CAAA;AAEpD,MAAA,IAAA,CAAK,YAAY,KAAM,CAAA,aAAA,EAAe,KAAO,EAAA,YAAA,EAAc,YAAY,KAAK,CAAA,CAAA;AAC5E,MAAA,IAAA,CAAK,WAAY,CAAA,KAAA,CAAM,aAAe,EAAA,YAAA,EAAc,QAAQ,SAAS,CAAA,CAAA;AAErE,MAAA,aAAA,CAAc,oBAAoB,YAAY,CAAA,CAAA;AAAA,eAEzC,SACT,EAAA;AACI,MAAA,IAAA,CAAK,WAAY,CAAA,KAAA,CAAM,aAAe,EAAA,KAAA,EAAO,QAAQ,SAAS,CAAA,CAAA;AAAA,KAGlE,MAAA;AACI,MAAA,IAAA,CAAK,WAAY,CAAA,KAAA,CAAM,aAAe,EAAA,KAAA,EAAO,QAAQ,SAAS,CAAA,CAAA;AAAA,KAClE;AAAA,GACJ;AAAA,EAEA,aACA,GAAA;AACI,IAAA,IAAI,KAAK,iBACT,EAAA;AACI,MAAA,IAAA,CAAK,OAAU,GAAA,CAAA,CAAA;AAAA,KAGnB,MAAA;AACI,MAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,IAAI,IAAK,CAAA,WAAA,CAAY,QAAQ,CAAA,EAAG,KAAK,GAAI,CAAA,IAAA,CAAK,WAAY,CAAA,QAAQ,CAAC,CAAI,GAAA,CAAA,CAAA;AAAA,KACxG;AAAA,GACJ;AAAA,EAMA,IAAI,IACJ,GAAA;AACI,IAAA,OAAO,KAAK,WAAY,CAAA,IAAA,CAAA;AAAA,GAC5B;AAAA,EAEA,IAAI,KAAK,KACT,EAAA;AACI,IAAA,IAAA,CAAK,WAAY,CAAA,IAAA,GAAO,IAAK,CAAA,WAAA,CAAY,IAAO,GAAA,KAAA,CAAA;AAChD,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAAA,GACvB;AAAA,EAMA,IAAI,OACJ,GAAA;AACI,IAAA,OAAO,KAAK,WAAY,CAAA,OAAA,CAAA;AAAA,GAC5B;AAAA,EAEA,IAAI,QAAQ,KACZ,EAAA;AACI,IAAA,IAAA,CAAK,WAAY,CAAA,OAAA,GAAU,IAAK,CAAA,WAAA,CAAY,OAAU,GAAA,KAAA,CAAA;AAAA,GAC1D;AAAA,EAMA,IAAI,KACJ,GAAA;AACI,IAAA,OAAO,KAAK,WAAY,CAAA,IAAA,CAAA;AAAA,GAC5B;AAAA,EAEA,IAAI,MAAM,KACV,EAAA;AACI,IAAA,IAAA,CAAK,YAAY,IAAO,GAAA,KAAA,CAAA;AACxB,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAAA,GACvB;AAAA,EAMA,IAAI,KACJ,GAAA;AACI,IAAA,OAAO,KAAK,WAAY,CAAA,IAAA,CAAA;AAAA,GAC5B;AAAA,EAEA,IAAI,MAAM,KACV,EAAA;AACI,IAAA,IAAA,CAAK,YAAY,IAAO,GAAA,KAAA,CAAA;AACxB,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAAA,GACvB;AAAA,EAMA,IAAI,SACJ,GAAA;AACI,IAAA,OAAO,KAAK,WAAY,CAAA,SAAA,CAAA;AAAA,GAC5B;AAAA,EAEA,IAAI,UAAU,KACd,EAAA;AACI,IAAA,IAAA,CAAK,YAAY,SAAY,GAAA,KAAA,CAAA;AAAA,GACjC;AAAA,EAMA,IAAI,gBACJ,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,iBAAA,CAAA;AAAA,GAChB;AAAA,EAEA,IAAI,iBAAiB,KACrB,EAAA;AACI,IAAA,IAAA,CAAK,iBAAoB,GAAA,KAAA,CAAA;AACzB,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAAA,GACvB;AACJ;;;;"}