71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
import { Matrix } from '../../../maths/matrix/Matrix.mjs';
|
|
import { boundsPool } from './utils/matrixAndBoundsPool.mjs';
|
|
|
|
"use strict";
|
|
const tempMatrix = new Matrix();
|
|
function getFastGlobalBounds(target, bounds) {
|
|
bounds.clear();
|
|
_getGlobalBoundsRecursive(target, bounds);
|
|
if (!bounds.isValid) {
|
|
bounds.set(0, 0, 0, 0);
|
|
}
|
|
if (!target.renderGroup) {
|
|
bounds.applyMatrix(target.parentRenderGroup.worldTransform);
|
|
} else {
|
|
bounds.applyMatrix(target.renderGroup.localTransform);
|
|
}
|
|
return bounds;
|
|
}
|
|
function _getGlobalBoundsRecursive(target, bounds) {
|
|
if (target.localDisplayStatus !== 7 || !target.measurable) {
|
|
return;
|
|
}
|
|
const manageEffects = !!target.effects.length;
|
|
let localBounds = bounds;
|
|
if (target.renderGroup || manageEffects) {
|
|
localBounds = boundsPool.get().clear();
|
|
}
|
|
if (target.boundsArea) {
|
|
bounds.addRect(target.boundsArea, target.worldTransform);
|
|
} else {
|
|
if (target.renderPipeId) {
|
|
const viewBounds = target.bounds;
|
|
localBounds.addFrame(
|
|
viewBounds.minX,
|
|
viewBounds.minY,
|
|
viewBounds.maxX,
|
|
viewBounds.maxY,
|
|
target.groupTransform
|
|
);
|
|
}
|
|
const children = target.children;
|
|
for (let i = 0; i < children.length; i++) {
|
|
_getGlobalBoundsRecursive(children[i], localBounds);
|
|
}
|
|
}
|
|
if (manageEffects) {
|
|
let advanced = false;
|
|
for (let i = 0; i < target.effects.length; i++) {
|
|
if (target.effects[i].addBounds) {
|
|
if (!advanced) {
|
|
advanced = true;
|
|
localBounds.applyMatrix(target.parentRenderGroup.worldTransform);
|
|
}
|
|
target.effects[i].addBounds(localBounds, true);
|
|
}
|
|
}
|
|
if (advanced) {
|
|
localBounds.applyMatrix(target.parentRenderGroup.worldTransform.copyTo(tempMatrix).invert());
|
|
bounds.addBounds(localBounds, target.relativeGroupTransform);
|
|
}
|
|
bounds.addBounds(localBounds);
|
|
boundsPool.return(localBounds);
|
|
} else if (target.renderGroup) {
|
|
bounds.addBounds(localBounds, target.relativeGroupTransform);
|
|
boundsPool.return(localBounds);
|
|
}
|
|
}
|
|
|
|
export { _getGlobalBoundsRecursive, getFastGlobalBounds };
|
|
//# sourceMappingURL=getFastGlobalBounds.mjs.map
|