@babylonjs/gui 8.52.1 → 8.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/2D/FrameGraph/guiTask.js +1 -1
- package/2D/FrameGraph/guiTask.js.map +1 -1
- package/2D/FrameGraph/renderGraphGUIBlock.js +1 -0
- package/2D/FrameGraph/renderGraphGUIBlock.js.map +1 -1
- package/2D/advancedDynamicTexture.js +2 -2
- package/2D/advancedDynamicTexture.js.map +1 -1
- package/2D/controls/container.js +4 -2
- package/2D/controls/container.js.map +1 -1
- package/2D/controls/image.js +3 -2
- package/2D/controls/image.js.map +1 -1
- package/2D/controls/inputTextArea.js +2 -1
- package/2D/controls/inputTextArea.js.map +1 -1
- package/2D/controls/sliders/baseSlider.js +3 -5
- package/2D/controls/sliders/baseSlider.js.map +1 -1
- package/2D/controls/sliders/imageScrollBar.js +4 -6
- package/2D/controls/sliders/imageScrollBar.js.map +1 -1
- package/2D/controls/sliders/scrollBar.js +3 -5
- package/2D/controls/sliders/scrollBar.js.map +1 -1
- package/3D/controls/control3D.js +1 -1
- package/3D/controls/control3D.js.map +1 -1
- package/3D/controls/touchHolographicButton.js +3 -3
- package/3D/controls/touchHolographicButton.js.map +1 -1
- package/package.json +2 -2
package/2D/controls/container.js
CHANGED
|
@@ -38,6 +38,7 @@ export class Container extends Control {
|
|
|
38
38
|
if (value) {
|
|
39
39
|
this.height = "100%";
|
|
40
40
|
}
|
|
41
|
+
this._rebuildLayout = true;
|
|
41
42
|
this._markAsDirty();
|
|
42
43
|
}
|
|
43
44
|
/** Gets or sets a boolean indicating if the container should try to adapt to its children width */
|
|
@@ -52,6 +53,7 @@ export class Container extends Control {
|
|
|
52
53
|
if (value) {
|
|
53
54
|
this.width = "100%";
|
|
54
55
|
}
|
|
56
|
+
this._rebuildLayout = true;
|
|
55
57
|
this._markAsDirty();
|
|
56
58
|
}
|
|
57
59
|
/** Gets or sets background color */
|
|
@@ -165,7 +167,7 @@ export class Container extends Control {
|
|
|
165
167
|
*/
|
|
166
168
|
getChildByType(name, type) {
|
|
167
169
|
for (const child of this.children) {
|
|
168
|
-
if (child.typeName === type) {
|
|
170
|
+
if (child.name === name && child.typeName === type) {
|
|
169
171
|
return child;
|
|
170
172
|
}
|
|
171
173
|
}
|
|
@@ -390,7 +392,7 @@ export class Container extends Control {
|
|
|
390
392
|
}
|
|
391
393
|
rebuildCount++;
|
|
392
394
|
} while (this._rebuildLayout && rebuildCount < this.maxLayoutCycle);
|
|
393
|
-
if (rebuildCount >=
|
|
395
|
+
if (this._rebuildLayout && rebuildCount >= this.maxLayoutCycle && this.logLayoutCycleErrors) {
|
|
394
396
|
Logger.Error(`Layout cycle detected in GUI (Container name=${this.name}, uniqueId=${this.uniqueId})`);
|
|
395
397
|
}
|
|
396
398
|
context.restore();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/container.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\nimport { Control } from \"./control\";\r\nimport { Measure } from \"../measure\";\r\nimport type { AdvancedDynamicTexture } from \"../advancedDynamicTexture\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport type { PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\nimport { DynamicTexture } from \"core/Materials/Textures/dynamicTexture\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { BaseGradient } from \"./gradient/BaseGradient\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { Matrix2D } from \"../math2D\";\r\n\r\n/**\r\n * Root class for 2D containers\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#containers\r\n */\r\nexport class Container extends Control {\r\n /** @internal */\r\n public _children = new Array<Control>();\r\n /** @internal */\r\n protected _measureForChildren = Measure.Empty();\r\n /** @internal */\r\n protected _background = \"\";\r\n /** @internal */\r\n protected _backgroundGradient: Nullable<BaseGradient> = null;\r\n /** @internal */\r\n protected _adaptWidthToChildren = false;\r\n /** @internal */\r\n protected _adaptHeightToChildren = false;\r\n /** @internal */\r\n protected _renderToIntermediateTexture: boolean = false;\r\n /** @internal */\r\n protected _intermediateTexture: Nullable<DynamicTexture> = null;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the container will let internal controls handle picking instead of doing it directly using its bounding info\r\n */\r\n @serialize()\r\n public delegatePickingToChildren = false;\r\n\r\n /** Gets or sets boolean indicating if children should be rendered to an intermediate texture rather than directly to host, useful for alpha blending */\r\n @serialize()\r\n public get renderToIntermediateTexture(): boolean {\r\n return this._renderToIntermediateTexture;\r\n }\r\n public set renderToIntermediateTexture(value: boolean) {\r\n if (this._renderToIntermediateTexture === value) {\r\n return;\r\n }\r\n this._renderToIntermediateTexture = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that layout cycle errors should be displayed on the console\r\n */\r\n public logLayoutCycleErrors = false;\r\n\r\n /**\r\n * Gets or sets the number of layout cycles (a change involved by a control while evaluating the layout) allowed\r\n */\r\n @serialize()\r\n public maxLayoutCycle = 3;\r\n\r\n /** Gets or sets a boolean indicating if the container should try to adapt to its children height */\r\n @serialize()\r\n public get adaptHeightToChildren(): boolean {\r\n return this._adaptHeightToChildren;\r\n }\r\n\r\n public set adaptHeightToChildren(value: boolean) {\r\n if (this._adaptHeightToChildren === value) {\r\n return;\r\n }\r\n\r\n this._adaptHeightToChildren = value;\r\n\r\n if (value) {\r\n this.height = \"100%\";\r\n }\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the container should try to adapt to its children width */\r\n @serialize()\r\n public get adaptWidthToChildren(): boolean {\r\n return this._adaptWidthToChildren;\r\n }\r\n\r\n public set adaptWidthToChildren(value: boolean) {\r\n if (this._adaptWidthToChildren === value) {\r\n return;\r\n }\r\n\r\n this._adaptWidthToChildren = value;\r\n\r\n if (value) {\r\n this.width = \"100%\";\r\n }\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets background color */\r\n @serialize()\r\n public get background(): string {\r\n return this._background;\r\n }\r\n\r\n public set background(value: string) {\r\n if (this._background === value) {\r\n return;\r\n }\r\n\r\n this._background = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets background gradient color. Takes precedence over background */\r\n @serialize()\r\n public get backgroundGradient() {\r\n return this._backgroundGradient;\r\n }\r\n\r\n public set backgroundGradient(value: Nullable<BaseGradient>) {\r\n if (this._backgroundGradient === value) {\r\n return;\r\n }\r\n this._backgroundGradient = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets the list of children */\r\n public get children(): Control[] {\r\n return this._children;\r\n }\r\n\r\n public override get isReadOnly() {\r\n return this._isReadOnly;\r\n }\r\n\r\n public override set isReadOnly(value: boolean) {\r\n this._isReadOnly = value;\r\n\r\n for (const child of this._children) {\r\n child.isReadOnly = value;\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new Container\r\n * @param name defines the name of the container\r\n */\r\n constructor(public override name?: string) {\r\n super(name);\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"Container\";\r\n }\r\n\r\n public override _flagDescendantsAsMatrixDirty(): void {\r\n for (const child of this.children) {\r\n child._isClipped = false;\r\n child._markMatrixAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a child using its name\r\n * @param name defines the child name to look for\r\n * @returns the child control if found\r\n */\r\n public getChildByName(name: string): Nullable<Control> {\r\n for (const child of this.children) {\r\n if (child.name === name) {\r\n return child;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets a child using its type and its name\r\n * @param name defines the child name to look for\r\n * @param type defines the child type to look for\r\n * @returns the child control if found\r\n */\r\n public getChildByType(name: string, type: string): Nullable<Control> {\r\n for (const child of this.children) {\r\n if (child.typeName === type) {\r\n return child;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Search for a specific control in children\r\n * @param control defines the control to look for\r\n * @returns true if the control is in child list\r\n */\r\n public containsControl(control: Control): boolean {\r\n return this.children.indexOf(control) !== -1;\r\n }\r\n\r\n /**\r\n * Adds a new control to the current container\r\n * @param control defines the control to add\r\n * @returns the current container\r\n */\r\n public addControl(control: Nullable<Control>): Container {\r\n if (!control) {\r\n return this;\r\n }\r\n\r\n const index = this._children.indexOf(control);\r\n\r\n if (index !== -1) {\r\n return this;\r\n }\r\n control._link(this._host);\r\n\r\n control._markAllAsDirty();\r\n\r\n this._reOrderControl(control);\r\n\r\n this._markAsDirty();\r\n\r\n this.onControlAddedObservable.notifyObservers(control);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Removes all controls from the current container\r\n * @returns the current container\r\n */\r\n public clearControls(): Container {\r\n const children = this.children.slice();\r\n\r\n for (const child of children) {\r\n this.removeControl(child);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Removes a control from the current container\r\n * @param control defines the control to remove\r\n * @returns the current container\r\n */\r\n public removeControl(control: Control): Container {\r\n const index = this._children.indexOf(control);\r\n\r\n if (index !== -1) {\r\n this._children.splice(index, 1);\r\n\r\n control.parent = null;\r\n }\r\n\r\n control.linkWithMesh(null);\r\n\r\n if (this._host) {\r\n this._host._cleanControlAfterRemoval(control);\r\n }\r\n\r\n this._markAsDirty();\r\n\r\n this.onControlRemovedObservable.notifyObservers(control);\r\n return this;\r\n }\r\n\r\n /**\r\n * An event triggered when any control is added to this container.\r\n */\r\n public onControlAddedObservable = new Observable<Nullable<Control>>();\r\n\r\n /**\r\n * An event triggered when any control is removed from this container.\r\n */\r\n public onControlRemovedObservable = new Observable<Nullable<Control>>();\r\n\r\n /**\r\n * @internal\r\n */\r\n public _reOrderControl(control: Control): void {\r\n const linkedMesh = control.linkedMesh;\r\n\r\n this.removeControl(control);\r\n\r\n let wasAdded = false;\r\n for (let index = 0; index < this._children.length; index++) {\r\n if (this._children[index].zIndex > control.zIndex) {\r\n this._children.splice(index, 0, control);\r\n wasAdded = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!wasAdded) {\r\n this._children.push(control);\r\n }\r\n\r\n control.parent = this;\r\n\r\n if (linkedMesh) {\r\n control.linkWithMesh(linkedMesh);\r\n }\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _offsetLeft(offset: number) {\r\n super._offsetLeft(offset);\r\n\r\n for (const child of this._children) {\r\n child._offsetLeft(offset);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _offsetTop(offset: number) {\r\n super._offsetTop(offset);\r\n\r\n for (const child of this._children) {\r\n child._offsetTop(offset);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override _markAllAsDirty(): void {\r\n super._markAllAsDirty();\r\n\r\n for (let index = 0; index < this._children.length; index++) {\r\n this._children[index]._markAllAsDirty();\r\n }\r\n }\r\n\r\n protected _getBackgroundColor(context: ICanvasRenderingContext) {\r\n return this._backgroundGradient ? this._backgroundGradient.getCanvasGradient(context) : this._background;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _localDraw(context: ICanvasRenderingContext): void {\r\n if (this._background || this._backgroundGradient) {\r\n context.save();\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;\r\n context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;\r\n }\r\n\r\n context.fillStyle = this._getBackgroundColor(context);\r\n\r\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n context.restore();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _link(host: AdvancedDynamicTexture): void {\r\n super._link(host);\r\n\r\n for (const child of this._children) {\r\n child._link(host);\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected _beforeLayout() {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected override _processMeasures(parentMeasure: Measure, context: ICanvasRenderingContext): void {\r\n if (this._isDirty || !this._cachedParentMeasure.isEqualsTo(parentMeasure)) {\r\n super._processMeasures(parentMeasure, context);\r\n this._evaluateClippingState(parentMeasure);\r\n if (this._renderToIntermediateTexture) {\r\n if (this._intermediateTexture && this._host.getScene() != this._intermediateTexture.getScene()) {\r\n this._intermediateTexture.dispose();\r\n this._intermediateTexture = null;\r\n }\r\n if (!this._intermediateTexture) {\r\n this._intermediateTexture = new DynamicTexture(\r\n \"\",\r\n { width: this._currentMeasure.width, height: this._currentMeasure.height },\r\n this._host.getScene(),\r\n false,\r\n Texture.NEAREST_SAMPLINGMODE,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n false\r\n );\r\n this._intermediateTexture.hasAlpha = true;\r\n } else {\r\n this._intermediateTexture.scaleTo(this._currentMeasure.width, this._currentMeasure.height);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _layout(parentMeasure: Measure, context: ICanvasRenderingContext): boolean {\r\n if (!this.isDirty && (!this.isVisible || this.notRenderable)) {\r\n return false;\r\n }\r\n\r\n this.host._numLayoutCalls++;\r\n\r\n if (this._isDirty) {\r\n this._currentMeasure.transformToRef(this._transformMatrix, this._prevCurrentMeasureTransformedIntoGlobalSpace);\r\n }\r\n\r\n let rebuildCount = 0;\r\n\r\n context.save();\r\n\r\n this._applyStates(context);\r\n\r\n this._beforeLayout();\r\n\r\n do {\r\n let computedWidth = -1;\r\n let computedHeight = -1;\r\n this._rebuildLayout = false;\r\n this._processMeasures(parentMeasure, context);\r\n\r\n if (!this._isClipped) {\r\n for (const child of this._children) {\r\n child._tempParentMeasure.copyFrom(this._measureForChildren);\r\n\r\n if (child._layout(this._measureForChildren, context)) {\r\n if (child.isVisible && !child.notRenderable) {\r\n if (this.adaptWidthToChildren && child._width.isPixel) {\r\n computedWidth = Math.max(computedWidth, child._currentMeasure.width + child._paddingLeftInPixels + child._paddingRightInPixels);\r\n }\r\n if (this.adaptHeightToChildren && child._height.isPixel) {\r\n computedHeight = Math.max(computedHeight, child._currentMeasure.height + child._paddingTopInPixels + child._paddingBottomInPixels);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.adaptWidthToChildren && computedWidth >= 0) {\r\n computedWidth += this.paddingLeftInPixels + this.paddingRightInPixels;\r\n const width = computedWidth + \"px\";\r\n if (this.width !== width) {\r\n this.parent?._markAsDirty();\r\n this.width = width;\r\n this._width.ignoreAdaptiveScaling = true;\r\n this._rebuildLayout = true;\r\n }\r\n }\r\n if (this.adaptHeightToChildren && computedHeight >= 0) {\r\n computedHeight += this.paddingTopInPixels + this.paddingBottomInPixels;\r\n const height = computedHeight + \"px\";\r\n if (this.height !== height) {\r\n this.parent?._markAsDirty();\r\n this.height = height;\r\n this._height.ignoreAdaptiveScaling = true;\r\n this._rebuildLayout = true;\r\n }\r\n }\r\n\r\n this._postMeasure();\r\n }\r\n rebuildCount++;\r\n } while (this._rebuildLayout && rebuildCount < this.maxLayoutCycle);\r\n\r\n if (rebuildCount >= 3 && this.logLayoutCycleErrors) {\r\n Logger.Error(`Layout cycle detected in GUI (Container name=${this.name}, uniqueId=${this.uniqueId})`);\r\n }\r\n\r\n context.restore();\r\n\r\n if (this._isDirty) {\r\n this.invalidateRect();\r\n\r\n this._isDirty = false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected override _postMeasure() {\r\n // Do nothing by default\r\n }\r\n\r\n private _inverseTransformMatrix = Matrix2D.Identity();\r\n private _inverseMeasure = new Measure(0, 0, 0, 0);\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _draw(context: ICanvasRenderingContext, invalidatedRectangle?: Measure): void {\r\n const renderToIntermediateTextureThisDraw = this._renderToIntermediateTexture && this._intermediateTexture;\r\n const contextToDrawTo = renderToIntermediateTextureThisDraw ? (<DynamicTexture>this._intermediateTexture).getContext() : context;\r\n\r\n if (renderToIntermediateTextureThisDraw) {\r\n contextToDrawTo.save();\r\n contextToDrawTo.translate(-this._currentMeasure.left, -this._currentMeasure.top);\r\n if (invalidatedRectangle) {\r\n this._transformMatrix.invertToRef(this._inverseTransformMatrix);\r\n invalidatedRectangle.transformToRef(this._inverseTransformMatrix, this._inverseMeasure);\r\n contextToDrawTo.clearRect(this._inverseMeasure.left, this._inverseMeasure.top, this._inverseMeasure.width, this._inverseMeasure.height);\r\n } else {\r\n contextToDrawTo.clearRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n }\r\n }\r\n\r\n this._localDraw(contextToDrawTo);\r\n\r\n context.save();\r\n\r\n if (this.clipChildren) {\r\n this._clipForChildren(contextToDrawTo);\r\n }\r\n\r\n for (const child of this._children) {\r\n // Only redraw parts of the screen that are invalidated\r\n if (invalidatedRectangle) {\r\n if (!child._intersectsRect(invalidatedRectangle)) {\r\n continue;\r\n }\r\n }\r\n child._render(contextToDrawTo, invalidatedRectangle);\r\n }\r\n\r\n if (renderToIntermediateTextureThisDraw) {\r\n contextToDrawTo.restore();\r\n context.save();\r\n context.globalAlpha = this.alpha;\r\n context.drawImage(contextToDrawTo.canvas, this._currentMeasure.left, this._currentMeasure.top);\r\n context.restore();\r\n }\r\n\r\n context.restore();\r\n }\r\n\r\n public override getDescendantsToRef(results: Control[], directDescendantsOnly: boolean = false, predicate?: (control: Control) => boolean): void {\r\n if (!this.children) {\r\n return;\r\n }\r\n\r\n for (let index = 0; index < this.children.length; index++) {\r\n const item = this.children[index];\r\n\r\n if (!predicate || predicate(item)) {\r\n results.push(item);\r\n }\r\n\r\n if (!directDescendantsOnly) {\r\n item.getDescendantsToRef(results, false, predicate);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _processPicking(\r\n x: number,\r\n y: number,\r\n pi: Nullable<PointerInfoBase>,\r\n type: number,\r\n pointerId: number,\r\n buttonIndex: number,\r\n deltaX?: number,\r\n deltaY?: number\r\n ): boolean {\r\n if (!this._isEnabled || !this.isVisible || this.notRenderable) {\r\n return false;\r\n }\r\n\r\n // checks if the picking position is within the container\r\n const contains = super.contains(x, y);\r\n\r\n // if clipChildren is off, we should still pass picking events to children even if we don't contain the pointer\r\n if (!contains && this.clipChildren) {\r\n return false;\r\n }\r\n\r\n if (this.delegatePickingToChildren) {\r\n let contains = false;\r\n for (let index = this._children.length - 1; index >= 0; index--) {\r\n const child = this._children[index];\r\n if (child.isEnabled && child.isHitTestVisible && child.isVisible && !child.notRenderable && child.contains(x, y)) {\r\n contains = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!contains) {\r\n return false;\r\n }\r\n }\r\n\r\n // Checking backwards to pick closest first\r\n for (let index = this._children.length - 1; index >= 0; index--) {\r\n const child = this._children[index];\r\n if (child._processPicking(x, y, pi, type, pointerId, buttonIndex, deltaX, deltaY)) {\r\n if (child.hoverCursor) {\r\n this._host._changeCursor(child.hoverCursor);\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n if (!contains) {\r\n return false;\r\n }\r\n\r\n if (!this.isHitTestVisible) {\r\n return false;\r\n }\r\n\r\n return this._processObservables(type, x, y, pi, pointerId, buttonIndex, deltaX, deltaY);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected override _additionalProcessing(parentMeasure: Measure, context: ICanvasRenderingContext): void {\r\n super._additionalProcessing(parentMeasure, context);\r\n\r\n this._measureForChildren.copyFrom(this._currentMeasure);\r\n }\r\n\r\n protected _getAdaptDimTo(dim: \"width\" | \"height\"): boolean {\r\n if (dim === \"width\") {\r\n return this.adaptWidthToChildren;\r\n } else {\r\n return this.adaptHeightToChildren;\r\n }\r\n }\r\n\r\n public override isDimensionFullyDefined(dim: \"width\" | \"height\"): boolean {\r\n if (this._getAdaptDimTo(dim)) {\r\n for (const child of this.children) {\r\n if (!child.isDimensionFullyDefined(dim)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return super.isDimensionFullyDefined(dim);\r\n }\r\n\r\n /**\r\n * Serializes the current control\r\n * @param serializationObject defined the JSON serialized object\r\n * @param force force serialization even if isSerializable === false\r\n * @param allowCanvas defines if the control is allowed to use a Canvas2D object to serialize (true by default)\r\n */\r\n public override serialize(serializationObject: any, force: boolean = false, allowCanvas: boolean = true) {\r\n super.serialize(serializationObject, force, allowCanvas);\r\n if (!this.isSerializable && !force) {\r\n return;\r\n }\r\n\r\n if (this.backgroundGradient) {\r\n serializationObject.backgroundGradient = {};\r\n this.backgroundGradient.serialize(serializationObject.backgroundGradient);\r\n }\r\n\r\n if (!this.children.length) {\r\n return;\r\n }\r\n\r\n serializationObject.children = [];\r\n\r\n for (const child of this.children) {\r\n if (child.isSerializable || force) {\r\n const childSerializationObject = {};\r\n child.serialize(childSerializationObject, force, allowCanvas);\r\n serializationObject.children.push(childSerializationObject);\r\n }\r\n }\r\n }\r\n\r\n /** Releases associated resources */\r\n public override dispose() {\r\n super.dispose();\r\n\r\n for (let index = this.children.length - 1; index >= 0; index--) {\r\n this.children[index].dispose();\r\n }\r\n this._intermediateTexture?.dispose();\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _parseFromContent(serializedObject: any, host: AdvancedDynamicTexture, urlRewriter?: (url: string) => string) {\r\n super._parseFromContent(serializedObject, host, urlRewriter);\r\n this._link(host);\r\n\r\n // Gradient\r\n if (serializedObject.backgroundGradient) {\r\n const className = Tools.Instantiate(\"BABYLON.GUI.\" + serializedObject.backgroundGradient.className);\r\n this._backgroundGradient = new className();\r\n this._backgroundGradient?.parse(serializedObject.backgroundGradient);\r\n }\r\n\r\n if (!serializedObject.children) {\r\n return;\r\n }\r\n\r\n for (const childData of serializedObject.children) {\r\n this.addControl(Control.Parse(childData, host, urlRewriter));\r\n }\r\n }\r\n\r\n public override isReady(): boolean {\r\n for (const child of this.children) {\r\n if (!child.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.Container\", Container);\r\n"]}
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/container.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\nimport { Control } from \"./control\";\r\nimport { Measure } from \"../measure\";\r\nimport type { AdvancedDynamicTexture } from \"../advancedDynamicTexture\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport type { PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\nimport { DynamicTexture } from \"core/Materials/Textures/dynamicTexture\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { BaseGradient } from \"./gradient/BaseGradient\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { Matrix2D } from \"../math2D\";\r\n\r\n/**\r\n * Root class for 2D containers\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#containers\r\n */\r\nexport class Container extends Control {\r\n /** @internal */\r\n public _children = new Array<Control>();\r\n /** @internal */\r\n protected _measureForChildren = Measure.Empty();\r\n /** @internal */\r\n protected _background = \"\";\r\n /** @internal */\r\n protected _backgroundGradient: Nullable<BaseGradient> = null;\r\n /** @internal */\r\n protected _adaptWidthToChildren = false;\r\n /** @internal */\r\n protected _adaptHeightToChildren = false;\r\n /** @internal */\r\n protected _renderToIntermediateTexture: boolean = false;\r\n /** @internal */\r\n protected _intermediateTexture: Nullable<DynamicTexture> = null;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the container will let internal controls handle picking instead of doing it directly using its bounding info\r\n */\r\n @serialize()\r\n public delegatePickingToChildren = false;\r\n\r\n /** Gets or sets boolean indicating if children should be rendered to an intermediate texture rather than directly to host, useful for alpha blending */\r\n @serialize()\r\n public get renderToIntermediateTexture(): boolean {\r\n return this._renderToIntermediateTexture;\r\n }\r\n public set renderToIntermediateTexture(value: boolean) {\r\n if (this._renderToIntermediateTexture === value) {\r\n return;\r\n }\r\n this._renderToIntermediateTexture = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that layout cycle errors should be displayed on the console\r\n */\r\n public logLayoutCycleErrors = false;\r\n\r\n /**\r\n * Gets or sets the number of layout cycles (a change involved by a control while evaluating the layout) allowed\r\n */\r\n @serialize()\r\n public maxLayoutCycle = 3;\r\n\r\n /** Gets or sets a boolean indicating if the container should try to adapt to its children height */\r\n @serialize()\r\n public get adaptHeightToChildren(): boolean {\r\n return this._adaptHeightToChildren;\r\n }\r\n\r\n public set adaptHeightToChildren(value: boolean) {\r\n if (this._adaptHeightToChildren === value) {\r\n return;\r\n }\r\n\r\n this._adaptHeightToChildren = value;\r\n\r\n if (value) {\r\n this.height = \"100%\";\r\n }\r\n\r\n this._rebuildLayout = true;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the container should try to adapt to its children width */\r\n @serialize()\r\n public get adaptWidthToChildren(): boolean {\r\n return this._adaptWidthToChildren;\r\n }\r\n\r\n public set adaptWidthToChildren(value: boolean) {\r\n if (this._adaptWidthToChildren === value) {\r\n return;\r\n }\r\n\r\n this._adaptWidthToChildren = value;\r\n\r\n if (value) {\r\n this.width = \"100%\";\r\n }\r\n\r\n this._rebuildLayout = true;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets background color */\r\n @serialize()\r\n public get background(): string {\r\n return this._background;\r\n }\r\n\r\n public set background(value: string) {\r\n if (this._background === value) {\r\n return;\r\n }\r\n\r\n this._background = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets background gradient color. Takes precedence over background */\r\n @serialize()\r\n public get backgroundGradient() {\r\n return this._backgroundGradient;\r\n }\r\n\r\n public set backgroundGradient(value: Nullable<BaseGradient>) {\r\n if (this._backgroundGradient === value) {\r\n return;\r\n }\r\n this._backgroundGradient = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets the list of children */\r\n public get children(): Control[] {\r\n return this._children;\r\n }\r\n\r\n public override get isReadOnly() {\r\n return this._isReadOnly;\r\n }\r\n\r\n public override set isReadOnly(value: boolean) {\r\n this._isReadOnly = value;\r\n\r\n for (const child of this._children) {\r\n child.isReadOnly = value;\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new Container\r\n * @param name defines the name of the container\r\n */\r\n constructor(public override name?: string) {\r\n super(name);\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"Container\";\r\n }\r\n\r\n public override _flagDescendantsAsMatrixDirty(): void {\r\n for (const child of this.children) {\r\n child._isClipped = false;\r\n child._markMatrixAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a child using its name\r\n * @param name defines the child name to look for\r\n * @returns the child control if found\r\n */\r\n public getChildByName(name: string): Nullable<Control> {\r\n for (const child of this.children) {\r\n if (child.name === name) {\r\n return child;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets a child using its type and its name\r\n * @param name defines the child name to look for\r\n * @param type defines the child type to look for\r\n * @returns the child control if found\r\n */\r\n public getChildByType(name: string, type: string): Nullable<Control> {\r\n for (const child of this.children) {\r\n if (child.name === name && child.typeName === type) {\r\n return child;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Search for a specific control in children\r\n * @param control defines the control to look for\r\n * @returns true if the control is in child list\r\n */\r\n public containsControl(control: Control): boolean {\r\n return this.children.indexOf(control) !== -1;\r\n }\r\n\r\n /**\r\n * Adds a new control to the current container\r\n * @param control defines the control to add\r\n * @returns the current container\r\n */\r\n public addControl(control: Nullable<Control>): Container {\r\n if (!control) {\r\n return this;\r\n }\r\n\r\n const index = this._children.indexOf(control);\r\n\r\n if (index !== -1) {\r\n return this;\r\n }\r\n control._link(this._host);\r\n\r\n control._markAllAsDirty();\r\n\r\n this._reOrderControl(control);\r\n\r\n this._markAsDirty();\r\n\r\n this.onControlAddedObservable.notifyObservers(control);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Removes all controls from the current container\r\n * @returns the current container\r\n */\r\n public clearControls(): Container {\r\n const children = this.children.slice();\r\n\r\n for (const child of children) {\r\n this.removeControl(child);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Removes a control from the current container\r\n * @param control defines the control to remove\r\n * @returns the current container\r\n */\r\n public removeControl(control: Control): Container {\r\n const index = this._children.indexOf(control);\r\n\r\n if (index !== -1) {\r\n this._children.splice(index, 1);\r\n\r\n control.parent = null;\r\n }\r\n\r\n control.linkWithMesh(null);\r\n\r\n if (this._host) {\r\n this._host._cleanControlAfterRemoval(control);\r\n }\r\n\r\n this._markAsDirty();\r\n\r\n this.onControlRemovedObservable.notifyObservers(control);\r\n return this;\r\n }\r\n\r\n /**\r\n * An event triggered when any control is added to this container.\r\n */\r\n public onControlAddedObservable = new Observable<Nullable<Control>>();\r\n\r\n /**\r\n * An event triggered when any control is removed from this container.\r\n */\r\n public onControlRemovedObservable = new Observable<Nullable<Control>>();\r\n\r\n /**\r\n * @internal\r\n */\r\n public _reOrderControl(control: Control): void {\r\n const linkedMesh = control.linkedMesh;\r\n\r\n this.removeControl(control);\r\n\r\n let wasAdded = false;\r\n for (let index = 0; index < this._children.length; index++) {\r\n if (this._children[index].zIndex > control.zIndex) {\r\n this._children.splice(index, 0, control);\r\n wasAdded = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!wasAdded) {\r\n this._children.push(control);\r\n }\r\n\r\n control.parent = this;\r\n\r\n if (linkedMesh) {\r\n control.linkWithMesh(linkedMesh);\r\n }\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _offsetLeft(offset: number) {\r\n super._offsetLeft(offset);\r\n\r\n for (const child of this._children) {\r\n child._offsetLeft(offset);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _offsetTop(offset: number) {\r\n super._offsetTop(offset);\r\n\r\n for (const child of this._children) {\r\n child._offsetTop(offset);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override _markAllAsDirty(): void {\r\n super._markAllAsDirty();\r\n\r\n for (let index = 0; index < this._children.length; index++) {\r\n this._children[index]._markAllAsDirty();\r\n }\r\n }\r\n\r\n protected _getBackgroundColor(context: ICanvasRenderingContext) {\r\n return this._backgroundGradient ? this._backgroundGradient.getCanvasGradient(context) : this._background;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _localDraw(context: ICanvasRenderingContext): void {\r\n if (this._background || this._backgroundGradient) {\r\n context.save();\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;\r\n context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;\r\n }\r\n\r\n context.fillStyle = this._getBackgroundColor(context);\r\n\r\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n context.restore();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _link(host: AdvancedDynamicTexture): void {\r\n super._link(host);\r\n\r\n for (const child of this._children) {\r\n child._link(host);\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected _beforeLayout() {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected override _processMeasures(parentMeasure: Measure, context: ICanvasRenderingContext): void {\r\n if (this._isDirty || !this._cachedParentMeasure.isEqualsTo(parentMeasure)) {\r\n super._processMeasures(parentMeasure, context);\r\n this._evaluateClippingState(parentMeasure);\r\n if (this._renderToIntermediateTexture) {\r\n if (this._intermediateTexture && this._host.getScene() != this._intermediateTexture.getScene()) {\r\n this._intermediateTexture.dispose();\r\n this._intermediateTexture = null;\r\n }\r\n if (!this._intermediateTexture) {\r\n this._intermediateTexture = new DynamicTexture(\r\n \"\",\r\n { width: this._currentMeasure.width, height: this._currentMeasure.height },\r\n this._host.getScene(),\r\n false,\r\n Texture.NEAREST_SAMPLINGMODE,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n false\r\n );\r\n this._intermediateTexture.hasAlpha = true;\r\n } else {\r\n this._intermediateTexture.scaleTo(this._currentMeasure.width, this._currentMeasure.height);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _layout(parentMeasure: Measure, context: ICanvasRenderingContext): boolean {\r\n if (!this.isDirty && (!this.isVisible || this.notRenderable)) {\r\n return false;\r\n }\r\n\r\n this.host._numLayoutCalls++;\r\n\r\n if (this._isDirty) {\r\n this._currentMeasure.transformToRef(this._transformMatrix, this._prevCurrentMeasureTransformedIntoGlobalSpace);\r\n }\r\n\r\n let rebuildCount = 0;\r\n\r\n context.save();\r\n\r\n this._applyStates(context);\r\n\r\n this._beforeLayout();\r\n\r\n do {\r\n let computedWidth = -1;\r\n let computedHeight = -1;\r\n this._rebuildLayout = false;\r\n this._processMeasures(parentMeasure, context);\r\n\r\n if (!this._isClipped) {\r\n for (const child of this._children) {\r\n child._tempParentMeasure.copyFrom(this._measureForChildren);\r\n\r\n if (child._layout(this._measureForChildren, context)) {\r\n if (child.isVisible && !child.notRenderable) {\r\n if (this.adaptWidthToChildren && child._width.isPixel) {\r\n computedWidth = Math.max(computedWidth, child._currentMeasure.width + child._paddingLeftInPixels + child._paddingRightInPixels);\r\n }\r\n if (this.adaptHeightToChildren && child._height.isPixel) {\r\n computedHeight = Math.max(computedHeight, child._currentMeasure.height + child._paddingTopInPixels + child._paddingBottomInPixels);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.adaptWidthToChildren && computedWidth >= 0) {\r\n computedWidth += this.paddingLeftInPixels + this.paddingRightInPixels;\r\n const width = computedWidth + \"px\";\r\n if (this.width !== width) {\r\n this.parent?._markAsDirty();\r\n this.width = width;\r\n this._width.ignoreAdaptiveScaling = true;\r\n this._rebuildLayout = true;\r\n }\r\n }\r\n if (this.adaptHeightToChildren && computedHeight >= 0) {\r\n computedHeight += this.paddingTopInPixels + this.paddingBottomInPixels;\r\n const height = computedHeight + \"px\";\r\n if (this.height !== height) {\r\n this.parent?._markAsDirty();\r\n this.height = height;\r\n this._height.ignoreAdaptiveScaling = true;\r\n this._rebuildLayout = true;\r\n }\r\n }\r\n\r\n this._postMeasure();\r\n }\r\n rebuildCount++;\r\n } while (this._rebuildLayout && rebuildCount < this.maxLayoutCycle);\r\n\r\n if (this._rebuildLayout && rebuildCount >= this.maxLayoutCycle && this.logLayoutCycleErrors) {\r\n Logger.Error(`Layout cycle detected in GUI (Container name=${this.name}, uniqueId=${this.uniqueId})`);\r\n }\r\n\r\n context.restore();\r\n\r\n if (this._isDirty) {\r\n this.invalidateRect();\r\n\r\n this._isDirty = false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected override _postMeasure() {\r\n // Do nothing by default\r\n }\r\n\r\n private _inverseTransformMatrix = Matrix2D.Identity();\r\n private _inverseMeasure = new Measure(0, 0, 0, 0);\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _draw(context: ICanvasRenderingContext, invalidatedRectangle?: Measure): void {\r\n const renderToIntermediateTextureThisDraw = this._renderToIntermediateTexture && this._intermediateTexture;\r\n const contextToDrawTo = renderToIntermediateTextureThisDraw ? (<DynamicTexture>this._intermediateTexture).getContext() : context;\r\n\r\n if (renderToIntermediateTextureThisDraw) {\r\n contextToDrawTo.save();\r\n contextToDrawTo.translate(-this._currentMeasure.left, -this._currentMeasure.top);\r\n if (invalidatedRectangle) {\r\n this._transformMatrix.invertToRef(this._inverseTransformMatrix);\r\n invalidatedRectangle.transformToRef(this._inverseTransformMatrix, this._inverseMeasure);\r\n contextToDrawTo.clearRect(this._inverseMeasure.left, this._inverseMeasure.top, this._inverseMeasure.width, this._inverseMeasure.height);\r\n } else {\r\n contextToDrawTo.clearRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n }\r\n }\r\n\r\n this._localDraw(contextToDrawTo);\r\n\r\n context.save();\r\n\r\n if (this.clipChildren) {\r\n this._clipForChildren(contextToDrawTo);\r\n }\r\n\r\n for (const child of this._children) {\r\n // Only redraw parts of the screen that are invalidated\r\n if (invalidatedRectangle) {\r\n if (!child._intersectsRect(invalidatedRectangle)) {\r\n continue;\r\n }\r\n }\r\n child._render(contextToDrawTo, invalidatedRectangle);\r\n }\r\n\r\n if (renderToIntermediateTextureThisDraw) {\r\n contextToDrawTo.restore();\r\n context.save();\r\n context.globalAlpha = this.alpha;\r\n context.drawImage(contextToDrawTo.canvas, this._currentMeasure.left, this._currentMeasure.top);\r\n context.restore();\r\n }\r\n\r\n context.restore();\r\n }\r\n\r\n public override getDescendantsToRef(results: Control[], directDescendantsOnly: boolean = false, predicate?: (control: Control) => boolean): void {\r\n if (!this.children) {\r\n return;\r\n }\r\n\r\n for (let index = 0; index < this.children.length; index++) {\r\n const item = this.children[index];\r\n\r\n if (!predicate || predicate(item)) {\r\n results.push(item);\r\n }\r\n\r\n if (!directDescendantsOnly) {\r\n item.getDescendantsToRef(results, false, predicate);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _processPicking(\r\n x: number,\r\n y: number,\r\n pi: Nullable<PointerInfoBase>,\r\n type: number,\r\n pointerId: number,\r\n buttonIndex: number,\r\n deltaX?: number,\r\n deltaY?: number\r\n ): boolean {\r\n if (!this._isEnabled || !this.isVisible || this.notRenderable) {\r\n return false;\r\n }\r\n\r\n // checks if the picking position is within the container\r\n const contains = super.contains(x, y);\r\n\r\n // if clipChildren is off, we should still pass picking events to children even if we don't contain the pointer\r\n if (!contains && this.clipChildren) {\r\n return false;\r\n }\r\n\r\n if (this.delegatePickingToChildren) {\r\n let contains = false;\r\n for (let index = this._children.length - 1; index >= 0; index--) {\r\n const child = this._children[index];\r\n if (child.isEnabled && child.isHitTestVisible && child.isVisible && !child.notRenderable && child.contains(x, y)) {\r\n contains = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!contains) {\r\n return false;\r\n }\r\n }\r\n\r\n // Checking backwards to pick closest first\r\n for (let index = this._children.length - 1; index >= 0; index--) {\r\n const child = this._children[index];\r\n if (child._processPicking(x, y, pi, type, pointerId, buttonIndex, deltaX, deltaY)) {\r\n if (child.hoverCursor) {\r\n this._host._changeCursor(child.hoverCursor);\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n if (!contains) {\r\n return false;\r\n }\r\n\r\n if (!this.isHitTestVisible) {\r\n return false;\r\n }\r\n\r\n return this._processObservables(type, x, y, pi, pointerId, buttonIndex, deltaX, deltaY);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected override _additionalProcessing(parentMeasure: Measure, context: ICanvasRenderingContext): void {\r\n super._additionalProcessing(parentMeasure, context);\r\n\r\n this._measureForChildren.copyFrom(this._currentMeasure);\r\n }\r\n\r\n protected _getAdaptDimTo(dim: \"width\" | \"height\"): boolean {\r\n if (dim === \"width\") {\r\n return this.adaptWidthToChildren;\r\n } else {\r\n return this.adaptHeightToChildren;\r\n }\r\n }\r\n\r\n public override isDimensionFullyDefined(dim: \"width\" | \"height\"): boolean {\r\n if (this._getAdaptDimTo(dim)) {\r\n for (const child of this.children) {\r\n if (!child.isDimensionFullyDefined(dim)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return super.isDimensionFullyDefined(dim);\r\n }\r\n\r\n /**\r\n * Serializes the current control\r\n * @param serializationObject defined the JSON serialized object\r\n * @param force force serialization even if isSerializable === false\r\n * @param allowCanvas defines if the control is allowed to use a Canvas2D object to serialize (true by default)\r\n */\r\n public override serialize(serializationObject: any, force: boolean = false, allowCanvas: boolean = true) {\r\n super.serialize(serializationObject, force, allowCanvas);\r\n if (!this.isSerializable && !force) {\r\n return;\r\n }\r\n\r\n if (this.backgroundGradient) {\r\n serializationObject.backgroundGradient = {};\r\n this.backgroundGradient.serialize(serializationObject.backgroundGradient);\r\n }\r\n\r\n if (!this.children.length) {\r\n return;\r\n }\r\n\r\n serializationObject.children = [];\r\n\r\n for (const child of this.children) {\r\n if (child.isSerializable || force) {\r\n const childSerializationObject = {};\r\n child.serialize(childSerializationObject, force, allowCanvas);\r\n serializationObject.children.push(childSerializationObject);\r\n }\r\n }\r\n }\r\n\r\n /** Releases associated resources */\r\n public override dispose() {\r\n super.dispose();\r\n\r\n for (let index = this.children.length - 1; index >= 0; index--) {\r\n this.children[index].dispose();\r\n }\r\n this._intermediateTexture?.dispose();\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _parseFromContent(serializedObject: any, host: AdvancedDynamicTexture, urlRewriter?: (url: string) => string) {\r\n super._parseFromContent(serializedObject, host, urlRewriter);\r\n this._link(host);\r\n\r\n // Gradient\r\n if (serializedObject.backgroundGradient) {\r\n const className = Tools.Instantiate(\"BABYLON.GUI.\" + serializedObject.backgroundGradient.className);\r\n this._backgroundGradient = new className();\r\n this._backgroundGradient?.parse(serializedObject.backgroundGradient);\r\n }\r\n\r\n if (!serializedObject.children) {\r\n return;\r\n }\r\n\r\n for (const childData of serializedObject.children) {\r\n this.addControl(Control.Parse(childData, host, urlRewriter));\r\n }\r\n }\r\n\r\n public override isReady(): boolean {\r\n for (const child of this.children) {\r\n if (!child.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.Container\", Container);\r\n"]}
|
package/2D/controls/image.js
CHANGED
|
@@ -561,8 +561,9 @@ export class Image extends Control {
|
|
|
561
561
|
let elemMatrixD = 1;
|
|
562
562
|
let elemMatrixE = 0;
|
|
563
563
|
let elemMatrixF = 0;
|
|
564
|
-
const
|
|
565
|
-
if (
|
|
564
|
+
const consolidatedTransform = elem.transform?.baseVal.consolidate();
|
|
565
|
+
if (consolidatedTransform) {
|
|
566
|
+
const mainMatrix = consolidatedTransform.matrix;
|
|
566
567
|
elemMatrixA = mainMatrix.a;
|
|
567
568
|
elemMatrixD = mainMatrix.d;
|
|
568
569
|
elemMatrixE = mainMatrix.e;
|
package/2D/controls/image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/image.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { Tools } from \"core/Misc/tools\";\r\n\r\nimport { Control } from \"./control\";\r\nimport type { Measure } from \"../measure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { ICanvas, ICanvasRenderingContext, IImage } from \"core/Engines/ICanvas\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\n\r\n/**\r\n * Class used to create 2D images\r\n */\r\nexport class Image extends Control {\r\n /**\r\n * Specifies an alternate text for the image, if the image for some reason cannot be displayed.\r\n */\r\n public alt?: string;\r\n\r\n private _workingCanvas: Nullable<ICanvas> = null;\r\n\r\n private _domImage: IImage;\r\n private _imageWidth: number;\r\n private _imageHeight: number;\r\n private _loaded = false;\r\n private _stretch = Image.STRETCH_FILL;\r\n private _source: Nullable<string> = null;\r\n private _autoScale = false;\r\n\r\n private _sourceLeft = 0;\r\n private _sourceTop = 0;\r\n private _sourceWidth = 0;\r\n private _sourceHeight = 0;\r\n private _svgAttributesComputationCompleted: boolean = false;\r\n private _isSVG: boolean = false;\r\n\r\n private _cellWidth: number = 0;\r\n private _cellHeight: number = 0;\r\n private _cellId: number = -1;\r\n\r\n private _sliceLeft: number;\r\n private _sliceRight: number;\r\n private _sliceTop: number;\r\n private _sliceBottom: number;\r\n\r\n private _populateNinePatchSlicesFromImage = false;\r\n\r\n private _detectPointerOnOpaqueOnly: boolean;\r\n\r\n private _imageDataCache: {\r\n data: Uint8ClampedArray | null;\r\n key: string;\r\n } = { data: null, key: \"\" };\r\n\r\n /**\r\n * Cache of images to avoid loading the same image multiple times\r\n */\r\n public static SourceImgCache = new Map<string, { img: IImage; timesUsed: number; loaded: boolean; waitingForLoadCallback: Array<() => void> }>();\r\n\r\n /**\r\n * Observable notified when the content is loaded\r\n */\r\n public onImageLoadedObservable = new Observable<Image>();\r\n\r\n /**\r\n * Observable notified when _sourceLeft, _sourceTop, _sourceWidth and _sourceHeight are computed\r\n */\r\n public onSVGAttributesComputedObservable = new Observable<Image>();\r\n\r\n /**\r\n * Gets or sets the referrer policy to apply on the img element load request.\r\n * You should set referrerPolicy before set the source of the image if you want to ensure the header will be present on the xhr loading request\r\n */\r\n public referrerPolicy: Nullable<ReferrerPolicy>;\r\n\r\n /**\r\n * Gets a boolean indicating that the content is loaded\r\n */\r\n public get isLoaded(): boolean {\r\n return this._loaded;\r\n }\r\n\r\n public override isReady(): boolean {\r\n return this.isLoaded;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if pointers should only be validated on pixels with alpha > 0.\r\n * Beware using this as this will consume more memory as the image has to be stored twice\r\n */\r\n @serialize()\r\n public get detectPointerOnOpaqueOnly(): boolean {\r\n return this._detectPointerOnOpaqueOnly;\r\n }\r\n\r\n public set detectPointerOnOpaqueOnly(value: boolean) {\r\n if (this._detectPointerOnOpaqueOnly === value) {\r\n return;\r\n }\r\n\r\n this._detectPointerOnOpaqueOnly = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the left value for slicing (9-patch)\r\n */\r\n @serialize()\r\n public get sliceLeft(): number {\r\n return this._sliceLeft;\r\n }\r\n\r\n public set sliceLeft(value: number) {\r\n if (this._sliceLeft === value) {\r\n return;\r\n }\r\n\r\n this._sliceLeft = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the right value for slicing (9-patch)\r\n */\r\n @serialize()\r\n public get sliceRight(): number {\r\n return this._sliceRight;\r\n }\r\n\r\n public set sliceRight(value: number) {\r\n if (this._sliceRight === value) {\r\n return;\r\n }\r\n\r\n this._sliceRight = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the top value for slicing (9-patch)\r\n */\r\n @serialize()\r\n public get sliceTop(): number {\r\n return this._sliceTop;\r\n }\r\n\r\n public set sliceTop(value: number) {\r\n if (this._sliceTop === value) {\r\n return;\r\n }\r\n\r\n this._sliceTop = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the bottom value for slicing (9-patch)\r\n */\r\n @serialize()\r\n public get sliceBottom(): number {\r\n return this._sliceBottom;\r\n }\r\n\r\n public set sliceBottom(value: number) {\r\n if (this._sliceBottom === value) {\r\n return;\r\n }\r\n\r\n this._sliceBottom = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the left coordinate in the source image\r\n */\r\n @serialize()\r\n public get sourceLeft(): number {\r\n return this._sourceLeft;\r\n }\r\n\r\n public set sourceLeft(value: number) {\r\n if (this._sourceLeft === value) {\r\n return;\r\n }\r\n\r\n this._sourceLeft = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the top coordinate in the source image\r\n */\r\n @serialize()\r\n public get sourceTop(): number {\r\n return this._sourceTop;\r\n }\r\n\r\n public set sourceTop(value: number) {\r\n if (this._sourceTop === value) {\r\n return;\r\n }\r\n\r\n this._sourceTop = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the width to capture in the source image\r\n */\r\n @serialize()\r\n public get sourceWidth(): number {\r\n return this._sourceWidth;\r\n }\r\n\r\n public set sourceWidth(value: number) {\r\n if (this._sourceWidth === value) {\r\n return;\r\n }\r\n\r\n this._sourceWidth = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the height to capture in the source image\r\n */\r\n @serialize()\r\n public get sourceHeight(): number {\r\n return this._sourceHeight;\r\n }\r\n\r\n public set sourceHeight(value: number) {\r\n if (this._sourceHeight === value) {\r\n return;\r\n }\r\n\r\n this._sourceHeight = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets the image width\r\n */\r\n public get imageWidth(): number {\r\n return this._imageWidth;\r\n }\r\n\r\n /**\r\n * Gets the image height\r\n */\r\n public get imageHeight(): number {\r\n return this._imageHeight;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if nine patch slices (left, top, right, bottom) should be read from image data\r\n */\r\n @serialize()\r\n public get populateNinePatchSlicesFromImage(): boolean {\r\n return this._populateNinePatchSlicesFromImage;\r\n }\r\n\r\n public set populateNinePatchSlicesFromImage(value: boolean) {\r\n if (this._populateNinePatchSlicesFromImage === value) {\r\n return;\r\n }\r\n\r\n this._populateNinePatchSlicesFromImage = value;\r\n\r\n if (this._populateNinePatchSlicesFromImage && this._loaded) {\r\n this._extractNinePatchSliceDataFromImage();\r\n }\r\n }\r\n\r\n /** Indicates if the format of the image is SVG */\r\n public get isSVG(): boolean {\r\n return this._isSVG;\r\n }\r\n\r\n /** Gets the status of the SVG attributes computation (sourceLeft, sourceTop, sourceWidth, sourceHeight) */\r\n public get svgAttributesComputationCompleted(): boolean {\r\n return this._svgAttributesComputationCompleted;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the image can force its container to adapt its size\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image\r\n */\r\n @serialize()\r\n public get autoScale(): boolean {\r\n return this._autoScale;\r\n }\r\n\r\n public set autoScale(value: boolean) {\r\n if (this._autoScale === value) {\r\n return;\r\n }\r\n\r\n this._autoScale = value;\r\n\r\n if (value && this._loaded) {\r\n this.synchronizeSizeWithContent();\r\n }\r\n }\r\n\r\n /** Gets or sets the stretching mode used by the image */\r\n @serialize()\r\n public get stretch(): number {\r\n return this._stretch;\r\n }\r\n\r\n public set stretch(value: number) {\r\n if (this._stretch === value) {\r\n return;\r\n }\r\n\r\n this._stretch = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _rotate90(n: number, preserveProperties: boolean = false): Image {\r\n const width = this._domImage.width;\r\n const height = this._domImage.height;\r\n\r\n // Should abstract platform instead of using LastCreatedEngine\r\n const engine = this._host?.getScene()?.getEngine() || EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n const canvas = engine.createCanvas(height, width);\r\n\r\n const context = canvas.getContext(\"2d\");\r\n\r\n context.translate(canvas.width / 2, canvas.height / 2);\r\n context.rotate((n * Math.PI) / 2);\r\n\r\n context.drawImage(this._domImage, 0, 0, width, height, -width / 2, -height / 2, width, height);\r\n\r\n const dataUrl: string = canvas.toDataURL(\"image/jpg\");\r\n const rotatedImage = new Image(this.name + \"rotated\", dataUrl);\r\n\r\n if (preserveProperties) {\r\n rotatedImage._stretch = this._stretch;\r\n rotatedImage._autoScale = this._autoScale;\r\n rotatedImage._cellId = this._cellId;\r\n rotatedImage._cellWidth = n % 1 ? this._cellHeight : this._cellWidth;\r\n rotatedImage._cellHeight = n % 1 ? this._cellWidth : this._cellHeight;\r\n }\r\n\r\n this._handleRotationForSVGImage(this, rotatedImage, n);\r\n\r\n this._imageDataCache.data = null;\r\n\r\n return rotatedImage;\r\n }\r\n\r\n private _handleRotationForSVGImage(srcImage: Image, dstImage: Image, n: number): void {\r\n if (!srcImage._isSVG) {\r\n return;\r\n }\r\n\r\n if (srcImage._svgAttributesComputationCompleted) {\r\n this._rotate90SourceProperties(srcImage, dstImage, n);\r\n this._markAsDirty();\r\n } else {\r\n srcImage.onSVGAttributesComputedObservable.addOnce(() => {\r\n this._rotate90SourceProperties(srcImage, dstImage, n);\r\n this._markAsDirty();\r\n });\r\n }\r\n }\r\n\r\n private _rotate90SourceProperties(srcImage: Image, dstImage: Image, n: number): void {\r\n let srcLeft = srcImage.sourceLeft,\r\n srcTop = srcImage.sourceTop,\r\n srcWidth = srcImage.domImage.width,\r\n srcHeight = srcImage.domImage.height;\r\n\r\n let dstLeft = srcLeft,\r\n dstTop = srcTop,\r\n dstWidth = srcImage.sourceWidth,\r\n dstHeight = srcImage.sourceHeight;\r\n\r\n if (n != 0) {\r\n const mult = n < 0 ? -1 : 1;\r\n n = n % 4;\r\n for (let i = 0; i < Math.abs(n); ++i) {\r\n dstLeft = -(srcTop - srcHeight / 2) * mult + srcHeight / 2;\r\n dstTop = (srcLeft - srcWidth / 2) * mult + srcWidth / 2;\r\n [dstWidth, dstHeight] = [dstHeight, dstWidth];\r\n if (n < 0) {\r\n dstTop -= dstHeight;\r\n } else {\r\n dstLeft -= dstWidth;\r\n }\r\n srcLeft = dstLeft;\r\n srcTop = dstTop;\r\n [srcWidth, srcHeight] = [srcHeight, srcWidth];\r\n }\r\n }\r\n\r\n dstImage.sourceLeft = dstLeft;\r\n dstImage.sourceTop = dstTop;\r\n dstImage.sourceWidth = dstWidth;\r\n dstImage.sourceHeight = dstHeight;\r\n }\r\n\r\n private _extractNinePatchSliceDataFromImage() {\r\n const width = this._domImage.width;\r\n const height = this._domImage.height;\r\n\r\n if (!this._workingCanvas) {\r\n const engine = this._host?.getScene()?.getEngine() || EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n this._workingCanvas = engine.createCanvas(width, height);\r\n }\r\n const canvas = this._workingCanvas;\r\n const context = canvas.getContext(\"2d\");\r\n\r\n context.drawImage(this._domImage, 0, 0, width, height);\r\n const imageData = context.getImageData(0, 0, width, height);\r\n\r\n // Left and right\r\n this._sliceLeft = -1;\r\n this._sliceRight = -1;\r\n for (let x = 0; x < width; x++) {\r\n const alpha = imageData.data[x * 4 + 3];\r\n\r\n if (alpha > 127 && this._sliceLeft === -1) {\r\n this._sliceLeft = x;\r\n continue;\r\n }\r\n\r\n if (alpha < 127 && this._sliceLeft > -1) {\r\n this._sliceRight = x;\r\n break;\r\n }\r\n }\r\n\r\n // top and bottom\r\n this._sliceTop = -1;\r\n this._sliceBottom = -1;\r\n for (let y = 0; y < height; y++) {\r\n const alpha = imageData.data[y * width * 4 + 3];\r\n\r\n if (alpha > 127 && this._sliceTop === -1) {\r\n this._sliceTop = y;\r\n continue;\r\n }\r\n\r\n if (alpha < 127 && this._sliceTop > -1) {\r\n this._sliceBottom = y;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the internal DOM image used to render the control\r\n */\r\n public set domImage(value: IImage) {\r\n this._domImage = value;\r\n this._loaded = false;\r\n this._imageDataCache.data = null;\r\n\r\n if (this._domImage.width) {\r\n this._onImageLoaded();\r\n } else {\r\n this._domImage.onload = () => {\r\n this._onImageLoaded();\r\n };\r\n }\r\n }\r\n\r\n public get domImage(): IImage {\r\n return this._domImage;\r\n }\r\n\r\n private _onImageLoaded(): void {\r\n this._imageDataCache.data = null;\r\n this._imageWidth = this._domImage.width;\r\n this._imageHeight = this._domImage.height;\r\n this._loaded = true;\r\n\r\n if (this._populateNinePatchSlicesFromImage) {\r\n this._extractNinePatchSliceDataFromImage();\r\n }\r\n\r\n if (this._autoScale) {\r\n this.synchronizeSizeWithContent();\r\n }\r\n\r\n this.onImageLoadedObservable.notifyObservers(this);\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets the image source url\r\n */\r\n @serialize()\r\n public get source() {\r\n return this._source;\r\n }\r\n\r\n /**\r\n * Resets the internal Image Element cache. Can reduce memory usage.\r\n */\r\n public static ResetImageCache() {\r\n Image.SourceImgCache.clear();\r\n }\r\n\r\n private _removeCacheUsage(source: Nullable<string>) {\r\n const value = source && Image.SourceImgCache.get(source);\r\n if (value) {\r\n value.timesUsed -= 1;\r\n\r\n // Remove from DOM\r\n const htmlElement = value.img as HTMLImageElement;\r\n if (htmlElement.parentNode) {\r\n htmlElement.parentNode.removeChild(htmlElement);\r\n }\r\n\r\n // Since the image isn't being used anymore, we can clean it from the cache\r\n if (value.timesUsed === 0) {\r\n Image.SourceImgCache.delete(source);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets image source url\r\n */\r\n public set source(value: Nullable<string>) {\r\n if (this._urlRewriter && value) {\r\n value = this._urlRewriter(value);\r\n }\r\n\r\n if (this._source === value) {\r\n return;\r\n }\r\n\r\n this._removeCacheUsage(this._source);\r\n\r\n this._loaded = false;\r\n this._source = value;\r\n this._imageDataCache.data = null;\r\n\r\n if (value) {\r\n value = this._svgCheck(value);\r\n }\r\n\r\n // Should abstract platform instead of using LastCreatedEngine\r\n const engine = this._host?.getScene()?.getEngine() || EngineStore.LastCreatedEngine;\r\n // If no engine, skip all other DOM operations.\r\n if (!engine) {\r\n return;\r\n }\r\n if (value && Image.SourceImgCache.has(value)) {\r\n const cachedData = Image.SourceImgCache.get(value)!;\r\n this._domImage = cachedData.img;\r\n cachedData.timesUsed += 1;\r\n if (cachedData.loaded) {\r\n this._onImageLoaded();\r\n } else {\r\n cachedData.waitingForLoadCallback.push(this._onImageLoaded.bind(this));\r\n }\r\n return;\r\n }\r\n this._domImage = engine.createCanvasImage();\r\n // need to add to enforce rendering\r\n const imgElement = this._domImage as HTMLImageElement;\r\n let addedToDom = false;\r\n if (imgElement.style && this._source?.endsWith(\".svg\")) {\r\n imgElement.style.visibility = \"hidden\";\r\n imgElement.style.position = \"absolute\";\r\n imgElement.style.top = \"0\";\r\n engine.getRenderingCanvas()?.parentNode?.appendChild(imgElement);\r\n addedToDom = true;\r\n }\r\n\r\n if (value) {\r\n Image.SourceImgCache.set(value, { img: this._domImage, timesUsed: 1, loaded: false, waitingForLoadCallback: [this._onImageLoaded.bind(this)] });\r\n }\r\n\r\n this._domImage.onload = () => {\r\n if (value) {\r\n const cachedData = Image.SourceImgCache.get(value);\r\n if (cachedData) {\r\n cachedData.loaded = true;\r\n for (const waitingCallback of cachedData.waitingForLoadCallback) {\r\n waitingCallback();\r\n }\r\n cachedData.waitingForLoadCallback.length = 0;\r\n addedToDom && imgElement.remove();\r\n return;\r\n }\r\n }\r\n this._onImageLoaded();\r\n addedToDom && imgElement.remove();\r\n };\r\n if (value) {\r\n Tools.SetCorsBehavior(value, this._domImage);\r\n Tools.SetReferrerPolicyBehavior(this.referrerPolicy, this._domImage);\r\n this._domImage.src = value;\r\n }\r\n }\r\n\r\n private _sanitizeSVG(svgString: string) {\r\n if (svgString.indexOf(\"<svg\") === -1) {\r\n return svgString; // Not an SVG, return as is\r\n }\r\n\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(svgString, \"image/svg+xml\");\r\n\r\n const dangerousTags = [\"script\", \"iframe\", \"foreignObject\", \"object\", \"embed\", \"link\", \"style\"];\r\n const dangerousAttrs = [/^on/i, /^xlink:href$/, /^href$/];\r\n\r\n // Remove dangerous elements\r\n dangerousTags.forEach((tag) => {\r\n const elements = doc.getElementsByTagName(tag);\r\n for (let i = elements.length - 1; i >= 0; i--) {\r\n elements[i].remove();\r\n }\r\n });\r\n\r\n // Recursively sanitize attributes\r\n function sanitizeElement(el: Element) {\r\n if (el.attributes) {\r\n for (let i = el.attributes.length - 1; i >= 0; i--) {\r\n const attr = el.attributes[i];\r\n const name = attr.name;\r\n const value = attr.value;\r\n\r\n // Remove dangerous attributes\r\n if (dangerousAttrs.some((regex) => regex.test(name))) {\r\n el.removeAttribute(name);\r\n }\r\n\r\n // Remove javascript: links\r\n if (typeof value === \"string\" && value.trim().toLowerCase().startsWith(\"javascript:\")) {\r\n el.removeAttribute(name);\r\n }\r\n }\r\n }\r\n\r\n // Recursively sanitize children\r\n for (let i = 0; i < el.children.length; i++) {\r\n sanitizeElement(el.children[i]);\r\n }\r\n }\r\n\r\n sanitizeElement(doc.documentElement);\r\n\r\n return new XMLSerializer().serializeToString(doc);\r\n }\r\n\r\n /**\r\n * Checks for svg document with icon id present\r\n * @param value the source svg\r\n * @returns the svg\r\n */\r\n private _svgCheck(value: string): string {\r\n // Skip SVG processing if no window/document or SVG support\r\n if (typeof window === \"undefined\" || typeof document === \"undefined\" || !window.SVGSVGElement) {\r\n return value;\r\n }\r\n\r\n if (window.SVGSVGElement && value.search(/(\\.svg|\\.svg?[?|#].*)$/gi) !== -1 && value.indexOf(\"#\") === value.lastIndexOf(\"#\")) {\r\n this._isSVG = true;\r\n value = this._sanitizeSVG(value);\r\n const svgsrc = value.split(\"#\")[0];\r\n const elemid = value.split(\"#\")[1];\r\n // check if object alr exist in document\r\n const svgExist = <HTMLObjectElement>document.body.querySelector('object[data=\"' + svgsrc + '\"]');\r\n if (svgExist) {\r\n const svgDoc = svgExist.contentDocument;\r\n // get viewbox width and height, get svg document width and height in px\r\n if (svgDoc && svgDoc.documentElement) {\r\n const vb = svgDoc.documentElement.getAttribute(\"viewBox\");\r\n const docwidth = Number(svgDoc.documentElement.getAttribute(\"width\"));\r\n const docheight = Number(svgDoc.documentElement.getAttribute(\"height\"));\r\n const elem = <SVGGraphicsElement>(<unknown>svgDoc.getElementById(elemid));\r\n if (elem && vb && docwidth && docheight) {\r\n this._getSVGAttribs(svgExist, elemid);\r\n return value;\r\n }\r\n }\r\n\r\n // wait for object to load\r\n svgExist.addEventListener(\"load\", () => {\r\n this._getSVGAttribs(svgExist, elemid);\r\n });\r\n } else {\r\n // create document object\r\n const svgImage = document.createElement(\"object\");\r\n svgImage.data = svgsrc;\r\n svgImage.type = \"image/svg+xml\";\r\n svgImage.width = \"0%\";\r\n svgImage.height = \"0%\";\r\n document.body.appendChild(svgImage);\r\n // when the object has loaded, get the element attribs\r\n svgImage.onload = () => {\r\n const svgobj = <HTMLObjectElement>document.body.querySelector('object[data=\"' + svgsrc + '\"]');\r\n if (svgobj) {\r\n this._getSVGAttribs(svgobj, elemid);\r\n }\r\n };\r\n }\r\n return svgsrc;\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n /**\r\n * Sets sourceLeft, sourceTop, sourceWidth, sourceHeight automatically\r\n * given external svg file and icon id\r\n * @param svgsrc\r\n * @param elemid\r\n */\r\n private _getSVGAttribs(svgsrc: HTMLObjectElement, elemid: string) {\r\n const svgDoc = svgsrc.contentDocument;\r\n // get viewbox width and height, get svg document width and height in px\r\n if (svgDoc && svgDoc.documentElement) {\r\n const vb = svgDoc.documentElement.getAttribute(\"viewBox\");\r\n const docwidth = Number(svgDoc.documentElement.getAttribute(\"width\"));\r\n const docheight = Number(svgDoc.documentElement.getAttribute(\"height\"));\r\n // get element bbox and matrix transform\r\n const elem = svgDoc.getElementById(elemid) as Nullable<SVGGraphicsElement>;\r\n if (vb && docwidth && docheight && elem) {\r\n const vbWidth = Number(vb.split(\" \")[2]);\r\n const vbHeight = Number(vb.split(\" \")[3]);\r\n const elemBbox = elem.getBBox();\r\n let elemMatrixA = 1;\r\n let elemMatrixD = 1;\r\n let elemMatrixE = 0;\r\n let elemMatrixF = 0;\r\n const mainMatrix = elem.transform.baseVal.consolidate()!.matrix;\r\n if (elem.transform && elem.transform.baseVal.consolidate()) {\r\n elemMatrixA = mainMatrix.a;\r\n elemMatrixD = mainMatrix.d;\r\n elemMatrixE = mainMatrix.e;\r\n elemMatrixF = mainMatrix.f;\r\n }\r\n\r\n // compute source coordinates and dimensions\r\n this.sourceLeft = ((elemMatrixA * elemBbox.x + elemMatrixE) * docwidth) / vbWidth;\r\n this.sourceTop = ((elemMatrixD * elemBbox.y + elemMatrixF) * docheight) / vbHeight;\r\n this.sourceWidth = elemBbox.width * elemMatrixA * (docwidth / vbWidth);\r\n this.sourceHeight = elemBbox.height * elemMatrixD * (docheight / vbHeight);\r\n this._svgAttributesComputationCompleted = true;\r\n this.onSVGAttributesComputedObservable.notifyObservers(this);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the cell width to use when animation sheet is enabled\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image\r\n */\r\n @serialize()\r\n get cellWidth(): number {\r\n return this._cellWidth;\r\n }\r\n set cellWidth(value: number) {\r\n if (this._cellWidth === value) {\r\n return;\r\n }\r\n\r\n this._cellWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the cell height to use when animation sheet is enabled\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image\r\n */\r\n @serialize()\r\n get cellHeight(): number {\r\n return this._cellHeight;\r\n }\r\n set cellHeight(value: number) {\r\n if (this._cellHeight === value) {\r\n return;\r\n }\r\n\r\n this._cellHeight = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the cell id to use (this will turn on the animation sheet mode)\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image\r\n */\r\n @serialize()\r\n get cellId(): number {\r\n return this._cellId;\r\n }\r\n set cellId(value: number) {\r\n if (this._cellId === value) {\r\n return;\r\n }\r\n\r\n this._cellId = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Creates a new Image\r\n * @param name defines the control name\r\n * @param url defines the image url\r\n */\r\n constructor(\r\n public override name?: string,\r\n url: Nullable<string> = null\r\n ) {\r\n super(name);\r\n this.source = url;\r\n }\r\n\r\n /**\r\n * Tests if a given coordinates belong to the current control\r\n * @param x defines x coordinate to test\r\n * @param y defines y coordinate to test\r\n * @returns true if the coordinates are inside the control\r\n */\r\n public override contains(x: number, y: number): boolean {\r\n if (!super.contains(x, y)) {\r\n return false;\r\n }\r\n\r\n if (!this._detectPointerOnOpaqueOnly || !this._workingCanvas) {\r\n return true;\r\n }\r\n\r\n const width = this._currentMeasure.width | 0;\r\n const height = this._currentMeasure.height | 0;\r\n const key = width + \"_\" + height;\r\n\r\n let imageData = this._imageDataCache.data;\r\n\r\n if (!imageData || this._imageDataCache.key !== key) {\r\n const canvas = this._workingCanvas;\r\n const context = canvas.getContext(\"2d\");\r\n\r\n this._imageDataCache.data = imageData = context.getImageData(0, 0, width, height).data;\r\n this._imageDataCache.key = key;\r\n }\r\n\r\n x = (x - this._currentMeasure.left) | 0;\r\n y = (y - this._currentMeasure.top) | 0;\r\n\r\n const pickedPixel = imageData[(x + y * width) * 4 + 3];\r\n\r\n return pickedPixel > 0;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"Image\";\r\n }\r\n\r\n /** Force the control to synchronize with its content */\r\n public synchronizeSizeWithContent() {\r\n if (!this._loaded) {\r\n return;\r\n }\r\n\r\n this.width = this._domImage.width + \"px\";\r\n this.height = this._domImage.height + \"px\";\r\n }\r\n\r\n protected override _processMeasures(parentMeasure: Measure, context: ICanvasRenderingContext): void {\r\n if (this._loaded) {\r\n switch (this._stretch) {\r\n case Image.STRETCH_NONE:\r\n break;\r\n case Image.STRETCH_FILL:\r\n break;\r\n case Image.STRETCH_UNIFORM:\r\n break;\r\n case Image.STRETCH_NINE_PATCH:\r\n break;\r\n case Image.STRETCH_EXTEND:\r\n if (this._autoScale) {\r\n this.synchronizeSizeWithContent();\r\n }\r\n if (this.parent && this.parent.parent) {\r\n // Will update root size if root is not the top root\r\n this.parent.adaptWidthToChildren = true;\r\n this.parent.adaptHeightToChildren = true;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n super._processMeasures(parentMeasure, context);\r\n }\r\n\r\n private _prepareWorkingCanvasForOpaqueDetection() {\r\n if (!this._detectPointerOnOpaqueOnly) {\r\n return;\r\n }\r\n\r\n const width = this._currentMeasure.width;\r\n const height = this._currentMeasure.height;\r\n\r\n if (!this._workingCanvas) {\r\n const engine = this._host?.getScene()?.getEngine() || EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n this._workingCanvas = engine.createCanvas(width, height);\r\n }\r\n const canvas = this._workingCanvas;\r\n\r\n const context = canvas.getContext(\"2d\");\r\n\r\n context.clearRect(0, 0, width, height);\r\n }\r\n\r\n private _drawImage(context: ICanvasRenderingContext, sx: number, sy: number, sw: number, sh: number, tx: number, ty: number, tw: number, th: number) {\r\n context.drawImage(this._domImage, sx, sy, sw, sh, tx, ty, tw, th);\r\n\r\n if (!this._detectPointerOnOpaqueOnly) {\r\n return;\r\n }\r\n\r\n const transform = context.getTransform();\r\n\r\n const canvas = this._workingCanvas!;\r\n const workingCanvasContext = canvas.getContext(\"2d\");\r\n workingCanvasContext.save();\r\n const ttx = tx - this._currentMeasure.left;\r\n const tty = ty - this._currentMeasure.top;\r\n workingCanvasContext.setTransform(transform.a, transform.b, transform.c, transform.d, (ttx + tw) / 2, (tty + th) / 2);\r\n workingCanvasContext.translate(-(ttx + tw) / 2, -(tty + th) / 2);\r\n\r\n workingCanvasContext.drawImage(this._domImage, sx, sy, sw, sh, ttx, tty, tw, th);\r\n workingCanvasContext.restore();\r\n }\r\n\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;\r\n context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;\r\n }\r\n\r\n let x, y, width, height;\r\n if (this.cellId == -1) {\r\n x = this._sourceLeft;\r\n y = this._sourceTop;\r\n\r\n width = this._sourceWidth ? this._sourceWidth : this._imageWidth;\r\n height = this._sourceHeight ? this._sourceHeight : this._imageHeight;\r\n } else {\r\n const rowCount = this._domImage.naturalWidth / this.cellWidth;\r\n const column = (this.cellId / rowCount) >> 0;\r\n const row = this.cellId % rowCount;\r\n\r\n x = this.cellWidth * row;\r\n y = this.cellHeight * column;\r\n width = this.cellWidth;\r\n height = this.cellHeight;\r\n }\r\n\r\n this._prepareWorkingCanvasForOpaqueDetection();\r\n\r\n this._applyStates(context);\r\n if (this._loaded) {\r\n switch (this._stretch) {\r\n case Image.STRETCH_NONE:\r\n this._drawImage(context, x, y, width, height, this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n break;\r\n case Image.STRETCH_FILL:\r\n this._drawImage(context, x, y, width, height, this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n break;\r\n case Image.STRETCH_UNIFORM: {\r\n const hRatio = this._currentMeasure.width / width;\r\n const vRatio = this._currentMeasure.height / height;\r\n const ratio = Math.min(hRatio, vRatio);\r\n const centerX = (this._currentMeasure.width - width * ratio) / 2;\r\n const centerY = (this._currentMeasure.height - height * ratio) / 2;\r\n\r\n this._drawImage(context, x, y, width, height, this._currentMeasure.left + centerX, this._currentMeasure.top + centerY, width * ratio, height * ratio);\r\n break;\r\n }\r\n case Image.STRETCH_EXTEND:\r\n this._drawImage(context, x, y, width, height, this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n break;\r\n case Image.STRETCH_NINE_PATCH:\r\n this._renderNinePatch(context, x, y, width, height);\r\n break;\r\n }\r\n }\r\n\r\n context.restore();\r\n }\r\n\r\n private _renderNinePatch(context: ICanvasRenderingContext, sx: number, sy: number, sw: number, sh: number): void {\r\n const idealRatio = this.host.idealRatio;\r\n const leftWidth = this._sliceLeft;\r\n const topHeight = this._sliceTop;\r\n const bottomHeight = sh - this._sliceBottom;\r\n const rightWidth = sw - this._sliceRight;\r\n const centerWidth = this._sliceRight - this._sliceLeft;\r\n const centerHeight = this._sliceBottom - this._sliceTop;\r\n const leftWidthAdjusted = Math.round(leftWidth * idealRatio);\r\n const topHeightAdjusted = Math.round(topHeight * idealRatio);\r\n const bottomHeightAdjusted = Math.round(bottomHeight * idealRatio);\r\n const rightWidthAdjusted = Math.round(rightWidth * idealRatio);\r\n const targetCenterWidth = Math.round(this._currentMeasure.width) - rightWidthAdjusted - leftWidthAdjusted + 2;\r\n const targetCenterHeight = Math.round(this._currentMeasure.height) - bottomHeightAdjusted - topHeightAdjusted + 2;\r\n const centerLeftOffset = Math.round(this._currentMeasure.left) + leftWidthAdjusted - 1;\r\n const centerTopOffset = Math.round(this._currentMeasure.top) + topHeightAdjusted - 1;\r\n const rightOffset = Math.round(this._currentMeasure.left + this._currentMeasure.width) - rightWidthAdjusted;\r\n const bottomOffset = Math.round(this._currentMeasure.top + this._currentMeasure.height) - bottomHeightAdjusted;\r\n\r\n //Top Left\r\n this._drawImage(context, sx, sy, leftWidth, topHeight, this._currentMeasure.left, this._currentMeasure.top, leftWidthAdjusted, topHeightAdjusted);\r\n //Top\r\n this._drawImage(context, sx + this._sliceLeft, sy, centerWidth, topHeight, centerLeftOffset + 1, this._currentMeasure.top, targetCenterWidth - 2, topHeightAdjusted);\r\n //Top Right\r\n this._drawImage(context, sx + this._sliceRight, sy, rightWidth, topHeight, rightOffset, this._currentMeasure.top, rightWidthAdjusted, topHeightAdjusted);\r\n //Left\r\n this._drawImage(context, sx, sy + this._sliceTop, leftWidth, centerHeight, this._currentMeasure.left, centerTopOffset + 1, leftWidthAdjusted, targetCenterHeight - 2);\r\n // Center\r\n this._drawImage(\r\n context,\r\n sx + this._sliceLeft,\r\n sy + this._sliceTop,\r\n centerWidth,\r\n centerHeight,\r\n centerLeftOffset + 1,\r\n centerTopOffset + 1,\r\n targetCenterWidth - 2,\r\n targetCenterHeight - 2\r\n );\r\n //Right\r\n this._drawImage(\r\n context,\r\n sx + this._sliceRight,\r\n sy + this._sliceTop,\r\n rightWidth,\r\n centerHeight,\r\n rightOffset,\r\n centerTopOffset + 1,\r\n rightWidthAdjusted,\r\n targetCenterHeight - 2\r\n );\r\n //Bottom Left\r\n this._drawImage(context, sx, sy + this._sliceBottom, leftWidth, bottomHeight, this._currentMeasure.left, bottomOffset, leftWidthAdjusted, bottomHeightAdjusted);\r\n //Bottom\r\n this._drawImage(\r\n context,\r\n sx + this.sliceLeft,\r\n sy + this._sliceBottom,\r\n centerWidth,\r\n bottomHeight,\r\n centerLeftOffset + 1,\r\n bottomOffset,\r\n targetCenterWidth - 2,\r\n bottomHeightAdjusted\r\n );\r\n //Bottom Right\r\n this._drawImage(context, sx + this._sliceRight, sy + this._sliceBottom, rightWidth, bottomHeight, rightOffset, bottomOffset, rightWidthAdjusted, bottomHeightAdjusted);\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this.onImageLoadedObservable.clear();\r\n this.onSVGAttributesComputedObservable.clear();\r\n this._removeCacheUsage(this._source);\r\n }\r\n\r\n // Static\r\n /** STRETCH_NONE */\r\n public static readonly STRETCH_NONE = 0;\r\n /** STRETCH_FILL */\r\n public static readonly STRETCH_FILL = 1;\r\n /** STRETCH_UNIFORM */\r\n public static readonly STRETCH_UNIFORM = 2;\r\n /** STRETCH_EXTEND */\r\n public static readonly STRETCH_EXTEND = 3;\r\n /** NINE_PATCH */\r\n public static readonly STRETCH_NINE_PATCH = 4;\r\n}\r\nRegisterClass(\"BABYLON.GUI.Image\", Image);\r\n"]}
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/image.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { Tools } from \"core/Misc/tools\";\r\n\r\nimport { Control } from \"./control\";\r\nimport type { Measure } from \"../measure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { ICanvas, ICanvasRenderingContext, IImage } from \"core/Engines/ICanvas\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\n\r\n/**\r\n * Class used to create 2D images\r\n */\r\nexport class Image extends Control {\r\n /**\r\n * Specifies an alternate text for the image, if the image for some reason cannot be displayed.\r\n */\r\n public alt?: string;\r\n\r\n private _workingCanvas: Nullable<ICanvas> = null;\r\n\r\n private _domImage: IImage;\r\n private _imageWidth: number;\r\n private _imageHeight: number;\r\n private _loaded = false;\r\n private _stretch = Image.STRETCH_FILL;\r\n private _source: Nullable<string> = null;\r\n private _autoScale = false;\r\n\r\n private _sourceLeft = 0;\r\n private _sourceTop = 0;\r\n private _sourceWidth = 0;\r\n private _sourceHeight = 0;\r\n private _svgAttributesComputationCompleted: boolean = false;\r\n private _isSVG: boolean = false;\r\n\r\n private _cellWidth: number = 0;\r\n private _cellHeight: number = 0;\r\n private _cellId: number = -1;\r\n\r\n private _sliceLeft: number;\r\n private _sliceRight: number;\r\n private _sliceTop: number;\r\n private _sliceBottom: number;\r\n\r\n private _populateNinePatchSlicesFromImage = false;\r\n\r\n private _detectPointerOnOpaqueOnly: boolean;\r\n\r\n private _imageDataCache: {\r\n data: Uint8ClampedArray | null;\r\n key: string;\r\n } = { data: null, key: \"\" };\r\n\r\n /**\r\n * Cache of images to avoid loading the same image multiple times\r\n */\r\n public static SourceImgCache = new Map<string, { img: IImage; timesUsed: number; loaded: boolean; waitingForLoadCallback: Array<() => void> }>();\r\n\r\n /**\r\n * Observable notified when the content is loaded\r\n */\r\n public onImageLoadedObservable = new Observable<Image>();\r\n\r\n /**\r\n * Observable notified when _sourceLeft, _sourceTop, _sourceWidth and _sourceHeight are computed\r\n */\r\n public onSVGAttributesComputedObservable = new Observable<Image>();\r\n\r\n /**\r\n * Gets or sets the referrer policy to apply on the img element load request.\r\n * You should set referrerPolicy before set the source of the image if you want to ensure the header will be present on the xhr loading request\r\n */\r\n public referrerPolicy: Nullable<ReferrerPolicy>;\r\n\r\n /**\r\n * Gets a boolean indicating that the content is loaded\r\n */\r\n public get isLoaded(): boolean {\r\n return this._loaded;\r\n }\r\n\r\n public override isReady(): boolean {\r\n return this.isLoaded;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if pointers should only be validated on pixels with alpha > 0.\r\n * Beware using this as this will consume more memory as the image has to be stored twice\r\n */\r\n @serialize()\r\n public get detectPointerOnOpaqueOnly(): boolean {\r\n return this._detectPointerOnOpaqueOnly;\r\n }\r\n\r\n public set detectPointerOnOpaqueOnly(value: boolean) {\r\n if (this._detectPointerOnOpaqueOnly === value) {\r\n return;\r\n }\r\n\r\n this._detectPointerOnOpaqueOnly = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the left value for slicing (9-patch)\r\n */\r\n @serialize()\r\n public get sliceLeft(): number {\r\n return this._sliceLeft;\r\n }\r\n\r\n public set sliceLeft(value: number) {\r\n if (this._sliceLeft === value) {\r\n return;\r\n }\r\n\r\n this._sliceLeft = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the right value for slicing (9-patch)\r\n */\r\n @serialize()\r\n public get sliceRight(): number {\r\n return this._sliceRight;\r\n }\r\n\r\n public set sliceRight(value: number) {\r\n if (this._sliceRight === value) {\r\n return;\r\n }\r\n\r\n this._sliceRight = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the top value for slicing (9-patch)\r\n */\r\n @serialize()\r\n public get sliceTop(): number {\r\n return this._sliceTop;\r\n }\r\n\r\n public set sliceTop(value: number) {\r\n if (this._sliceTop === value) {\r\n return;\r\n }\r\n\r\n this._sliceTop = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the bottom value for slicing (9-patch)\r\n */\r\n @serialize()\r\n public get sliceBottom(): number {\r\n return this._sliceBottom;\r\n }\r\n\r\n public set sliceBottom(value: number) {\r\n if (this._sliceBottom === value) {\r\n return;\r\n }\r\n\r\n this._sliceBottom = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the left coordinate in the source image\r\n */\r\n @serialize()\r\n public get sourceLeft(): number {\r\n return this._sourceLeft;\r\n }\r\n\r\n public set sourceLeft(value: number) {\r\n if (this._sourceLeft === value) {\r\n return;\r\n }\r\n\r\n this._sourceLeft = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the top coordinate in the source image\r\n */\r\n @serialize()\r\n public get sourceTop(): number {\r\n return this._sourceTop;\r\n }\r\n\r\n public set sourceTop(value: number) {\r\n if (this._sourceTop === value) {\r\n return;\r\n }\r\n\r\n this._sourceTop = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the width to capture in the source image\r\n */\r\n @serialize()\r\n public get sourceWidth(): number {\r\n return this._sourceWidth;\r\n }\r\n\r\n public set sourceWidth(value: number) {\r\n if (this._sourceWidth === value) {\r\n return;\r\n }\r\n\r\n this._sourceWidth = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the height to capture in the source image\r\n */\r\n @serialize()\r\n public get sourceHeight(): number {\r\n return this._sourceHeight;\r\n }\r\n\r\n public set sourceHeight(value: number) {\r\n if (this._sourceHeight === value) {\r\n return;\r\n }\r\n\r\n this._sourceHeight = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets the image width\r\n */\r\n public get imageWidth(): number {\r\n return this._imageWidth;\r\n }\r\n\r\n /**\r\n * Gets the image height\r\n */\r\n public get imageHeight(): number {\r\n return this._imageHeight;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if nine patch slices (left, top, right, bottom) should be read from image data\r\n */\r\n @serialize()\r\n public get populateNinePatchSlicesFromImage(): boolean {\r\n return this._populateNinePatchSlicesFromImage;\r\n }\r\n\r\n public set populateNinePatchSlicesFromImage(value: boolean) {\r\n if (this._populateNinePatchSlicesFromImage === value) {\r\n return;\r\n }\r\n\r\n this._populateNinePatchSlicesFromImage = value;\r\n\r\n if (this._populateNinePatchSlicesFromImage && this._loaded) {\r\n this._extractNinePatchSliceDataFromImage();\r\n }\r\n }\r\n\r\n /** Indicates if the format of the image is SVG */\r\n public get isSVG(): boolean {\r\n return this._isSVG;\r\n }\r\n\r\n /** Gets the status of the SVG attributes computation (sourceLeft, sourceTop, sourceWidth, sourceHeight) */\r\n public get svgAttributesComputationCompleted(): boolean {\r\n return this._svgAttributesComputationCompleted;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the image can force its container to adapt its size\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image\r\n */\r\n @serialize()\r\n public get autoScale(): boolean {\r\n return this._autoScale;\r\n }\r\n\r\n public set autoScale(value: boolean) {\r\n if (this._autoScale === value) {\r\n return;\r\n }\r\n\r\n this._autoScale = value;\r\n\r\n if (value && this._loaded) {\r\n this.synchronizeSizeWithContent();\r\n }\r\n }\r\n\r\n /** Gets or sets the stretching mode used by the image */\r\n @serialize()\r\n public get stretch(): number {\r\n return this._stretch;\r\n }\r\n\r\n public set stretch(value: number) {\r\n if (this._stretch === value) {\r\n return;\r\n }\r\n\r\n this._stretch = value;\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _rotate90(n: number, preserveProperties: boolean = false): Image {\r\n const width = this._domImage.width;\r\n const height = this._domImage.height;\r\n\r\n // Should abstract platform instead of using LastCreatedEngine\r\n const engine = this._host?.getScene()?.getEngine() || EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n const canvas = engine.createCanvas(height, width);\r\n\r\n const context = canvas.getContext(\"2d\");\r\n\r\n context.translate(canvas.width / 2, canvas.height / 2);\r\n context.rotate((n * Math.PI) / 2);\r\n\r\n context.drawImage(this._domImage, 0, 0, width, height, -width / 2, -height / 2, width, height);\r\n\r\n const dataUrl: string = canvas.toDataURL(\"image/jpg\");\r\n const rotatedImage = new Image(this.name + \"rotated\", dataUrl);\r\n\r\n if (preserveProperties) {\r\n rotatedImage._stretch = this._stretch;\r\n rotatedImage._autoScale = this._autoScale;\r\n rotatedImage._cellId = this._cellId;\r\n rotatedImage._cellWidth = n % 1 ? this._cellHeight : this._cellWidth;\r\n rotatedImage._cellHeight = n % 1 ? this._cellWidth : this._cellHeight;\r\n }\r\n\r\n this._handleRotationForSVGImage(this, rotatedImage, n);\r\n\r\n this._imageDataCache.data = null;\r\n\r\n return rotatedImage;\r\n }\r\n\r\n private _handleRotationForSVGImage(srcImage: Image, dstImage: Image, n: number): void {\r\n if (!srcImage._isSVG) {\r\n return;\r\n }\r\n\r\n if (srcImage._svgAttributesComputationCompleted) {\r\n this._rotate90SourceProperties(srcImage, dstImage, n);\r\n this._markAsDirty();\r\n } else {\r\n srcImage.onSVGAttributesComputedObservable.addOnce(() => {\r\n this._rotate90SourceProperties(srcImage, dstImage, n);\r\n this._markAsDirty();\r\n });\r\n }\r\n }\r\n\r\n private _rotate90SourceProperties(srcImage: Image, dstImage: Image, n: number): void {\r\n let srcLeft = srcImage.sourceLeft,\r\n srcTop = srcImage.sourceTop,\r\n srcWidth = srcImage.domImage.width,\r\n srcHeight = srcImage.domImage.height;\r\n\r\n let dstLeft = srcLeft,\r\n dstTop = srcTop,\r\n dstWidth = srcImage.sourceWidth,\r\n dstHeight = srcImage.sourceHeight;\r\n\r\n if (n != 0) {\r\n const mult = n < 0 ? -1 : 1;\r\n n = n % 4;\r\n for (let i = 0; i < Math.abs(n); ++i) {\r\n dstLeft = -(srcTop - srcHeight / 2) * mult + srcHeight / 2;\r\n dstTop = (srcLeft - srcWidth / 2) * mult + srcWidth / 2;\r\n [dstWidth, dstHeight] = [dstHeight, dstWidth];\r\n if (n < 0) {\r\n dstTop -= dstHeight;\r\n } else {\r\n dstLeft -= dstWidth;\r\n }\r\n srcLeft = dstLeft;\r\n srcTop = dstTop;\r\n [srcWidth, srcHeight] = [srcHeight, srcWidth];\r\n }\r\n }\r\n\r\n dstImage.sourceLeft = dstLeft;\r\n dstImage.sourceTop = dstTop;\r\n dstImage.sourceWidth = dstWidth;\r\n dstImage.sourceHeight = dstHeight;\r\n }\r\n\r\n private _extractNinePatchSliceDataFromImage() {\r\n const width = this._domImage.width;\r\n const height = this._domImage.height;\r\n\r\n if (!this._workingCanvas) {\r\n const engine = this._host?.getScene()?.getEngine() || EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n this._workingCanvas = engine.createCanvas(width, height);\r\n }\r\n const canvas = this._workingCanvas;\r\n const context = canvas.getContext(\"2d\");\r\n\r\n context.drawImage(this._domImage, 0, 0, width, height);\r\n const imageData = context.getImageData(0, 0, width, height);\r\n\r\n // Left and right\r\n this._sliceLeft = -1;\r\n this._sliceRight = -1;\r\n for (let x = 0; x < width; x++) {\r\n const alpha = imageData.data[x * 4 + 3];\r\n\r\n if (alpha > 127 && this._sliceLeft === -1) {\r\n this._sliceLeft = x;\r\n continue;\r\n }\r\n\r\n if (alpha < 127 && this._sliceLeft > -1) {\r\n this._sliceRight = x;\r\n break;\r\n }\r\n }\r\n\r\n // top and bottom\r\n this._sliceTop = -1;\r\n this._sliceBottom = -1;\r\n for (let y = 0; y < height; y++) {\r\n const alpha = imageData.data[y * width * 4 + 3];\r\n\r\n if (alpha > 127 && this._sliceTop === -1) {\r\n this._sliceTop = y;\r\n continue;\r\n }\r\n\r\n if (alpha < 127 && this._sliceTop > -1) {\r\n this._sliceBottom = y;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the internal DOM image used to render the control\r\n */\r\n public set domImage(value: IImage) {\r\n this._domImage = value;\r\n this._loaded = false;\r\n this._imageDataCache.data = null;\r\n\r\n if (this._domImage.width) {\r\n this._onImageLoaded();\r\n } else {\r\n this._domImage.onload = () => {\r\n this._onImageLoaded();\r\n };\r\n }\r\n }\r\n\r\n public get domImage(): IImage {\r\n return this._domImage;\r\n }\r\n\r\n private _onImageLoaded(): void {\r\n this._imageDataCache.data = null;\r\n this._imageWidth = this._domImage.width;\r\n this._imageHeight = this._domImage.height;\r\n this._loaded = true;\r\n\r\n if (this._populateNinePatchSlicesFromImage) {\r\n this._extractNinePatchSliceDataFromImage();\r\n }\r\n\r\n if (this._autoScale) {\r\n this.synchronizeSizeWithContent();\r\n }\r\n\r\n this.onImageLoadedObservable.notifyObservers(this);\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets the image source url\r\n */\r\n @serialize()\r\n public get source() {\r\n return this._source;\r\n }\r\n\r\n /**\r\n * Resets the internal Image Element cache. Can reduce memory usage.\r\n */\r\n public static ResetImageCache() {\r\n Image.SourceImgCache.clear();\r\n }\r\n\r\n private _removeCacheUsage(source: Nullable<string>) {\r\n const value = source && Image.SourceImgCache.get(source);\r\n if (value) {\r\n value.timesUsed -= 1;\r\n\r\n // Remove from DOM\r\n const htmlElement = value.img as HTMLImageElement;\r\n if (htmlElement.parentNode) {\r\n htmlElement.parentNode.removeChild(htmlElement);\r\n }\r\n\r\n // Since the image isn't being used anymore, we can clean it from the cache\r\n if (value.timesUsed === 0) {\r\n Image.SourceImgCache.delete(source);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets image source url\r\n */\r\n public set source(value: Nullable<string>) {\r\n if (this._urlRewriter && value) {\r\n value = this._urlRewriter(value);\r\n }\r\n\r\n if (this._source === value) {\r\n return;\r\n }\r\n\r\n this._removeCacheUsage(this._source);\r\n\r\n this._loaded = false;\r\n this._source = value;\r\n this._imageDataCache.data = null;\r\n\r\n if (value) {\r\n value = this._svgCheck(value);\r\n }\r\n\r\n // Should abstract platform instead of using LastCreatedEngine\r\n const engine = this._host?.getScene()?.getEngine() || EngineStore.LastCreatedEngine;\r\n // If no engine, skip all other DOM operations.\r\n if (!engine) {\r\n return;\r\n }\r\n if (value && Image.SourceImgCache.has(value)) {\r\n const cachedData = Image.SourceImgCache.get(value)!;\r\n this._domImage = cachedData.img;\r\n cachedData.timesUsed += 1;\r\n if (cachedData.loaded) {\r\n this._onImageLoaded();\r\n } else {\r\n cachedData.waitingForLoadCallback.push(this._onImageLoaded.bind(this));\r\n }\r\n return;\r\n }\r\n this._domImage = engine.createCanvasImage();\r\n // need to add to enforce rendering\r\n const imgElement = this._domImage as HTMLImageElement;\r\n let addedToDom = false;\r\n if (imgElement.style && this._source?.endsWith(\".svg\")) {\r\n imgElement.style.visibility = \"hidden\";\r\n imgElement.style.position = \"absolute\";\r\n imgElement.style.top = \"0\";\r\n engine.getRenderingCanvas()?.parentNode?.appendChild(imgElement);\r\n addedToDom = true;\r\n }\r\n\r\n if (value) {\r\n Image.SourceImgCache.set(value, { img: this._domImage, timesUsed: 1, loaded: false, waitingForLoadCallback: [this._onImageLoaded.bind(this)] });\r\n }\r\n\r\n this._domImage.onload = () => {\r\n if (value) {\r\n const cachedData = Image.SourceImgCache.get(value);\r\n if (cachedData) {\r\n cachedData.loaded = true;\r\n for (const waitingCallback of cachedData.waitingForLoadCallback) {\r\n waitingCallback();\r\n }\r\n cachedData.waitingForLoadCallback.length = 0;\r\n addedToDom && imgElement.remove();\r\n return;\r\n }\r\n }\r\n this._onImageLoaded();\r\n addedToDom && imgElement.remove();\r\n };\r\n if (value) {\r\n Tools.SetCorsBehavior(value, this._domImage);\r\n Tools.SetReferrerPolicyBehavior(this.referrerPolicy, this._domImage);\r\n this._domImage.src = value;\r\n }\r\n }\r\n\r\n private _sanitizeSVG(svgString: string) {\r\n if (svgString.indexOf(\"<svg\") === -1) {\r\n return svgString; // Not an SVG, return as is\r\n }\r\n\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(svgString, \"image/svg+xml\");\r\n\r\n const dangerousTags = [\"script\", \"iframe\", \"foreignObject\", \"object\", \"embed\", \"link\", \"style\"];\r\n const dangerousAttrs = [/^on/i, /^xlink:href$/, /^href$/];\r\n\r\n // Remove dangerous elements\r\n dangerousTags.forEach((tag) => {\r\n const elements = doc.getElementsByTagName(tag);\r\n for (let i = elements.length - 1; i >= 0; i--) {\r\n elements[i].remove();\r\n }\r\n });\r\n\r\n // Recursively sanitize attributes\r\n function sanitizeElement(el: Element) {\r\n if (el.attributes) {\r\n for (let i = el.attributes.length - 1; i >= 0; i--) {\r\n const attr = el.attributes[i];\r\n const name = attr.name;\r\n const value = attr.value;\r\n\r\n // Remove dangerous attributes\r\n if (dangerousAttrs.some((regex) => regex.test(name))) {\r\n el.removeAttribute(name);\r\n }\r\n\r\n // Remove javascript: links\r\n if (typeof value === \"string\" && value.trim().toLowerCase().startsWith(\"javascript:\")) {\r\n el.removeAttribute(name);\r\n }\r\n }\r\n }\r\n\r\n // Recursively sanitize children\r\n for (let i = 0; i < el.children.length; i++) {\r\n sanitizeElement(el.children[i]);\r\n }\r\n }\r\n\r\n sanitizeElement(doc.documentElement);\r\n\r\n return new XMLSerializer().serializeToString(doc);\r\n }\r\n\r\n /**\r\n * Checks for svg document with icon id present\r\n * @param value the source svg\r\n * @returns the svg\r\n */\r\n private _svgCheck(value: string): string {\r\n // Skip SVG processing if no window/document or SVG support\r\n if (typeof window === \"undefined\" || typeof document === \"undefined\" || !window.SVGSVGElement) {\r\n return value;\r\n }\r\n\r\n if (window.SVGSVGElement && value.search(/(\\.svg|\\.svg?[?|#].*)$/gi) !== -1 && value.indexOf(\"#\") === value.lastIndexOf(\"#\")) {\r\n this._isSVG = true;\r\n value = this._sanitizeSVG(value);\r\n const svgsrc = value.split(\"#\")[0];\r\n const elemid = value.split(\"#\")[1];\r\n // check if object alr exist in document\r\n const svgExist = <HTMLObjectElement>document.body.querySelector('object[data=\"' + svgsrc + '\"]');\r\n if (svgExist) {\r\n const svgDoc = svgExist.contentDocument;\r\n // get viewbox width and height, get svg document width and height in px\r\n if (svgDoc && svgDoc.documentElement) {\r\n const vb = svgDoc.documentElement.getAttribute(\"viewBox\");\r\n const docwidth = Number(svgDoc.documentElement.getAttribute(\"width\"));\r\n const docheight = Number(svgDoc.documentElement.getAttribute(\"height\"));\r\n const elem = <SVGGraphicsElement>(<unknown>svgDoc.getElementById(elemid));\r\n if (elem && vb && docwidth && docheight) {\r\n this._getSVGAttribs(svgExist, elemid);\r\n return value;\r\n }\r\n }\r\n\r\n // wait for object to load\r\n svgExist.addEventListener(\"load\", () => {\r\n this._getSVGAttribs(svgExist, elemid);\r\n });\r\n } else {\r\n // create document object\r\n const svgImage = document.createElement(\"object\");\r\n svgImage.data = svgsrc;\r\n svgImage.type = \"image/svg+xml\";\r\n svgImage.width = \"0%\";\r\n svgImage.height = \"0%\";\r\n document.body.appendChild(svgImage);\r\n // when the object has loaded, get the element attribs\r\n svgImage.onload = () => {\r\n const svgobj = <HTMLObjectElement>document.body.querySelector('object[data=\"' + svgsrc + '\"]');\r\n if (svgobj) {\r\n this._getSVGAttribs(svgobj, elemid);\r\n }\r\n };\r\n }\r\n return svgsrc;\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n /**\r\n * Sets sourceLeft, sourceTop, sourceWidth, sourceHeight automatically\r\n * given external svg file and icon id\r\n * @param svgsrc\r\n * @param elemid\r\n */\r\n private _getSVGAttribs(svgsrc: HTMLObjectElement, elemid: string) {\r\n const svgDoc = svgsrc.contentDocument;\r\n // get viewbox width and height, get svg document width and height in px\r\n if (svgDoc && svgDoc.documentElement) {\r\n const vb = svgDoc.documentElement.getAttribute(\"viewBox\");\r\n const docwidth = Number(svgDoc.documentElement.getAttribute(\"width\"));\r\n const docheight = Number(svgDoc.documentElement.getAttribute(\"height\"));\r\n // get element bbox and matrix transform\r\n const elem = svgDoc.getElementById(elemid) as Nullable<SVGGraphicsElement>;\r\n if (vb && docwidth && docheight && elem) {\r\n const vbWidth = Number(vb.split(\" \")[2]);\r\n const vbHeight = Number(vb.split(\" \")[3]);\r\n const elemBbox = elem.getBBox();\r\n let elemMatrixA = 1;\r\n let elemMatrixD = 1;\r\n let elemMatrixE = 0;\r\n let elemMatrixF = 0;\r\n const consolidatedTransform = elem.transform?.baseVal.consolidate();\r\n if (consolidatedTransform) {\r\n const mainMatrix = consolidatedTransform.matrix;\r\n elemMatrixA = mainMatrix.a;\r\n elemMatrixD = mainMatrix.d;\r\n elemMatrixE = mainMatrix.e;\r\n elemMatrixF = mainMatrix.f;\r\n }\r\n\r\n // compute source coordinates and dimensions\r\n this.sourceLeft = ((elemMatrixA * elemBbox.x + elemMatrixE) * docwidth) / vbWidth;\r\n this.sourceTop = ((elemMatrixD * elemBbox.y + elemMatrixF) * docheight) / vbHeight;\r\n this.sourceWidth = elemBbox.width * elemMatrixA * (docwidth / vbWidth);\r\n this.sourceHeight = elemBbox.height * elemMatrixD * (docheight / vbHeight);\r\n this._svgAttributesComputationCompleted = true;\r\n this.onSVGAttributesComputedObservable.notifyObservers(this);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the cell width to use when animation sheet is enabled\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image\r\n */\r\n @serialize()\r\n get cellWidth(): number {\r\n return this._cellWidth;\r\n }\r\n set cellWidth(value: number) {\r\n if (this._cellWidth === value) {\r\n return;\r\n }\r\n\r\n this._cellWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the cell height to use when animation sheet is enabled\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image\r\n */\r\n @serialize()\r\n get cellHeight(): number {\r\n return this._cellHeight;\r\n }\r\n set cellHeight(value: number) {\r\n if (this._cellHeight === value) {\r\n return;\r\n }\r\n\r\n this._cellHeight = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets the cell id to use (this will turn on the animation sheet mode)\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image\r\n */\r\n @serialize()\r\n get cellId(): number {\r\n return this._cellId;\r\n }\r\n set cellId(value: number) {\r\n if (this._cellId === value) {\r\n return;\r\n }\r\n\r\n this._cellId = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Creates a new Image\r\n * @param name defines the control name\r\n * @param url defines the image url\r\n */\r\n constructor(\r\n public override name?: string,\r\n url: Nullable<string> = null\r\n ) {\r\n super(name);\r\n this.source = url;\r\n }\r\n\r\n /**\r\n * Tests if a given coordinates belong to the current control\r\n * @param x defines x coordinate to test\r\n * @param y defines y coordinate to test\r\n * @returns true if the coordinates are inside the control\r\n */\r\n public override contains(x: number, y: number): boolean {\r\n if (!super.contains(x, y)) {\r\n return false;\r\n }\r\n\r\n if (!this._detectPointerOnOpaqueOnly || !this._workingCanvas) {\r\n return true;\r\n }\r\n\r\n const width = this._currentMeasure.width | 0;\r\n const height = this._currentMeasure.height | 0;\r\n const key = width + \"_\" + height;\r\n\r\n let imageData = this._imageDataCache.data;\r\n\r\n if (!imageData || this._imageDataCache.key !== key) {\r\n const canvas = this._workingCanvas;\r\n const context = canvas.getContext(\"2d\");\r\n\r\n this._imageDataCache.data = imageData = context.getImageData(0, 0, width, height).data;\r\n this._imageDataCache.key = key;\r\n }\r\n\r\n x = (x - this._currentMeasure.left) | 0;\r\n y = (y - this._currentMeasure.top) | 0;\r\n\r\n const pickedPixel = imageData[(x + y * width) * 4 + 3];\r\n\r\n return pickedPixel > 0;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"Image\";\r\n }\r\n\r\n /** Force the control to synchronize with its content */\r\n public synchronizeSizeWithContent() {\r\n if (!this._loaded) {\r\n return;\r\n }\r\n\r\n this.width = this._domImage.width + \"px\";\r\n this.height = this._domImage.height + \"px\";\r\n }\r\n\r\n protected override _processMeasures(parentMeasure: Measure, context: ICanvasRenderingContext): void {\r\n if (this._loaded) {\r\n switch (this._stretch) {\r\n case Image.STRETCH_NONE:\r\n break;\r\n case Image.STRETCH_FILL:\r\n break;\r\n case Image.STRETCH_UNIFORM:\r\n break;\r\n case Image.STRETCH_NINE_PATCH:\r\n break;\r\n case Image.STRETCH_EXTEND:\r\n if (this._autoScale) {\r\n this.synchronizeSizeWithContent();\r\n }\r\n if (this.parent && this.parent.parent) {\r\n // Will update root size if root is not the top root\r\n this.parent.adaptWidthToChildren = true;\r\n this.parent.adaptHeightToChildren = true;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n super._processMeasures(parentMeasure, context);\r\n }\r\n\r\n private _prepareWorkingCanvasForOpaqueDetection() {\r\n if (!this._detectPointerOnOpaqueOnly) {\r\n return;\r\n }\r\n\r\n const width = this._currentMeasure.width;\r\n const height = this._currentMeasure.height;\r\n\r\n if (!this._workingCanvas) {\r\n const engine = this._host?.getScene()?.getEngine() || EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n this._workingCanvas = engine.createCanvas(width, height);\r\n }\r\n const canvas = this._workingCanvas;\r\n\r\n const context = canvas.getContext(\"2d\");\r\n\r\n context.clearRect(0, 0, width, height);\r\n }\r\n\r\n private _drawImage(context: ICanvasRenderingContext, sx: number, sy: number, sw: number, sh: number, tx: number, ty: number, tw: number, th: number) {\r\n context.drawImage(this._domImage, sx, sy, sw, sh, tx, ty, tw, th);\r\n\r\n if (!this._detectPointerOnOpaqueOnly) {\r\n return;\r\n }\r\n\r\n const transform = context.getTransform();\r\n\r\n const canvas = this._workingCanvas!;\r\n const workingCanvasContext = canvas.getContext(\"2d\");\r\n workingCanvasContext.save();\r\n const ttx = tx - this._currentMeasure.left;\r\n const tty = ty - this._currentMeasure.top;\r\n workingCanvasContext.setTransform(transform.a, transform.b, transform.c, transform.d, (ttx + tw) / 2, (tty + th) / 2);\r\n workingCanvasContext.translate(-(ttx + tw) / 2, -(tty + th) / 2);\r\n\r\n workingCanvasContext.drawImage(this._domImage, sx, sy, sw, sh, ttx, tty, tw, th);\r\n workingCanvasContext.restore();\r\n }\r\n\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;\r\n context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;\r\n }\r\n\r\n let x, y, width, height;\r\n if (this.cellId == -1) {\r\n x = this._sourceLeft;\r\n y = this._sourceTop;\r\n\r\n width = this._sourceWidth ? this._sourceWidth : this._imageWidth;\r\n height = this._sourceHeight ? this._sourceHeight : this._imageHeight;\r\n } else {\r\n const rowCount = this._domImage.naturalWidth / this.cellWidth;\r\n const column = (this.cellId / rowCount) >> 0;\r\n const row = this.cellId % rowCount;\r\n\r\n x = this.cellWidth * row;\r\n y = this.cellHeight * column;\r\n width = this.cellWidth;\r\n height = this.cellHeight;\r\n }\r\n\r\n this._prepareWorkingCanvasForOpaqueDetection();\r\n\r\n this._applyStates(context);\r\n if (this._loaded) {\r\n switch (this._stretch) {\r\n case Image.STRETCH_NONE:\r\n this._drawImage(context, x, y, width, height, this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n break;\r\n case Image.STRETCH_FILL:\r\n this._drawImage(context, x, y, width, height, this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n break;\r\n case Image.STRETCH_UNIFORM: {\r\n const hRatio = this._currentMeasure.width / width;\r\n const vRatio = this._currentMeasure.height / height;\r\n const ratio = Math.min(hRatio, vRatio);\r\n const centerX = (this._currentMeasure.width - width * ratio) / 2;\r\n const centerY = (this._currentMeasure.height - height * ratio) / 2;\r\n\r\n this._drawImage(context, x, y, width, height, this._currentMeasure.left + centerX, this._currentMeasure.top + centerY, width * ratio, height * ratio);\r\n break;\r\n }\r\n case Image.STRETCH_EXTEND:\r\n this._drawImage(context, x, y, width, height, this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n break;\r\n case Image.STRETCH_NINE_PATCH:\r\n this._renderNinePatch(context, x, y, width, height);\r\n break;\r\n }\r\n }\r\n\r\n context.restore();\r\n }\r\n\r\n private _renderNinePatch(context: ICanvasRenderingContext, sx: number, sy: number, sw: number, sh: number): void {\r\n const idealRatio = this.host.idealRatio;\r\n const leftWidth = this._sliceLeft;\r\n const topHeight = this._sliceTop;\r\n const bottomHeight = sh - this._sliceBottom;\r\n const rightWidth = sw - this._sliceRight;\r\n const centerWidth = this._sliceRight - this._sliceLeft;\r\n const centerHeight = this._sliceBottom - this._sliceTop;\r\n const leftWidthAdjusted = Math.round(leftWidth * idealRatio);\r\n const topHeightAdjusted = Math.round(topHeight * idealRatio);\r\n const bottomHeightAdjusted = Math.round(bottomHeight * idealRatio);\r\n const rightWidthAdjusted = Math.round(rightWidth * idealRatio);\r\n const targetCenterWidth = Math.round(this._currentMeasure.width) - rightWidthAdjusted - leftWidthAdjusted + 2;\r\n const targetCenterHeight = Math.round(this._currentMeasure.height) - bottomHeightAdjusted - topHeightAdjusted + 2;\r\n const centerLeftOffset = Math.round(this._currentMeasure.left) + leftWidthAdjusted - 1;\r\n const centerTopOffset = Math.round(this._currentMeasure.top) + topHeightAdjusted - 1;\r\n const rightOffset = Math.round(this._currentMeasure.left + this._currentMeasure.width) - rightWidthAdjusted;\r\n const bottomOffset = Math.round(this._currentMeasure.top + this._currentMeasure.height) - bottomHeightAdjusted;\r\n\r\n //Top Left\r\n this._drawImage(context, sx, sy, leftWidth, topHeight, this._currentMeasure.left, this._currentMeasure.top, leftWidthAdjusted, topHeightAdjusted);\r\n //Top\r\n this._drawImage(context, sx + this._sliceLeft, sy, centerWidth, topHeight, centerLeftOffset + 1, this._currentMeasure.top, targetCenterWidth - 2, topHeightAdjusted);\r\n //Top Right\r\n this._drawImage(context, sx + this._sliceRight, sy, rightWidth, topHeight, rightOffset, this._currentMeasure.top, rightWidthAdjusted, topHeightAdjusted);\r\n //Left\r\n this._drawImage(context, sx, sy + this._sliceTop, leftWidth, centerHeight, this._currentMeasure.left, centerTopOffset + 1, leftWidthAdjusted, targetCenterHeight - 2);\r\n // Center\r\n this._drawImage(\r\n context,\r\n sx + this._sliceLeft,\r\n sy + this._sliceTop,\r\n centerWidth,\r\n centerHeight,\r\n centerLeftOffset + 1,\r\n centerTopOffset + 1,\r\n targetCenterWidth - 2,\r\n targetCenterHeight - 2\r\n );\r\n //Right\r\n this._drawImage(\r\n context,\r\n sx + this._sliceRight,\r\n sy + this._sliceTop,\r\n rightWidth,\r\n centerHeight,\r\n rightOffset,\r\n centerTopOffset + 1,\r\n rightWidthAdjusted,\r\n targetCenterHeight - 2\r\n );\r\n //Bottom Left\r\n this._drawImage(context, sx, sy + this._sliceBottom, leftWidth, bottomHeight, this._currentMeasure.left, bottomOffset, leftWidthAdjusted, bottomHeightAdjusted);\r\n //Bottom\r\n this._drawImage(\r\n context,\r\n sx + this.sliceLeft,\r\n sy + this._sliceBottom,\r\n centerWidth,\r\n bottomHeight,\r\n centerLeftOffset + 1,\r\n bottomOffset,\r\n targetCenterWidth - 2,\r\n bottomHeightAdjusted\r\n );\r\n //Bottom Right\r\n this._drawImage(context, sx + this._sliceRight, sy + this._sliceBottom, rightWidth, bottomHeight, rightOffset, bottomOffset, rightWidthAdjusted, bottomHeightAdjusted);\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this.onImageLoadedObservable.clear();\r\n this.onSVGAttributesComputedObservable.clear();\r\n this._removeCacheUsage(this._source);\r\n }\r\n\r\n // Static\r\n /** STRETCH_NONE */\r\n public static readonly STRETCH_NONE = 0;\r\n /** STRETCH_FILL */\r\n public static readonly STRETCH_FILL = 1;\r\n /** STRETCH_UNIFORM */\r\n public static readonly STRETCH_UNIFORM = 2;\r\n /** STRETCH_EXTEND */\r\n public static readonly STRETCH_EXTEND = 3;\r\n /** NINE_PATCH */\r\n public static readonly STRETCH_NINE_PATCH = 4;\r\n}\r\nRegisterClass(\"BABYLON.GUI.Image\", Image);\r\n"]}
|