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 7.79 kB
{"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 ResizePlugin}.\n * These options control how your application handles window and element resizing.\n * @example\n * ```ts\n * // Auto-resize to window\n * await app.init({ resizeTo: window });\n *\n * // Auto-resize to container element\n * await app.init({ resizeTo: document.querySelector('#game') });\n * ```\n * @category app\n * @standard\n */\nexport interface ResizePluginOptions\n{\n /**\n * Element to automatically resize the renderer to.\n * @example\n * ```ts\n * const app = new Application();\n * await app.init({\n * resizeTo: window, // Resize to the entire window\n * // or\n * resizeTo: document.querySelector('#game-container'), // Resize to a specific element\n * // or\n * resizeTo: null, // Disable auto-resize\n * });\n * ```\n * @default null\n */\n resizeTo?: Window | HTMLElement;\n}\n\n/**\n * Middleware for Application's resize functionality. This plugin handles automatic\n * and manual resizing of your PixiJS application.\n *\n * Adds the following features to {@link Application}:\n * - `resizeTo`: Set an element to automatically resize to\n * - `resize`: Manually trigger a resize\n * - `queueResize`: Queue a resize for the next animation frame\n * - `cancelResize`: Cancel a queued resize\n * @example\n * ```ts\n * import { Application, ResizePlugin } from 'pixi.js';\n *\n * // Create application\n * const app = new Application();\n *\n * // Example 1: Auto-resize to window\n * await app.init({ resizeTo: window });\n *\n * // Example 2: Auto-resize to specific element\n * const container = document.querySelector('#game-container');\n * await app.init({ resizeTo: container });\n *\n * // Example 3: Change resize target at runtime\n * app.resizeTo = window; // Enable auto-resize to window\n * app.resizeTo = null; // Disable auto-resize\n * ```\n * @category app\n * @standard\n */\nexport class ResizePlugin\n{\n /** @ignore */\n public static extension: ExtensionMetadata = ExtensionType.Application;\n /** @internal */\n public static resizeTo: Window | HTMLElement;\n /** @internal */\n public static resize: () => void;\n /** @internal */\n public static renderer: ResizeableRenderer;\n /** @internal */\n public static queueResize: () => void;\n /** @internal */\n public static render: () => void;\n /** @internal */\n private static _resizeId: number;\n /** @internal */\n private static _resizeTo: Window | HTMLElement;\n /** @internal */\n private static _cancelResize: () => void;\n\n /**\n * Initialize the plugin with scope of application instance\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 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 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 this._cancelResize = (): void =>\n {\n if (this._resizeId)\n {\n cancelAnimationFrame(this._resizeId);\n this._resizeId = null;\n }\n };\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 * @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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"}