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.82 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,aAAA,CAClC;AAAA,EASI,YAAY,OAAA,EACZ;AACI,IAAA,IAAI,CAAC,QAAQ,QAAA,EACb;AACI,MAAA,OAAA,CAAQ,QAAA,GAAW,UAAA,CAAW,GAAA,EAAI,CAAE,YAAA,EAAa;AAAA,IACrD;AAEA,IAAA,IAAI,CAAC,QAAQ,KAAA,EACb;AACI,MAAA,OAAA,CAAQ,KAAA,GAAQ,QAAQ,QAAA,CAAS,KAAA;AAEjC,MAAA,IAAI,CAAC,QAAQ,WAAA,EACb;AACI,QAAA,OAAA,CAAQ,SAAS,OAAA,CAAQ,UAAA;AAAA,MAC7B;AAAA,IACJ;AAEA,IAAA,IAAI,CAAC,QAAQ,MAAA,EACb;AACI,MAAA,OAAA,CAAQ,MAAA,GAAS,QAAQ,QAAA,CAAS,MAAA;AAElC,MAAA,IAAI,CAAC,QAAQ,WAAA,EACb;AACI,QAAA,OAAA,CAAQ,UAAU,OAAA,CAAQ,UAAA;AAAA,MAC9B;AAAA,IACJ;AAEA,IAAA,KAAA,CAAM,OAAO,CAAA;AAjCjB,IAAA,IAAA,CAAO,cAAA,GAAiB,OAAA;AAmCpB,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAE3B,IAAA,IAAA,CAAK,YAAA,EAAa;AAElB,IAAA,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,OAAA,CAAQ,WAAA;AAAA,EACjC;AAAA,EAEO,YAAA,GACP;AACI,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,OAAA,IAAW,IAAA,CAAK,QAAA,EACxC;AACI,MAAA,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,KAAK,KAAK,CAAA,EAAA,CAAA;AACzC,MAAA,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,KAAK,MAAM,CAAA,EAAA,CAAA;AAAA,IAC/C;AAGA,IAAA,IAAI,IAAA,CAAK,SAAS,KAAA,KAAU,IAAA,CAAK,cAAc,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,IAAA,CAAK,WAAA,EAC7E;AACI,MAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,IAAA,CAAK,UAAA;AAC3B,MAAA,IAAA,CAAK,QAAA,CAAS,SAAS,IAAA,CAAK,WAAA;AAAA,IAChC;AAAA,EACJ;AAAA,EAEO,MAAA,CAAO,QAAQ,IAAA,CAAK,KAAA,EAAO,SAAS,IAAA,CAAK,MAAA,EAAQ,UAAA,GAAa,IAAA,CAAK,WAAA,EAC1E;AACI,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,QAAQ,UAAU,CAAA;AAExD,IAAA,IAAI,SAAA,EACJ;AACI,MAAA,IAAA,CAAK,YAAA,EAAa;AAAA,IACtB;AAEA,IAAA,OAAO,SAAA;AAAA,EACX;AAAA,EAEA,OAAc,KAAK,QAAA,EACnB;AACI,IAAA,OAAQ,WAAW,iBAAA,IAAqB,QAAA,YAAoB,iBAAA,IACxD,UAAA,CAAW,mBAAmB,QAAA,YAAoB,eAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAAA,GACJ;AACI,IAAA,OAAO,KAAK,UAAA,KAAe,IAAA,CAAK,aAAa,IAAA,CAAK,QAAA,CAAS,WAAW,IAAI,CAAA,CAAA;AAAA,EAC9E;AACJ;AAzFa,YAAA,CAEK,YAA+B,aAAA,CAAc,aAAA;;;;"}