{"version":3,"file":"measureMixin.mjs","sources":["../../../../src/scene/container/container-mixins/measureMixin.ts"],"sourcesContent":["import { Matrix } from '../../../maths/matrix/Matrix';\nimport { Bounds } from '../bounds/Bounds';\nimport { getGlobalBounds } from '../bounds/getGlobalBounds';\nimport { getLocalBounds } from '../bounds/getLocalBounds';\nimport { checkChildrenDidChange } from '../utils/checkChildrenDidChange';\n\nimport type { Size } from '../../../maths/misc/Size';\nimport type { Container } from '../Container';\n\nexport type Optional = Omit & Partial>;\n\nexport interface MeasureMixinConstructor\n{\n width?: number;\n height?: number;\n}\nexport interface MeasureMixin extends Required\n{\n getSize(out?: Size): Size;\n setSize(width: number, height?: number): void;\n setSize(value: Optional): void;\n getLocalBounds(bounds?: Bounds): Bounds;\n getBounds(skipUpdate?: boolean, bounds?: Bounds): Bounds;\n _localBoundsCacheData: LocalBoundsCacheData;\n _localBoundsCacheId: number;\n _setWidth(width: number, localWidth: number): void;\n _setHeight(height: number, localHeight: number): void;\n}\n\ninterface LocalBoundsCacheData\n{\n data: number[];\n index: number;\n didChange: boolean;\n localBounds: Bounds;\n}\n\nconst tempMatrix = new Matrix();\n\nexport const measureMixin: Partial = {\n\n _localBoundsCacheId: -1,\n _localBoundsCacheData: null,\n\n _setWidth(value: number, localWidth: number)\n {\n const sign = Math.sign(this.scale.x) || 1;\n\n if (localWidth !== 0)\n {\n this.scale.x = (value / localWidth) * sign;\n }\n else\n {\n this.scale.x = sign;\n }\n },\n\n _setHeight(value: number, localHeight: number)\n {\n const sign = Math.sign(this.scale.y) || 1;\n\n if (localHeight !== 0)\n {\n this.scale.y = (value / localHeight) * sign;\n }\n else\n {\n this.scale.y = sign;\n }\n },\n\n /**\n * Retrieves the local bounds of the container as a Bounds object.\n * @returns - The bounding area.\n * @memberof scene.Container#\n */\n getLocalBounds(): Bounds\n {\n if (!this._localBoundsCacheData)\n {\n this._localBoundsCacheData = {\n data: [],\n index: 1,\n didChange: false,\n localBounds: new Bounds()\n };\n }\n\n const localBoundsCacheData = this._localBoundsCacheData;\n\n localBoundsCacheData.index = 1;\n localBoundsCacheData.didChange = false;\n\n if (localBoundsCacheData.data[0] !== this._didViewChangeTick)\n {\n localBoundsCacheData.didChange = true;\n localBoundsCacheData.data[0] = this._didViewChangeTick;\n }\n\n checkChildrenDidChange(this, localBoundsCacheData);\n\n if (localBoundsCacheData.didChange)\n {\n getLocalBounds(this, localBoundsCacheData.localBounds, tempMatrix);\n }\n\n return localBoundsCacheData.localBounds;\n },\n\n /**\n * Calculates and returns the (world) bounds of the display object as a [Rectangle]{@link Rectangle}.\n * @param skipUpdate - Setting to `true` will stop the transforms of the scene graph from\n * being updated. This means the calculation returned MAY be out of date BUT will give you a\n * nice performance boost.\n * @param bounds - Optional bounds to store the result of the bounds calculation.\n * @returns - The minimum axis-aligned rectangle in world space that fits around this object.\n * @memberof scene.Container#\n */\n getBounds(skipUpdate?: boolean, bounds?: Bounds): Bounds\n {\n return getGlobalBounds(this, skipUpdate, bounds || new Bounds());\n },\n} as Container;\n"],"names":[],"mappings":";;;;;;;AAqCA,MAAM,UAAA,GAAa,IAAI,MAAO,EAAA,CAAA;AAEvB,MAAM,YAAmC,GAAA;AAAA,EAE5C,mBAAqB,EAAA,CAAA,CAAA;AAAA,EACrB,qBAAuB,EAAA,IAAA;AAAA,EAEvB,SAAA,CAAU,OAAe,UACzB,EAAA;AACI,IAAA,MAAM,OAAO,IAAK,CAAA,IAAA,CAAK,IAAK,CAAA,KAAA,CAAM,CAAC,CAAK,IAAA,CAAA,CAAA;AAExC,IAAA,IAAI,eAAe,CACnB,EAAA;AACI,MAAK,IAAA,CAAA,KAAA,CAAM,CAAK,GAAA,KAAA,GAAQ,UAAc,GAAA,IAAA,CAAA;AAAA,KAG1C,MAAA;AACI,MAAA,IAAA,CAAK,MAAM,CAAI,GAAA,IAAA,CAAA;AAAA,KACnB;AAAA,GACJ;AAAA,EAEA,UAAA,CAAW,OAAe,WAC1B,EAAA;AACI,IAAA,MAAM,OAAO,IAAK,CAAA,IAAA,CAAK,IAAK,CAAA,KAAA,CAAM,CAAC,CAAK,IAAA,CAAA,CAAA;AAExC,IAAA,IAAI,gBAAgB,CACpB,EAAA;AACI,MAAK,IAAA,CAAA,KAAA,CAAM,CAAK,GAAA,KAAA,GAAQ,WAAe,GAAA,IAAA,CAAA;AAAA,KAG3C,MAAA;AACI,MAAA,IAAA,CAAK,MAAM,CAAI,GAAA,IAAA,CAAA;AAAA,KACnB;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cACA,GAAA;AACI,IAAI,IAAA,CAAC,KAAK,qBACV,EAAA;AACI,MAAA,IAAA,CAAK,qBAAwB,GAAA;AAAA,QACzB,MAAM,EAAC;AAAA,QACP,KAAO,EAAA,CAAA;AAAA,QACP,SAAW,EAAA,KAAA;AAAA,QACX,WAAA,EAAa,IAAI,MAAO,EAAA;AAAA,OAC5B,CAAA;AAAA,KACJ;AAEA,IAAA,MAAM,uBAAuB,IAAK,CAAA,qBAAA,CAAA;AAElC,IAAA,oBAAA,CAAqB,KAAQ,GAAA,CAAA,CAAA;AAC7B,IAAA,oBAAA,CAAqB,SAAY,GAAA,KAAA,CAAA;AAEjC,IAAA,IAAI,oBAAqB,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,KAAK,kBAC1C,EAAA;AACI,MAAA,oBAAA,CAAqB,SAAY,GAAA,IAAA,CAAA;AACjC,MAAqB,oBAAA,CAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAK,CAAA,kBAAA,CAAA;AAAA,KACxC;AAEA,IAAA,sBAAA,CAAuB,MAAM,oBAAoB,CAAA,CAAA;AAEjD,IAAA,IAAI,qBAAqB,SACzB,EAAA;AACI,MAAe,cAAA,CAAA,IAAA,EAAM,oBAAqB,CAAA,WAAA,EAAa,UAAU,CAAA,CAAA;AAAA,KACrE;AAEA,IAAA,OAAO,oBAAqB,CAAA,WAAA,CAAA;AAAA,GAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAAA,CAAU,YAAsB,MAChC,EAAA;AACI,IAAA,OAAO,gBAAgB,IAAM,EAAA,UAAA,EAAY,MAAU,IAAA,IAAI,QAAQ,CAAA,CAAA;AAAA,GACnE;AACJ;;;;"}