UNPKG

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 5.92 kB
{"version":3,"file":"CanvasSource.mjs","sources":["../../../../../../src/rendering/renderers/shared/texture/sources/CanvasSource.ts"],"sourcesContent":["import { DOMAdapter } from '../../../../../environment/adapter';\nimport { ExtensionType } from '../../../../../extensions/Extensions';\nimport { TextureSource } from './TextureSource';\n\nimport type { ICanvas } from '../../../../../environment/canvas/ICanvas';\nimport type { ExtensionMetadata } from '../../../../../extensions/Extensions';\nimport type { TextureSourceOptions } from './TextureSource';\n\n/**\n * Options for creating a CanvasSource.\n * @category rendering\n * @advanced\n */\nexport interface CanvasSourceOptions extends TextureSourceOptions<ICanvas>\n{\n /**\n * Should the canvas be resized to preserve its screen width and height regardless\n * of the resolution of the renderer, this is only supported for HTMLCanvasElement\n * and will be ignored if the canvas is an OffscreenCanvas.\n */\n autoDensity?: boolean;\n /** if true, this canvas will be set up to be transparent where possible */\n transparent?: boolean;\n}\n\n/**\n * A texture source that uses a canvas as its resource.\n * It automatically resizes the canvas based on the width, height, and resolution.\n * It also provides a 2D rendering context for drawing.\n * @category rendering\n * @advanced\n */\nexport class CanvasSource extends TextureSource<ICanvas>\n{\n public static extension: ExtensionMetadata = ExtensionType.TextureSource;\n\n public uploadMethodId = 'image';\n public autoDensity: boolean;\n public transparent: boolean;\n\n private _context2D: CanvasRenderingContext2D;\n\n constructor(options: CanvasSourceOptions)\n {\n if (!options.resource)\n {\n options.resource = DOMAdapter.get().createCanvas();\n }\n\n if (!options.width)\n {\n options.width = options.resource.width;\n\n if (!options.autoDensity)\n {\n options.width /= options.resolution;\n }\n }\n\n if (!options.height)\n {\n options.height = options.resource.height;\n\n if (!options.autoDensity)\n {\n options.height /= options.resolution;\n }\n }\n\n super(options);\n\n this.autoDensity = options.autoDensity;\n\n this.resizeCanvas();\n\n this.transparent = !!options.transparent;\n }\n\n public resizeCanvas()\n {\n if (this.autoDensity && 'style' in this.resource)\n {\n this.resource.style.width = `${this.width}px`;\n this.resource.style.height = `${this.height}px`;\n }\n\n // only resize if wee need to, as this clears the canvas (even if values are set to the same)\n if (this.resource.width !== this.pixelWidth || this.resource.height !== this.pixelHeight)\n {\n this.resource.width = this.pixelWidth;\n this.resource.height = this.pixelHeight;\n }\n }\n\n public resize(width = this.width, height = this.height, resolution = this._resolution): boolean\n {\n const didResize = super.resize(width, height, resolution);\n\n if (didResize)\n {\n this.resizeCanvas();\n }\n\n return didResize;\n }\n\n public static test(resource: any): resource is ICanvas\n {\n return (globalThis.HTMLCanvasElement && resource instanceof HTMLCanvasElement)\n || (globalThis.OffscreenCanvas && resource instanceof OffscreenCanvas);\n }\n\n /**\n * Returns the 2D rendering context for the canvas.\n * Caches the context after creating it.\n * @returns The 2D rendering context of the canvas.\n */\n get context2D(): CanvasRenderingContext2D\n {\n return this._context2D || (this._context2D = this.resource.getContext('2d') as CanvasRenderingContext2D);\n }\n}\n"],"names":[],"mappings":";;;;;AAgCO,MAAM,qBAAqB,aAClC,CAAA;AAAA,EASI,YAAY,OACZ,EAAA;AACI,IAAI,IAAA,CAAC,QAAQ,QACb,EAAA;AACI,MAAA,OAAA,CAAQ,QAAW,GAAA,UAAA,CAAW,GAAI,EAAA,CAAE,YAAa,EAAA,CAAA;AAAA,KACrD;AAEA,IAAI,IAAA,CAAC,QAAQ,KACb,EAAA;AACI,MAAQ,OAAA,CAAA,KAAA,GAAQ,QAAQ,QAAS,CAAA,KAAA,CAAA;AAEjC,MAAI,IAAA,CAAC,QAAQ,WACb,EAAA;AACI,QAAA,OAAA,CAAQ,SAAS,OAAQ,CAAA,UAAA,CAAA;AAAA,OAC7B;AAAA,KACJ;AAEA,IAAI,IAAA,CAAC,QAAQ,MACb,EAAA;AACI,MAAQ,OAAA,CAAA,MAAA,GAAS,QAAQ,QAAS,CAAA,MAAA,CAAA;AAElC,MAAI,IAAA,CAAC,QAAQ,WACb,EAAA;AACI,QAAA,OAAA,CAAQ,UAAU,OAAQ,CAAA,UAAA,CAAA;AAAA,OAC9B;AAAA,KACJ;AAEA,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAjCjB,IAAA,IAAA,CAAO,cAAiB,GAAA,OAAA,CAAA;AAmCpB,IAAA,IAAA,CAAK,cAAc,OAAQ,CAAA,WAAA,CAAA;AAE3B,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAElB,IAAK,IAAA,CAAA,WAAA,GAAc,CAAC,CAAC,OAAQ,CAAA,WAAA,CAAA;AAAA,GACjC;AAAA,EAEO,YACP,GAAA;AACI,IAAA,IAAI,IAAK,CAAA,WAAA,IAAe,OAAW,IAAA,IAAA,CAAK,QACxC,EAAA;AACI,MAAA,IAAA,CAAK,QAAS,CAAA,KAAA,CAAM,KAAQ,GAAA,CAAA,EAAG,KAAK,KAAK,CAAA,EAAA,CAAA,CAAA;AACzC,MAAA,IAAA,CAAK,QAAS,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,EAAG,KAAK,MAAM,CAAA,EAAA,CAAA,CAAA;AAAA,KAC/C;AAGA,IAAI,IAAA,IAAA,CAAK,SAAS,KAAU,KAAA,IAAA,CAAK,cAAc,IAAK,CAAA,QAAA,CAAS,MAAW,KAAA,IAAA,CAAK,WAC7E,EAAA;AACI,MAAK,IAAA,CAAA,QAAA,CAAS,QAAQ,IAAK,CAAA,UAAA,CAAA;AAC3B,MAAK,IAAA,CAAA,QAAA,CAAS,SAAS,IAAK,CAAA,WAAA,CAAA;AAAA,KAChC;AAAA,GACJ;AAAA,EAEO,MAAA,CAAO,QAAQ,IAAK,CAAA,KAAA,EAAO,SAAS,IAAK,CAAA,MAAA,EAAQ,UAAa,GAAA,IAAA,CAAK,WAC1E,EAAA;AACI,IAAA,MAAM,SAAY,GAAA,KAAA,CAAM,MAAO,CAAA,KAAA,EAAO,QAAQ,UAAU,CAAA,CAAA;AAExD,IAAA,IAAI,SACJ,EAAA;AACI,MAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAAA,KACtB;AAEA,IAAO,OAAA,SAAA,CAAA;AAAA,GACX;AAAA,EAEA,OAAc,KAAK,QACnB,EAAA;AACI,IAAA,OAAQ,WAAW,iBAAqB,IAAA,QAAA,YAAoB,iBACxD,IAAA,UAAA,CAAW,mBAAmB,QAAoB,YAAA,eAAA,CAAA;AAAA,GAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SACJ,GAAA;AACI,IAAA,OAAO,KAAK,UAAe,KAAA,IAAA,CAAK,aAAa,IAAK,CAAA,QAAA,CAAS,WAAW,IAAI,CAAA,CAAA,CAAA;AAAA,GAC9E;AACJ,CAAA;AAzFa,YAAA,CAEK,YAA+B,aAAc,CAAA,aAAA;;;;"}