1 line
7.3 KiB
Plaintext
1 line
7.3 KiB
Plaintext
{"version":3,"file":"ResizePlugin.mjs","sources":["../../src/app/ResizePlugin.ts"],"sourcesContent":["import { ExtensionType } from '../extensions/Extensions';\n\nimport type { ExtensionMetadata } from '../extensions/Extensions';\nimport type { Renderer } from '../rendering/renderers/types';\n\ntype ResizeableRenderer = Pick<Renderer, 'resize'>;\n\n/**\n * Application options for the {@link app.ResizePlugin}.\n * @memberof app\n * @property {Window|HTMLElement} [resizeTo=window] - Element to automatically resize the renderer to.\n */\nexport interface ResizePluginOptions\n{\n /**\n * Element to automatically resize the renderer to.\n * @memberof app.ApplicationOptions\n */\n resizeTo?: Window | HTMLElement;\n}\n\n/**\n * Middleware for Application's resize functionality.\n *\n * Adds the following methods to {@link app.Application}:\n * * {@link app.Application#resizeTo}\n * * {@link app.Application#resize}\n * * {@link app.Application#queueResize}\n * * {@link app.Application#cancelResize}\n * @example\n * import { extensions, ResizePlugin } from 'pixi.js';\n *\n * extensions.add(ResizePlugin);\n * @memberof app\n */\nexport class ResizePlugin\n{\n /** @ignore */\n public static extension: ExtensionMetadata = ExtensionType.Application;\n\n public static resizeTo: Window | HTMLElement;\n public static resize: () => void;\n public static renderer: ResizeableRenderer;\n public static queueResize: () => void;\n public static render: () => void;\n private static _resizeId: number;\n private static _resizeTo: Window | HTMLElement;\n private static _cancelResize: () => void;\n\n /**\n * Initialize the plugin with scope of application instance\n * @static\n * @private\n * @param {object} [options] - See application options\n */\n public static init(options: ResizePluginOptions): void\n {\n Object.defineProperty(this, 'resizeTo',\n /**\n * The HTML element or window to automatically resize the\n * renderer's view element to match width and height.\n * @member {Window|HTMLElement}\n * @name resizeTo\n * @memberof app.Application#\n */\n {\n set(dom: Window | HTMLElement)\n {\n globalThis.removeEventListener('resize', this.queueResize);\n this._resizeTo = dom;\n if (dom)\n {\n globalThis.addEventListener('resize', this.queueResize);\n this.resize();\n }\n },\n get()\n {\n return this._resizeTo;\n },\n });\n\n /**\n * Resize is throttled, so it's safe to call this multiple times per frame and it'll\n * only be called once.\n * @memberof app.Application#\n * @method queueResize\n * @private\n */\n this.queueResize = (): void =>\n {\n if (!this._resizeTo)\n {\n return;\n }\n\n this._cancelResize();\n\n // // Throttle resize events per raf\n this._resizeId = requestAnimationFrame(() => this.resize());\n };\n\n /**\n * Cancel the resize queue.\n * @memberof app.Application#\n * @method cancelResize\n * @private\n */\n this._cancelResize = (): void =>\n {\n if (this._resizeId)\n {\n cancelAnimationFrame(this._resizeId);\n this._resizeId = null;\n }\n };\n\n /**\n * Execute an immediate resize on the renderer, this is not\n * throttled and can be expensive to call many times in a row.\n * Will resize only if `resizeTo` property is set.\n * @memberof app.Application#\n * @method resize\n */\n this.resize = (): void =>\n {\n if (!this._resizeTo)\n {\n return;\n }\n\n // clear queue resize\n this._cancelResize();\n\n let width: number;\n let height: number;\n\n // Resize to the window\n if (this._resizeTo === globalThis.window)\n {\n width = globalThis.innerWidth;\n height = globalThis.innerHeight;\n }\n // Resize to other HTML entities\n else\n {\n const { clientWidth, clientHeight } = this._resizeTo as HTMLElement;\n\n width = clientWidth;\n height = clientHeight;\n }\n\n this.renderer.resize(width, height);\n this.render();\n };\n\n // On resize\n this._resizeId = null;\n this._resizeTo = null;\n this.resizeTo = options.resizeTo || null;\n }\n\n /**\n * Clean up the ticker, scoped to application\n * @static\n * @private\n */\n public static destroy(): void\n {\n globalThis.removeEventListener('resize', this.queueResize);\n this._cancelResize();\n this._cancelResize = null;\n this.queueResize = null;\n this.resizeTo = null;\n this.resize = null;\n }\n}\n"],"names":[],"mappings":"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"} |