Files
nothoughts/node_modules/pixi.js/lib/scene/container/container-mixins/effectsMixin.mjs.map
2025-08-04 18:57:35 +02:00

1 line
8.7 KiB
Plaintext

{"version":3,"file":"effectsMixin.mjs","sources":["../../../../src/scene/container/container-mixins/effectsMixin.ts"],"sourcesContent":["import { FilterEffect } from '../../../filters/FilterEffect';\nimport { MaskEffectManager } from '../../../rendering/mask/MaskEffectManager';\n\nimport type { Filter } from '../../../filters/Filter';\nimport type { Rectangle } from '../../../maths/shapes/Rectangle';\nimport type { MaskEffect } from '../../../rendering/mask/MaskEffectManager';\nimport type { Container } from '../Container';\nimport type { Effect } from '../Effect';\n\nexport interface EffectsMixinConstructor\n{\n mask?: number | Container | null;\n filters?: Filter | Filter[];\n}\nexport interface EffectsMixin extends Required<EffectsMixinConstructor>\n{\n _maskEffect?: MaskEffect;\n _filterEffect?: FilterEffect,\n\n filterArea?: Rectangle,\n effects?: Effect[];\n\n addEffect(effect: Effect): void;\n removeEffect(effect: Effect): void;\n}\n\nexport const effectsMixin: Partial<Container> = {\n _maskEffect: null,\n _filterEffect: null,\n\n /**\n * @todo Needs docs.\n * @memberof scene.Container#\n * @type {Array<Effect>}\n */\n effects: [],\n\n /**\n * @todo Needs docs.\n * @param effect - The effect to add.\n * @memberof scene.Container#\n * @ignore\n */\n addEffect(effect: Effect)\n {\n const index = this.effects.indexOf(effect);\n\n if (index !== -1) return; // already exists!\n\n this.effects.push(effect);\n\n this.effects.sort((a, b) => a.priority - b.priority);\n\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n\n if (renderGroup)\n {\n renderGroup.structureDidChange = true;\n }\n\n // if (this.renderGroup)\n // {\n // this.renderGroup.structureDidChange = true;\n // }\n\n this._updateIsSimple();\n },\n /**\n * @todo Needs docs.\n * @param effect - The effect to remove.\n * @memberof scene.Container#\n * @ignore\n */\n removeEffect(effect: Effect)\n {\n const index = this.effects.indexOf(effect);\n\n if (index === -1) return; // already exists!\n\n this.effects.splice(index, 1);\n\n if (this.parentRenderGroup)\n {\n this.parentRenderGroup.structureDidChange = true;\n }\n\n this._updateIsSimple();\n },\n\n set mask(value: number | Container | null)\n {\n const effect = this._maskEffect;\n\n if (effect?.mask === value) return;\n\n if (effect)\n {\n this.removeEffect(effect);\n\n MaskEffectManager.returnMaskEffect(effect);\n\n this._maskEffect = null;\n }\n\n if (value === null || value === undefined) return;\n\n this._maskEffect = MaskEffectManager.getMaskEffect(value);\n\n this.addEffect(this._maskEffect);\n },\n\n /**\n * Sets a mask for the displayObject. A mask is an object that limits the visibility of an\n * object to the shape of the mask applied to it. In PixiJS a regular mask must be a\n * {@link Graphics} or a {@link Sprite} object. This allows for much faster masking in canvas as it\n * utilities shape clipping. Furthermore, a mask of an object must be in the subtree of its parent.\n * Otherwise, `getLocalBounds` may calculate incorrect bounds, which makes the container's width and height wrong.\n * To remove a mask, set this property to `null`.\n *\n * For sprite mask both alpha and red channel are used. Black mask is the same as transparent mask.\n * @example\n * import { Graphics, Sprite } from 'pixi.js';\n *\n * const graphics = new Graphics();\n * graphics.beginFill(0xFF3300);\n * graphics.drawRect(50, 250, 100, 100);\n * graphics.endFill();\n *\n * const sprite = new Sprite(texture);\n * sprite.mask = graphics;\n * @memberof scene.Container#\n */\n get mask(): unknown\n {\n return this._maskEffect?.mask;\n },\n\n set filters(value: Filter | Filter[] | null | undefined)\n {\n if (!Array.isArray(value) && value) value = [value];\n\n const effect = this._filterEffect ||= new FilterEffect();\n\n // Ignore the Filter type\n value = value as Filter[] | null | undefined;\n\n const hasFilters = value?.length > 0;\n const hadFilters = effect.filters?.length > 0;\n\n const didChange = hasFilters !== hadFilters;\n\n // Clone the filters array so we don't freeze the user-input\n value = Array.isArray(value) ? value.slice(0) : value;\n\n // Ensure filters are immutable via filters getter\n effect.filters = Object.freeze(value);\n\n if (didChange)\n {\n if (hasFilters)\n {\n this.addEffect(effect);\n }\n else\n {\n this.removeEffect(effect);\n\n // sets the empty array...\n effect.filters = value ?? null;\n }\n }\n },\n\n /**\n * Sets the filters for the displayObject.\n * IMPORTANT: This is a WebGL only feature and will be ignored by the canvas renderer.\n * To remove filters simply set this property to `'null'`.\n * @memberof scene.Container#\n */\n get filters(): readonly Filter[]\n {\n return this._filterEffect?.filters;\n },\n\n set filterArea(value: Rectangle)\n {\n this._filterEffect ||= new FilterEffect();\n\n this._filterEffect.filterArea = value;\n },\n\n /**\n * The area the filter is applied to. This is used as more of an optimization\n * rather than figuring out the dimensions of the displayObject each frame you can set this rectangle.\n *\n * Also works as an interaction mask.\n * @memberof scene.Container#\n */\n get filterArea(): Rectangle\n {\n return this._filterEffect?.filterArea;\n },\n\n} as Container;\n"],"names":[],"mappings":"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"}