pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 8.95 kB
Source Map (JSON)
{"version":3,"file":"ViewContainer.mjs","sources":["../../../src/scene/view/ViewContainer.ts"],"sourcesContent":["import { type InstructionSet } from '../../rendering/renderers/shared/instructions/InstructionSet';\nimport { type RenderPipe } from '../../rendering/renderers/shared/instructions/RenderPipe';\nimport { type Renderer } from '../../rendering/renderers/types';\nimport { Bounds } from '../container/bounds/Bounds';\nimport { Container, type ContainerOptions } from '../container/Container';\nimport { type IRenderLayer } from '../layers/RenderLayer';\n\nimport type { PointData } from '../../maths/point/PointData';\nimport type { View } from '../../rendering/renderers/shared/view/View';\nimport type { DestroyOptions } from '../container/destroyTypes';\n\n/** @internal */\nexport interface GPUData\n{\n destroy: () => void;\n}\n\n/**\n * Options for the construction of a ViewContainer.\n * @category scene\n * @advanced\n */\nexport interface ViewContainerOptions extends ContainerOptions, PixiMixins.ViewContainerOptions {}\n// eslint-disable-next-line requireExport/require-export-jsdoc, requireMemberAPI/require-member-api-doc\nexport interface ViewContainer<GPU_DATA extends GPUData = any> extends PixiMixins.ViewContainer, Container\n{\n // eslint-disable-next-line requireMemberAPI/require-member-api-doc\n _gpuData: Record<number, GPU_DATA>;\n}\n\n/**\n * A ViewContainer is a type of container that represents a view.\n * This view can be a Sprite, a Graphics object, or any other object that can be rendered.\n * This class is abstract and should not be used directly.\n * @category scene\n * @advanced\n */\nexport abstract class ViewContainer<GPU_DATA extends GPUData = any> extends Container implements View\n{\n /** @internal */\n public override readonly renderPipeId: string;\n /** @internal */\n public readonly canBundle = true;\n /** @internal */\n public override allowChildren = false;\n\n /** @internal */\n public _roundPixels: 0 | 1 = 0;\n /** @internal */\n public _lastUsed = -1;\n\n /** @internal */\n public _gpuData: Record<number, GPU_DATA> = Object.create(null);\n\n protected _bounds: Bounds = new Bounds(0, 1, 0, 0);\n protected _boundsDirty = true;\n\n /**\n * The local bounds of the view in its own coordinate space.\n * Bounds are automatically updated when the view's content changes.\n * @example\n * ```ts\n * // Get bounds dimensions\n * const bounds = view.bounds;\n * console.log(`Width: ${bounds.maxX - bounds.minX}`);\n * console.log(`Height: ${bounds.maxY - bounds.minY}`);\n * ```\n * @returns The rectangular bounds of the view\n * @see {@link Bounds} For bounds operations\n */\n public get bounds()\n {\n if (!this._boundsDirty) return this._bounds;\n\n this.updateBounds();\n\n this._boundsDirty = false;\n\n return this._bounds;\n }\n\n /** @private */\n protected abstract updateBounds(): void;\n\n /**\n * Whether or not to round the x/y position of the sprite.\n * @example\n * ```ts\n * // Enable pixel rounding for crisp rendering\n * view.roundPixels = true;\n * ```\n * @default false\n */\n get roundPixels()\n {\n return !!this._roundPixels;\n }\n\n set roundPixels(value: boolean)\n {\n this._roundPixels = value ? 1 : 0;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor(options: ViewContainerOptions)\n {\n super(options);\n }\n\n /**\n * Checks if the object contains the given point in local coordinates.\n * Uses the view's bounds for hit testing.\n * @example\n * ```ts\n * // Basic point check\n * const localPoint = { x: 50, y: 25 };\n * const contains = view.containsPoint(localPoint);\n * console.log('Point is inside:', contains);\n * ```\n * @param point - The point to check in local coordinates\n * @returns True if the point is within the view's bounds\n * @see {@link ViewContainer#bounds} For the bounds used in hit testing\n * @see {@link Container#toLocal} For converting global coordinates to local\n */\n public containsPoint(point: PointData)\n {\n const bounds = this.bounds;\n const { x, y } = point;\n\n return (x >= bounds.minX\n && x <= bounds.maxX\n && y >= bounds.minY\n && y <= bounds.maxY);\n }\n\n /** @private */\n public abstract batched: boolean;\n\n /** @private */\n protected onViewUpdate()\n {\n this._didViewChangeTick++;\n\n this._boundsDirty = true;\n\n if (this.didViewUpdate) return;\n this.didViewUpdate = true;\n\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n\n if (renderGroup)\n {\n renderGroup.onChildViewUpdate(this);\n }\n }\n\n public override destroy(options?: DestroyOptions): void\n {\n super.destroy(options);\n\n this._bounds = null;\n\n for (const key in this._gpuData)\n {\n (this._gpuData[key] as GPU_DATA).destroy?.();\n }\n\n this._gpuData = null;\n }\n\n /**\n * Collects renderables for the view container.\n * @param instructionSet - The instruction set to collect renderables for.\n * @param renderer - The renderer to collect renderables for.\n * @param currentLayer - The current render layer.\n * @internal\n */\n public override collectRenderablesSimple(\n instructionSet: InstructionSet,\n renderer: Renderer,\n currentLayer: IRenderLayer,\n ): void\n {\n const { renderPipes } = renderer;\n\n // TODO add blends in\n renderPipes.blendMode.setBlendMode(this, this.groupBlendMode, instructionSet);\n\n const rp = renderPipes as unknown as Record<string, RenderPipe>;\n\n rp[this.renderPipeId].addRenderable(this, instructionSet);\n\n this.didViewUpdate = false;\n\n const children = this.children;\n const length = children.length;\n\n for (let i = 0; i < length; i++)\n {\n children[i].collectRenderables(instructionSet, renderer, currentLayer);\n }\n }\n}\n"],"names":[],"mappings":";;;;AAqCO,MAAe,sBAAsD,SAC5E,CAAA;AAAA;AAAA,EAkEI,YAAY,OACZ,EAAA;AACI,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAhEjB;AAAA,IAAA,IAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAE5B;AAAA,IAAA,IAAA,CAAgB,aAAgB,GAAA,KAAA,CAAA;AAGhC;AAAA,IAAA,IAAA,CAAO,YAAsB,GAAA,CAAA,CAAA;AAE7B;AAAA,IAAA,IAAA,CAAO,SAAY,GAAA,CAAA,CAAA,CAAA;AAGnB;AAAA,IAAO,IAAA,CAAA,QAAA,mBAA4C,MAAA,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAE9D,IAAA,IAAA,CAAU,UAAkB,IAAI,MAAA,CAAO,CAAG,EAAA,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AACjD,IAAA,IAAA,CAAU,YAAe,GAAA,IAAA,CAAA;AAAA,GAoDzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EArCA,IAAW,MACX,GAAA;AACI,IAAA,IAAI,CAAC,IAAK,CAAA,YAAA;AAAc,MAAA,OAAO,IAAK,CAAA,OAAA,CAAA;AAEpC,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAElB,IAAA,IAAA,CAAK,YAAe,GAAA,KAAA,CAAA;AAEpB,IAAA,OAAO,IAAK,CAAA,OAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,IAAI,WACJ,GAAA;AACI,IAAO,OAAA,CAAC,CAAC,IAAK,CAAA,YAAA,CAAA;AAAA,GAClB;AAAA,EAEA,IAAI,YAAY,KAChB,EAAA;AACI,IAAK,IAAA,CAAA,YAAA,GAAe,QAAQ,CAAI,GAAA,CAAA,CAAA;AAAA,GACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBO,cAAc,KACrB,EAAA;AACI,IAAA,MAAM,SAAS,IAAK,CAAA,MAAA,CAAA;AACpB,IAAM,MAAA,EAAE,CAAG,EAAA,CAAA,EAAM,GAAA,KAAA,CAAA;AAEjB,IAAQ,OAAA,CAAA,IAAK,MAAO,CAAA,IAAA,IACb,CAAK,IAAA,MAAA,CAAO,QACZ,CAAK,IAAA,MAAA,CAAO,IACZ,IAAA,CAAA,IAAK,MAAO,CAAA,IAAA,CAAA;AAAA,GACvB;AAAA;AAAA,EAMU,YACV,GAAA;AACI,IAAK,IAAA,CAAA,kBAAA,EAAA,CAAA;AAEL,IAAA,IAAA,CAAK,YAAe,GAAA,IAAA,CAAA;AAEpB,IAAA,IAAI,IAAK,CAAA,aAAA;AAAe,MAAA,OAAA;AACxB,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;AAErB,IAAM,MAAA,WAAA,GAAc,IAAK,CAAA,WAAA,IAAe,IAAK,CAAA,iBAAA,CAAA;AAE7C,IAAA,IAAI,WACJ,EAAA;AACI,MAAA,WAAA,CAAY,kBAAkB,IAAI,CAAA,CAAA;AAAA,KACtC;AAAA,GACJ;AAAA,EAEgB,QAAQ,OACxB,EAAA;AACI,IAAA,KAAA,CAAM,QAAQ,OAAO,CAAA,CAAA;AAErB,IAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAA;AAEf,IAAW,KAAA,MAAA,GAAA,IAAO,KAAK,QACvB,EAAA;AACI,MAAC,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA,CAAe,OAAU,IAAA,CAAA;AAAA,KAC/C;AAEA,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAAA,GACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASgB,wBAAA,CACZ,cACA,EAAA,QAAA,EACA,YAEJ,EAAA;AACI,IAAM,MAAA,EAAE,aAAgB,GAAA,QAAA,CAAA;AAGxB,IAAA,WAAA,CAAY,SAAU,CAAA,YAAA,CAAa,IAAM,EAAA,IAAA,CAAK,gBAAgB,cAAc,CAAA,CAAA;AAE5E,IAAA,MAAM,EAAK,GAAA,WAAA,CAAA;AAEX,IAAA,EAAA,CAAG,IAAK,CAAA,YAAY,CAAE,CAAA,aAAA,CAAc,MAAM,cAAc,CAAA,CAAA;AAExD,IAAA,IAAA,CAAK,aAAgB,GAAA,KAAA,CAAA;AAErB,IAAA,MAAM,WAAW,IAAK,CAAA,QAAA,CAAA;AACtB,IAAA,MAAM,SAAS,QAAS,CAAA,MAAA,CAAA;AAExB,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,EAAQ,CAC5B,EAAA,EAAA;AACI,MAAA,QAAA,CAAS,CAAC,CAAA,CAAE,kBAAmB,CAAA,cAAA,EAAgB,UAAU,YAAY,CAAA,CAAA;AAAA,KACzE;AAAA,GACJ;AACJ;;;;"}