{"version":3,"file":"getLocalBounds.mjs","sources":["../../../../src/scene/container/bounds/getLocalBounds.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 * @param target\n * @param bounds\n * @param relativeMatrix\n * @internal\n */\nexport function getLocalBounds(target: Container, bounds: Bounds, relativeMatrix?: Matrix): Bounds\n{\n    bounds.clear();\n\n    relativeMatrix ||= Matrix.IDENTITY;\n\n    _getLocalBounds(target, bounds, relativeMatrix, target, true);\n\n    if (!bounds.isValid)\n    {\n        bounds.set(0, 0, 0, 0);\n    }\n\n    return bounds;\n}\n\nfunction _getLocalBounds(\n    target: Container,\n    bounds: Bounds,\n    parentTransform: Matrix,\n    rootContainer: Container,\n    isRoot: boolean\n): void\n{\n    let relativeTransform: Matrix;\n\n    if (!isRoot)\n    {\n        if (!target.visible || !target.measurable) return;\n\n        target.updateLocalTransform();\n\n        const localTransform = target.localTransform;\n\n        relativeTransform = matrixPool.get();\n        relativeTransform.appendFrom(localTransform, parentTransform);\n    }\n    else\n    {\n        relativeTransform = matrixPool.get();\n        relativeTransform = parentTransform.copyTo(relativeTransform);\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, relativeTransform);\n    }\n    else\n    {\n        if (target.renderPipeId)\n        {\n            bounds.matrix = relativeTransform;\n            bounds.addBounds((target as Renderable).bounds);\n        }\n\n        const children = target.children;\n\n        for (let i = 0; i < children.length; i++)\n        {\n            _getLocalBounds(children[i], bounds, relativeTransform, rootContainer, false);\n        }\n    }\n\n    if (preserveBounds)\n    {\n        for (let i = 0; i < target.effects.length; i++)\n        {\n            target.effects[i].addLocalBounds?.(bounds, rootContainer);\n        }\n\n        // TODO - make a add transformed bounds?\n        parentBounds.addBounds(bounds, Matrix.IDENTITY);\n\n        boundsPool.return(bounds);\n    }\n\n    matrixPool.return(relativeTransform);\n}\n\n"],"names":[],"mappings":";;;;AAaO,SAAS,cAAA,CAAe,MAAA,EAAmB,MAAA,EAAgB,cAAA,EAClE;AACI,EAAA,MAAA,CAAO,KAAA,EAAM;AAEb,EAAA,cAAA,KAAA,cAAA,GAAmB,MAAA,CAAO,QAAA,CAAA;AAE1B,EAAA,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,cAAA,EAAgB,MAAA,EAAQ,IAAI,CAAA;AAE5D,EAAA,IAAI,CAAC,OAAO,OAAA,EACZ;AACI,IAAA,MAAA,CAAO,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,EACzB;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,eAAA,CACL,MAAA,EACA,MAAA,EACA,eAAA,EACA,eACA,MAAA,EAEJ;AACI,EAAA,IAAI,iBAAA;AAEJ,EAAA,IAAI,CAAC,MAAA,EACL;AACI,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,IAAW,CAAC,OAAO,UAAA,EAAY;AAE3C,IAAA,MAAA,CAAO,oBAAA,EAAqB;AAE5B,IAAA,MAAM,iBAAiB,MAAA,CAAO,cAAA;AAE9B,IAAA,iBAAA,GAAoB,WAAW,GAAA,EAAI;AACnC,IAAA,iBAAA,CAAkB,UAAA,CAAW,gBAAgB,eAAe,CAAA;AAAA,EAChE,CAAA,MAEA;AACI,IAAA,iBAAA,GAAoB,WAAW,GAAA,EAAI;AACnC,IAAA,iBAAA,GAAoB,eAAA,CAAgB,OAAO,iBAAiB,CAAA;AAAA,EAChE;AAEA,EAAA,MAAM,YAAA,GAAe,MAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAC,MAAA,CAAO,OAAA,CAAQ,MAAA;AAExC,EAAA,IAAI,cAAA,EACJ;AACI,IAAA,MAAA,GAAS,UAAA,CAAW,GAAA,EAAI,CAAE,KAAA,EAAM;AAAA,EACpC;AAEA,EAAA,IAAI,OAAO,UAAA,EACX;AACI,IAAA,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,UAAA,EAAY,iBAAiB,CAAA;AAAA,EACvD,CAAA,MAEA;AACI,IAAA,IAAI,OAAO,YAAA,EACX;AACI,MAAA,MAAA,CAAO,MAAA,GAAS,iBAAA;AAChB,MAAA,MAAA,CAAO,SAAA,CAAW,OAAsB,MAAM,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AAExB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EACrC;AACI,MAAA,eAAA,CAAgB,SAAS,CAAC,CAAA,EAAG,MAAA,EAAQ,iBAAA,EAAmB,eAAe,KAAK,CAAA;AAAA,IAChF;AAAA,EACJ;AAEA,EAAA,IAAI,cAAA,EACJ;AACI,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAC3C;AACI,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,CAAE,cAAA,GAAiB,QAAQ,aAAa,CAAA;AAAA,IAC5D;AAGA,IAAA,YAAA,CAAa,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AAE9C,IAAA,UAAA,CAAW,OAAO,MAAM,CAAA;AAAA,EAC5B;AAEA,EAAA,UAAA,CAAW,OAAO,iBAAiB,CAAA;AACvC;;;;"}