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 6.12 kB
{"version":3,"file":"getGlobalBounds.mjs","sources":["../../../../src/scene/container/bounds/getGlobalBounds.ts"],"sourcesContent":["import { Matrix } from '../../../maths/matrix/Matrix';\nimport { boundsPool, matrixPool } from './utils/matrixAndBoundsPool';\n\nimport type { Renderable } from '../../../rendering/renderers/shared/Renderable';\nimport type { Container } from '../Container';\nimport type { Bounds } from './Bounds';\n\n/**\n * Gets the global bounds of a container, including all its children\n * @param target - The target container to get the bounds from\n * @param skipUpdateTransform - If true, the transform will not be updated before calculating bounds.\n * @param bounds - The output bounds object.\n * @returns The bounds.\n * @internal\n */\nexport function getGlobalBounds(target: Container, skipUpdateTransform: boolean, bounds: Bounds): Bounds\n{\n bounds.clear();\n\n let parentTransform;\n let pooledMatrix;\n\n if (target.parent)\n {\n if (!skipUpdateTransform)\n {\n pooledMatrix = matrixPool.get().identity();\n parentTransform = updateTransformBackwards(target, pooledMatrix);\n }\n else\n {\n parentTransform = target.parent.worldTransform;\n }\n }\n else\n {\n parentTransform = Matrix.IDENTITY;\n }\n\n // then collect them...\n\n _getGlobalBounds(target, bounds, parentTransform, skipUpdateTransform);\n\n if (pooledMatrix)\n {\n matrixPool.return(pooledMatrix);\n }\n\n if (!bounds.isValid)\n {\n bounds.set(0, 0, 0, 0);\n }\n\n return bounds;\n}\n\nfunction _getGlobalBounds(\n target: Container,\n bounds: Bounds,\n parentTransform: Matrix,\n skipUpdateTransform: boolean,\n): void\n{\n if (!target.visible || !target.measurable) return;\n\n let worldTransform: Matrix;\n\n if (!skipUpdateTransform)\n {\n target.updateLocalTransform();\n\n worldTransform = matrixPool.get();\n\n worldTransform.appendFrom(target.localTransform, parentTransform);\n }\n else\n {\n worldTransform = target.worldTransform;\n }\n\n const parentBounds = bounds;\n const preserveBounds = !!target.effects.length;\n\n if (preserveBounds)\n {\n bounds = boundsPool.get().clear();\n }\n\n if (target.boundsArea)\n {\n bounds.addRect(target.boundsArea, worldTransform);\n }\n else\n {\n const renderableBounds = (target as Renderable).bounds;\n\n if (renderableBounds && !renderableBounds.isEmpty())\n {\n // save a copy\n bounds.matrix = worldTransform;\n bounds.addBounds(renderableBounds);\n }\n\n for (let i = 0; i < target.children.length; i++)\n {\n _getGlobalBounds(target.children[i], bounds, worldTransform, skipUpdateTransform);\n }\n }\n\n if (preserveBounds)\n {\n for (let i = 0; i < target.effects.length; i++)\n {\n target.effects[i].addBounds?.(bounds);\n }\n\n parentBounds.addBounds(bounds, Matrix.IDENTITY);\n\n boundsPool.return(bounds);\n }\n\n if (!skipUpdateTransform)\n {\n matrixPool.return(worldTransform);\n }\n}\n\n/**\n * @param target\n * @param parentTransform\n * @internal\n */\nexport function updateTransformBackwards(target: Container, parentTransform: Matrix)\n{\n const parent = target.parent;\n\n if (parent)\n {\n updateTransformBackwards(parent, parentTransform);\n\n parent.updateLocalTransform();\n\n parentTransform.append(parent.localTransform);\n }\n\n return parentTransform;\n}\n"],"names":[],"mappings":"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"}