@babylonjs/gui 9.16.2 → 9.17.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.
|
@@ -795,8 +795,15 @@ let InputText = (() => {
|
|
|
795
795
|
//get the cached data; returns blank string by default
|
|
796
796
|
data = this._host.clipboardData;
|
|
797
797
|
}
|
|
798
|
-
|
|
799
|
-
|
|
798
|
+
if (this.isTextHighlightOn) {
|
|
799
|
+
this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex, data);
|
|
800
|
+
this._cursorOffset = this._textWrapper.length - (this._startHighlightIndex + data.length);
|
|
801
|
+
this.isTextHighlightOn = false;
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
const insertPosition = this._textWrapper.length - this._cursorOffset;
|
|
805
|
+
this._textWrapper.removePart(insertPosition, insertPosition, data);
|
|
806
|
+
}
|
|
800
807
|
this._textHasChanged();
|
|
801
808
|
}
|
|
802
809
|
_draw(context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputText.pure.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/inputText.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type Observer, Observable } from \"core/Misc/observable\";\r\nimport { type Vector2 } from \"core/Maths/math.vector.pure\";\r\nimport { type ClipboardInfo, ClipboardEventTypes } from \"core/Events/clipboardEvents\";\r\nimport { type PointerInfo, type PointerInfoBase, PointerEventTypes } from \"core/Events/pointerEvents\";\r\n\r\nimport { Control } from \"./control.pure\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport { type VirtualKeyboard } from \"./virtualKeyboard.pure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { TextWrapper } from \"./textWrapper\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { type IKeyboardEvent, type IPointerEvent } from \"core/Events/deviceInputEvents\";\r\nimport { type ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/**\r\n * Class used to create input text control\r\n */\r\nexport class InputText extends Control {\r\n protected _textWrapper: TextWrapper;\r\n protected _placeholderText = \"\";\r\n protected _background = \"#222222\";\r\n protected _focusedBackground = \"#000000\";\r\n protected _placeholderColor = \"gray\";\r\n protected _thickness = 1;\r\n protected _margin = new ValueAndUnit(10, ValueAndUnit.UNITMODE_PIXEL);\r\n protected _autoStretchWidth = true;\r\n protected _maxWidth = new ValueAndUnit(1, ValueAndUnit.UNITMODE_PERCENTAGE, false);\r\n /** the type of device that most recently focused the input: \"mouse\", \"touch\" or \"pen\" */\r\n protected _focusedBy: string;\r\n protected _blinkTimeout: number;\r\n protected _blinkIsEven = false;\r\n private _cursorOffset = 0;\r\n protected _scrollLeft: Nullable<number>;\r\n protected _textWidth: number;\r\n protected _clickedCoordinate: Nullable<number>;\r\n protected _deadKey = false;\r\n protected _addKey = true;\r\n protected _currentKey = \"\";\r\n protected _isTextHighlightOn = false;\r\n protected _textHighlightColor = \"#d5e0ff\";\r\n protected _highlighterOpacity = 0.4;\r\n protected _highlightedText = \"\";\r\n private _startHighlightIndex = 0;\r\n private _endHighlightIndex = 0;\r\n private _cursorIndex = -1;\r\n private _outlineWidth: number = 0;\r\n private _outlineColor: string = \"white\";\r\n protected _onFocusSelectAll = false;\r\n protected _isPointerDown = false;\r\n protected _onClipboardObserver: Nullable<Observer<ClipboardInfo>>;\r\n protected _onPointerDblTapObserver: Nullable<Observer<PointerInfo>>;\r\n\r\n /** @internal */\r\n public _connectedVirtualKeyboard: Nullable<VirtualKeyboard>;\r\n\r\n /** Gets or sets a string representing the message displayed on mobile when the control gets the focus */\r\n @serialize()\r\n public promptMessage = \"Please enter text:\";\r\n /** Force disable prompt on mobile device */\r\n @serialize()\r\n public disableMobilePrompt = false;\r\n\r\n /**\r\n * Gets or sets outlineWidth of the text to display\r\n */\r\n public get outlineWidth(): number {\r\n return this._outlineWidth;\r\n }\r\n\r\n public set outlineWidth(value: number) {\r\n if (this._outlineWidth === value) {\r\n return;\r\n }\r\n this._outlineWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets outlineColor of the text to display\r\n */\r\n public get outlineColor(): string {\r\n return this._outlineColor;\r\n }\r\n\r\n public set outlineColor(value: string) {\r\n if (this._outlineColor === value) {\r\n return;\r\n }\r\n this._outlineColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Observable raised when the text changes */\r\n public onTextChangedObservable = new Observable<InputText>();\r\n /** Observable raised just before an entered character is to be added */\r\n public onBeforeKeyAddObservable = new Observable<InputText>();\r\n /** Observable raised when the text is highlighted */\r\n public onTextHighlightObservable = new Observable<InputText>();\r\n /** Observable raised when copy event is triggered */\r\n public onTextCopyObservable = new Observable<InputText>();\r\n /** Observable raised when cut event is triggered */\r\n public onTextCutObservable = new Observable<InputText>();\r\n /** Observable raised when paste event is triggered */\r\n public onTextPasteObservable = new Observable<InputText>();\r\n\r\n /** Gets or sets the maximum width allowed by the control */\r\n @serialize()\r\n public get maxWidth(): string | number {\r\n return this._maxWidth.toString(this._host);\r\n }\r\n\r\n /** Gets the maximum width allowed by the control in pixels */\r\n public get maxWidthInPixels(): number {\r\n return this._maxWidth.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set maxWidth(value: string | number) {\r\n if (this._maxWidth.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._maxWidth.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the text highlighter transparency; default: 0.4\r\n * @deprecated Please use highlighterOpacity instead\r\n */\r\n @serialize()\r\n public get highligherOpacity(): number {\r\n return this.highlighterOpacity;\r\n }\r\n\r\n public set highligherOpacity(value: number) {\r\n this.highlighterOpacity = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the text highlighter transparency; default: 0.4\r\n */\r\n @serialize()\r\n public get highlighterOpacity(): number {\r\n return this._highlighterOpacity;\r\n }\r\n\r\n public set highlighterOpacity(value: number) {\r\n if (this._highlighterOpacity === value) {\r\n return;\r\n }\r\n this._highlighterOpacity = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets a boolean indicating whether to select complete text by default on input focus */\r\n @serialize()\r\n public get onFocusSelectAll(): boolean {\r\n return this._onFocusSelectAll;\r\n }\r\n\r\n public set onFocusSelectAll(value: boolean) {\r\n if (this._onFocusSelectAll === value) {\r\n return;\r\n }\r\n\r\n this._onFocusSelectAll = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the text hightlight color */\r\n @serialize()\r\n public get textHighlightColor(): string {\r\n return this._textHighlightColor;\r\n }\r\n\r\n public set textHighlightColor(value: string) {\r\n if (this._textHighlightColor === value) {\r\n return;\r\n }\r\n this._textHighlightColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets control margin */\r\n @serialize()\r\n public get margin(): string {\r\n return this._margin.toString(this._host);\r\n }\r\n\r\n /** Gets control margin in pixels */\r\n public get marginInPixels(): number {\r\n return this._margin.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set margin(value: string) {\r\n if (this._margin.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._margin.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the control can auto stretch its width to adapt to the text */\r\n @serialize()\r\n public get autoStretchWidth(): boolean {\r\n return this._autoStretchWidth;\r\n }\r\n\r\n public set autoStretchWidth(value: boolean) {\r\n if (this._autoStretchWidth === value) {\r\n return;\r\n }\r\n\r\n this._autoStretchWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets border thickness */\r\n @serialize()\r\n public get thickness(): number {\r\n return this._thickness;\r\n }\r\n\r\n public set thickness(value: number) {\r\n if (this._thickness === value) {\r\n return;\r\n }\r\n\r\n this._thickness = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the background color when focused */\r\n @serialize()\r\n public get focusedBackground(): string {\r\n return this._focusedBackground;\r\n }\r\n\r\n public set focusedBackground(value: string) {\r\n if (this._focusedBackground === value) {\r\n return;\r\n }\r\n\r\n this._focusedBackground = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the background color when focused */\r\n public override set focusedColor(value: string) {\r\n if (this._focusedColor === value) {\r\n return;\r\n }\r\n\r\n this._focusedColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the 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 the placeholder color */\r\n @serialize()\r\n public get placeholderColor(): string {\r\n return this._placeholderColor;\r\n }\r\n\r\n public set placeholderColor(value: string) {\r\n if (this._placeholderColor === value) {\r\n return;\r\n }\r\n\r\n this._placeholderColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the text displayed when the control is empty */\r\n @serialize()\r\n public get placeholderText(): string {\r\n return this._placeholderText;\r\n }\r\n\r\n public set placeholderText(value: string) {\r\n if (this._placeholderText === value) {\r\n return;\r\n }\r\n this._placeholderText = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the dead key. 0 to disable. */\r\n @serialize()\r\n public get deadKey(): boolean {\r\n return this._deadKey;\r\n }\r\n\r\n public set deadKey(flag: boolean) {\r\n this._deadKey = flag;\r\n }\r\n\r\n /** Gets or sets the highlight text */\r\n public get highlightedText(): string {\r\n return this._highlightedText;\r\n }\r\n public set highlightedText(text: string) {\r\n if (this._highlightedText === text) {\r\n return;\r\n }\r\n this._highlightedText = text;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets if the current key should be added */\r\n public get addKey(): boolean {\r\n return this._addKey;\r\n }\r\n\r\n public set addKey(flag: boolean) {\r\n this._addKey = flag;\r\n }\r\n\r\n /** Gets or sets the value of the current key being entered */\r\n public get currentKey(): string {\r\n return this._currentKey;\r\n }\r\n\r\n public set currentKey(key: string) {\r\n this._currentKey = key;\r\n }\r\n\r\n /** Gets or sets the text displayed in the control */\r\n @serialize()\r\n public get text(): string {\r\n return this._textWrapper.text;\r\n }\r\n\r\n public set text(value: string) {\r\n const valueAsString = value.toString(); // Forcing convertion\r\n\r\n if (!this._textWrapper) {\r\n this._textWrapper = new TextWrapper();\r\n }\r\n\r\n if (this._textWrapper.text === valueAsString) {\r\n return;\r\n }\r\n this._textWrapper.text = valueAsString;\r\n this._textHasChanged();\r\n }\r\n\r\n protected _textHasChanged(): void {\r\n this._markAsDirty();\r\n this.onTextChangedObservable.notifyObservers(this);\r\n }\r\n\r\n protected override _applyStates(context: ICanvasRenderingContext): void {\r\n super._applyStates(context);\r\n if (this.outlineWidth) {\r\n context.lineWidth = this.outlineWidth;\r\n context.strokeStyle = this.outlineColor;\r\n }\r\n }\r\n\r\n /** Gets or sets control width */\r\n @serialize()\r\n public override get width(): string | number {\r\n return this._width.toString(this._host);\r\n }\r\n\r\n public override set width(value: string | number) {\r\n if (this._width.toString(this._host) === value && !this._autoStretchWidth) {\r\n return;\r\n }\r\n\r\n if (this._width.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n\r\n this.autoStretchWidth = false;\r\n }\r\n\r\n /**\r\n * Creates a new InputText\r\n * @param name defines the control name\r\n * @param text defines the text of the control\r\n */\r\n constructor(\r\n public override name?: string,\r\n text: string = \"\"\r\n ) {\r\n super(name);\r\n\r\n this.text = text;\r\n this.isPointerBlocker = true;\r\n this._focusedColor = \"white\";\r\n }\r\n\r\n /** @internal */\r\n public override onBlur(): void {\r\n this._isFocused = false;\r\n this._scrollLeft = null;\r\n this._cursorOffset = 0;\r\n clearTimeout(this._blinkTimeout);\r\n this._markAsDirty();\r\n\r\n this.onBlurObservable.notifyObservers(this);\r\n\r\n this._host.unRegisterClipboardEvents();\r\n if (this._onClipboardObserver) {\r\n this._host.onClipboardObservable.remove(this._onClipboardObserver);\r\n }\r\n const scene = this._host.getScene();\r\n if (this._onPointerDblTapObserver && scene) {\r\n scene.onPointerObservable.remove(this._onPointerDblTapObserver);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override onFocus(): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n this._scrollLeft = null;\r\n this._isFocused = true;\r\n this._blinkIsEven = false;\r\n this._cursorOffset = 0;\r\n this._markAsDirty();\r\n\r\n this.onFocusObservable.notifyObservers(this as Control);\r\n\r\n if (this._focusedBy === \"touch\" && !this.disableMobilePrompt) {\r\n const value = prompt(this.promptMessage);\r\n\r\n if (value !== null) {\r\n this.text = value;\r\n }\r\n this._host.focusedControl = null;\r\n return;\r\n }\r\n\r\n this._host.registerClipboardEvents();\r\n\r\n this._onClipboardObserver = this._host.onClipboardObservable.add((clipboardInfo) => {\r\n // process clipboard event, can be configured.\r\n switch (clipboardInfo.type) {\r\n case ClipboardEventTypes.COPY:\r\n this._onCopyText(clipboardInfo.event);\r\n this.onTextCopyObservable.notifyObservers(this);\r\n break;\r\n case ClipboardEventTypes.CUT:\r\n this._onCutText(clipboardInfo.event);\r\n this.onTextCutObservable.notifyObservers(this);\r\n break;\r\n case ClipboardEventTypes.PASTE:\r\n this._onPasteText(clipboardInfo.event);\r\n this.onTextPasteObservable.notifyObservers(this);\r\n break;\r\n default:\r\n return;\r\n }\r\n });\r\n\r\n const scene = this._host.getScene();\r\n if (scene) {\r\n //register the pointer double tap event\r\n this._onPointerDblTapObserver = scene.onPointerObservable.add((pointerInfo) => {\r\n if (!this._isFocused) {\r\n return;\r\n }\r\n if (pointerInfo.type === PointerEventTypes.POINTERDOUBLETAP) {\r\n this._processDblClick(pointerInfo);\r\n }\r\n });\r\n }\r\n\r\n if (this._onFocusSelectAll) {\r\n this.selectAllText();\r\n }\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"InputText\";\r\n }\r\n\r\n /**\r\n * Function called to get the list of controls that should not steal the focus from this control\r\n * @returns an array of controls\r\n */\r\n public override keepsFocusWith(): Nullable<Control[]> {\r\n if (!this._connectedVirtualKeyboard) {\r\n return null;\r\n }\r\n return [this._connectedVirtualKeyboard];\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public processKey(keyCode: number, key?: string, evt?: IKeyboardEvent) {\r\n if (this.isReadOnly) {\r\n return;\r\n }\r\n\r\n //return if clipboard event keys (i.e -ctr/cmd + c,v,x)\r\n if (evt && (evt.ctrlKey || evt.metaKey) && (keyCode === 67 || keyCode === 86 || keyCode === 88)) {\r\n return;\r\n }\r\n\r\n //select all\r\n if (evt && (evt.ctrlKey || evt.metaKey) && keyCode === 65) {\r\n this.selectAllText();\r\n evt.preventDefault();\r\n return;\r\n }\r\n // Specific cases\r\n switch (keyCode) {\r\n case 32: //SPACE\r\n key = \" \"; //ie11 key for space is \"Spacebar\"\r\n break;\r\n case 191: //SLASH\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n break;\r\n case 8: // BACKSPACE\r\n if (this._textWrapper.text && this._textWrapper.length > 0) {\r\n //delete the highlighted text\r\n if (this.isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this.isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n this._blinkIsEven = false;\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n }\r\n //delete single character\r\n if (this._cursorOffset === 0) {\r\n this.text = this._textWrapper.substring(0, this._textWrapper.length - 1);\r\n } else {\r\n const deletePosition = this._textWrapper.length - this._cursorOffset;\r\n if (deletePosition > 0) {\r\n this._textWrapper.removePart(deletePosition - 1, deletePosition);\r\n this._textHasChanged();\r\n }\r\n }\r\n }\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n case 46: // DELETE\r\n if (this.isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this.isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n }\r\n if (this._textWrapper.text && this._textWrapper.length > 0 && this._cursorOffset > 0) {\r\n const deletePosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(deletePosition, deletePosition + 1);\r\n this._textHasChanged();\r\n this._cursorOffset--;\r\n }\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n case 13: // RETURN\r\n this._host.focusedControl = null;\r\n this.isTextHighlightOn = false;\r\n return;\r\n case 35: // END\r\n this._cursorOffset = 0;\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n case 36: // HOME\r\n this._cursorOffset = this._textWrapper.length;\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n case 37: // LEFT\r\n this._cursorOffset++;\r\n if (this._cursorOffset > this._textWrapper.length) {\r\n this._cursorOffset = this._textWrapper.length;\r\n }\r\n\r\n if (evt && evt.shiftKey) {\r\n // update the cursor\r\n this._blinkIsEven = false;\r\n // shift + ctrl/cmd + <-\r\n if (evt.ctrlKey || evt.metaKey) {\r\n if (!this.isTextHighlightOn) {\r\n if (this._textWrapper.length === this._cursorOffset) {\r\n return;\r\n } else {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset + 1;\r\n }\r\n }\r\n this._startHighlightIndex = 0;\r\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\r\n this._cursorOffset = this._textWrapper.length;\r\n this.isTextHighlightOn = true;\r\n this._markAsDirty();\r\n return;\r\n }\r\n //store the starting point\r\n if (!this.isTextHighlightOn) {\r\n this.isTextHighlightOn = true;\r\n this._cursorIndex = this._cursorOffset >= this._textWrapper.length ? this._textWrapper.length : this._cursorOffset - 1;\r\n }\r\n //if text is already highlighted\r\n else if (this._cursorIndex === -1) {\r\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\r\n this._cursorOffset = this._startHighlightIndex === 0 ? this._textWrapper.length : this._textWrapper.length - this._startHighlightIndex + 1;\r\n }\r\n //set the highlight indexes\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this.isTextHighlightOn = false;\r\n }\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (this.isTextHighlightOn) {\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n this.isTextHighlightOn = false;\r\n }\r\n if (evt && (evt.ctrlKey || evt.metaKey)) {\r\n this._cursorOffset = this._textWrapper.length;\r\n evt.preventDefault();\r\n }\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n return;\r\n case 39: // RIGHT\r\n this._cursorOffset--;\r\n if (this._cursorOffset < 0) {\r\n this._cursorOffset = 0;\r\n }\r\n if (evt && evt.shiftKey) {\r\n //update the cursor\r\n this._blinkIsEven = false;\r\n //shift + ctrl/cmd + ->\r\n if (evt.ctrlKey || evt.metaKey) {\r\n if (!this.isTextHighlightOn) {\r\n if (this._cursorOffset === 0) {\r\n return;\r\n } else {\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset - 1;\r\n }\r\n }\r\n this._endHighlightIndex = this._textWrapper.length;\r\n this.isTextHighlightOn = true;\r\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\r\n this._cursorOffset = 0;\r\n this._markAsDirty();\r\n return;\r\n }\r\n\r\n if (!this.isTextHighlightOn) {\r\n this.isTextHighlightOn = true;\r\n this._cursorIndex = this._cursorOffset <= 0 ? 0 : this._cursorOffset + 1;\r\n }\r\n //if text is already highlighted\r\n else if (this._cursorIndex === -1) {\r\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\r\n this._cursorOffset = this._textWrapper.length === this._endHighlightIndex ? 0 : this._textWrapper.length - this._endHighlightIndex - 1;\r\n }\r\n //set the highlight indexes\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this.isTextHighlightOn = false;\r\n }\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (this.isTextHighlightOn) {\r\n this._cursorOffset = this._textWrapper.length - this._endHighlightIndex;\r\n this.isTextHighlightOn = false;\r\n }\r\n //ctr + ->\r\n if (evt && (evt.ctrlKey || evt.metaKey)) {\r\n this._cursorOffset = 0;\r\n evt.preventDefault();\r\n }\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (keyCode === 32) {\r\n key = evt?.key ?? \" \";\r\n }\r\n this._deadKey = key === \"Dead\";\r\n // Printable characters\r\n if (\r\n key &&\r\n (keyCode === -1 || // Direct access\r\n keyCode === 32 || // Space\r\n keyCode === 34 || // \" add support for single and double quotes\r\n keyCode === 39 || // '\r\n (keyCode > 47 && keyCode < 64) || // Numbers\r\n (keyCode > 64 && keyCode < 91) || // Letters\r\n (keyCode > 159 && keyCode < 193) || // Special characters\r\n (keyCode > 218 && keyCode < 223) || // Special characters\r\n (keyCode > 95 && keyCode < 112))\r\n ) {\r\n // Numpad\r\n this._currentKey = key;\r\n this.onBeforeKeyAddObservable.notifyObservers(this);\r\n key = this._currentKey;\r\n if (this._addKey && !this._deadKey) {\r\n if (this.isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex, key);\r\n this._textHasChanged();\r\n this._cursorOffset = this._textWrapper.length - (this._startHighlightIndex + 1);\r\n this.isTextHighlightOn = false;\r\n this._blinkIsEven = false;\r\n this._markAsDirty();\r\n } else if (this._cursorOffset === 0) {\r\n this.text += this._deadKey && evt?.key ? evt.key : key;\r\n } else {\r\n const insertPosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(insertPosition, insertPosition, key);\r\n this._textHasChanged();\r\n }\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _updateValueFromCursorIndex(offset: number) {\r\n //update the cursor\r\n this._blinkIsEven = false;\r\n\r\n if (this._cursorIndex === -1) {\r\n this._cursorIndex = offset;\r\n } else {\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this.isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n }\r\n }\r\n this.isTextHighlightOn = true;\r\n this._markAsDirty();\r\n }\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _processDblClick(evt: PointerInfo) {\r\n //pre-find the start and end index of the word under cursor, speeds up the rendering\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._endHighlightIndex = this._startHighlightIndex;\r\n let moveLeft, moveRight;\r\n do {\r\n moveRight = this._endHighlightIndex < this._textWrapper.length && this._textWrapper.isWord(this._endHighlightIndex) ? ++this._endHighlightIndex : 0;\r\n moveLeft = this._startHighlightIndex > 0 && this._textWrapper.isWord(this._startHighlightIndex - 1) ? --this._startHighlightIndex : 0;\r\n } while (moveLeft || moveRight);\r\n\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n\r\n this.isTextHighlightOn = true;\r\n this._clickedCoordinate = null;\r\n this._blinkIsEven = true;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Allow the user to select all text\r\n */\r\n public selectAllText() {\r\n this._blinkIsEven = true;\r\n this.isTextHighlightOn = true;\r\n\r\n this._startHighlightIndex = 0;\r\n this._endHighlightIndex = this._textWrapper.length;\r\n this._cursorOffset = this._textWrapper.length;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Handles the keyboard event\r\n * @param evt Defines the KeyboardEvent\r\n */\r\n public override processKeyboard(evt: IKeyboardEvent): void {\r\n // process pressed key\r\n this.processKey(evt.keyCode, evt.key, evt);\r\n\r\n super.processKeyboard(evt);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _onCopyText(ev: ClipboardEvent): void {\r\n this.isTextHighlightOn = false;\r\n //when write permission to clipbaord data is denied\r\n try {\r\n ev.clipboardData && ev.clipboardData.setData(\"text/plain\", this._highlightedText);\r\n } catch {} //pass\r\n this._host.clipboardData = this._highlightedText;\r\n }\r\n /**\r\n * @internal\r\n */\r\n protected _onCutText(ev: ClipboardEvent): void {\r\n if (!this._highlightedText) {\r\n return;\r\n }\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this.isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n //when write permission to clipbaord data is denied\r\n try {\r\n ev.clipboardData && ev.clipboardData.setData(\"text/plain\", this._highlightedText);\r\n } catch {} //pass\r\n\r\n this._host.clipboardData = this._highlightedText;\r\n this._highlightedText = \"\";\r\n }\r\n /**\r\n * @internal\r\n */\r\n protected _onPasteText(ev: ClipboardEvent): void {\r\n let data: string;\r\n if (ev.clipboardData && ev.clipboardData.types.indexOf(\"text/plain\") !== -1) {\r\n data = ev.clipboardData.getData(\"text/plain\");\r\n } else {\r\n //get the cached data; returns blank string by default\r\n data = this._host.clipboardData;\r\n }\r\n const insertPosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(insertPosition, insertPosition, data);\r\n this._textHasChanged();\r\n }\r\n\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\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 // Background\r\n if (this._isFocused) {\r\n if (this._focusedBackground) {\r\n context.fillStyle = this._isEnabled ? this._focusedBackground : this._disabledColor;\r\n\r\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n }\r\n } else if (this._background) {\r\n context.fillStyle = this._isEnabled ? this._background : this._disabledColor;\r\n\r\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n }\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowBlur = 0;\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n }\r\n\r\n if (!this._fontOffset || this._wasDirty) {\r\n this._fontOffset = Control._GetFontOffset(context.font, this._host.getScene()?.getEngine());\r\n }\r\n\r\n // Text\r\n const clipTextLeft = this._currentMeasure.left + this._margin.getValueInPixel(this._host, this._tempParentMeasure.width);\r\n if (this.color) {\r\n context.fillStyle = this.color;\r\n }\r\n\r\n let text = this._beforeRenderText(this._textWrapper);\r\n\r\n if (!this._isFocused && !this._textWrapper.text && this._placeholderText) {\r\n text = new TextWrapper();\r\n text.text = this._placeholderText;\r\n\r\n if (this._placeholderColor) {\r\n context.fillStyle = this._placeholderColor;\r\n }\r\n }\r\n\r\n this._textWidth = context.measureText(text.text).width;\r\n const marginWidth = this._margin.getValueInPixel(this._host, this._tempParentMeasure.width) * 2;\r\n if (this._autoStretchWidth) {\r\n this.width = Math.min(this._maxWidth.getValueInPixel(this._host, this._tempParentMeasure.width), this._textWidth + marginWidth) + \"px\";\r\n this._autoStretchWidth = true; // setting the width will have reset _autoStretchWidth to false!\r\n }\r\n\r\n const rootY = this._fontOffset.ascent + (this._currentMeasure.height - this._fontOffset.height) / 2;\r\n const availableWidth = this._width.getValueInPixel(this._host, this._tempParentMeasure.width) - marginWidth;\r\n\r\n context.save();\r\n context.beginPath();\r\n context.rect(clipTextLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, availableWidth + 2, this._currentMeasure.height);\r\n context.clip();\r\n\r\n if (this._isFocused && this._textWidth > availableWidth) {\r\n const textLeft = clipTextLeft - this._textWidth + availableWidth;\r\n if (!this._scrollLeft) {\r\n this._scrollLeft = textLeft;\r\n }\r\n } else {\r\n this._scrollLeft = clipTextLeft;\r\n }\r\n\r\n if (this.outlineWidth) {\r\n context.strokeText(text.text, this._scrollLeft, this._currentMeasure.top + rootY);\r\n }\r\n\r\n context.fillText(text.text, this._scrollLeft, this._currentMeasure.top + rootY);\r\n\r\n // Cursor\r\n if (this._isFocused) {\r\n // Need to move cursor\r\n if (this._clickedCoordinate) {\r\n const rightPosition = this._scrollLeft + this._textWidth;\r\n const absoluteCursorPosition = rightPosition - this._clickedCoordinate;\r\n let currentSize = 0;\r\n this._cursorOffset = 0;\r\n let previousDist = 0;\r\n do {\r\n if (this._cursorOffset) {\r\n previousDist = Math.abs(absoluteCursorPosition - currentSize);\r\n }\r\n this._cursorOffset++;\r\n currentSize = context.measureText(text.substr(text.length - this._cursorOffset, this._cursorOffset)).width;\r\n } while (currentSize < absoluteCursorPosition && text.length >= this._cursorOffset);\r\n\r\n // Find closest move\r\n if (Math.abs(absoluteCursorPosition - currentSize) > previousDist) {\r\n this._cursorOffset--;\r\n }\r\n\r\n this._blinkIsEven = false;\r\n this._clickedCoordinate = null;\r\n }\r\n\r\n // Render cursor\r\n if (!this._blinkIsEven) {\r\n const cursorOffsetText = text.substr(text.length - this._cursorOffset);\r\n const cursorOffsetWidth = context.measureText(cursorOffsetText).width;\r\n let cursorLeft = this._scrollLeft + this._textWidth - cursorOffsetWidth;\r\n\r\n if (cursorLeft < clipTextLeft) {\r\n this._scrollLeft += clipTextLeft - cursorLeft;\r\n cursorLeft = clipTextLeft;\r\n this._markAsDirty();\r\n } else if (cursorLeft > clipTextLeft + availableWidth) {\r\n this._scrollLeft += clipTextLeft + availableWidth - cursorLeft;\r\n cursorLeft = clipTextLeft + availableWidth;\r\n this._markAsDirty();\r\n }\r\n if (!this.isTextHighlightOn) {\r\n context.fillRect(cursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, 2, this._fontOffset.height);\r\n }\r\n }\r\n\r\n clearTimeout(this._blinkTimeout);\r\n this._blinkTimeout = <any>setTimeout(() => {\r\n this._blinkIsEven = !this._blinkIsEven;\r\n this._markAsDirty();\r\n }, 500);\r\n\r\n //show the highlighted text\r\n if (this.isTextHighlightOn) {\r\n clearTimeout(this._blinkTimeout);\r\n const highlightCursorOffsetWidth = context.measureText(text.substring(this._startHighlightIndex)).width;\r\n let highlightCursorLeft = this._scrollLeft + this._textWidth - highlightCursorOffsetWidth;\r\n this._highlightedText = text.substring(this._startHighlightIndex, this._endHighlightIndex);\r\n let width = context.measureText(text.substring(this._startHighlightIndex, this._endHighlightIndex)).width;\r\n if (highlightCursorLeft < clipTextLeft) {\r\n width = width - (clipTextLeft - highlightCursorLeft);\r\n if (!width) {\r\n // when using left arrow on text.length > availableWidth;\r\n // assigns the width of the first letter after clipTextLeft\r\n width = context.measureText(text.charAt(text.length - this._cursorOffset)).width;\r\n }\r\n highlightCursorLeft = clipTextLeft;\r\n }\r\n //for transparancy\r\n context.globalAlpha = this._highlighterOpacity;\r\n context.fillStyle = this._textHighlightColor;\r\n context.fillRect(highlightCursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, width, this._fontOffset.height);\r\n context.globalAlpha = 1.0;\r\n }\r\n }\r\n context.restore();\r\n\r\n // Border\r\n if (this._thickness) {\r\n if (this._isFocused) {\r\n if (this.focusedColor) {\r\n context.strokeStyle = this.focusedColor;\r\n }\r\n } else {\r\n if (this.color) {\r\n context.strokeStyle = this.color;\r\n }\r\n }\r\n\r\n context.lineWidth = this._thickness;\r\n\r\n context.strokeRect(\r\n this._currentMeasure.left + this._thickness / 2,\r\n this._currentMeasure.top + this._thickness / 2,\r\n this._currentMeasure.width - this._thickness,\r\n this._currentMeasure.height - this._thickness\r\n );\r\n }\r\n\r\n context.restore();\r\n }\r\n\r\n public override _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n this._clickedCoordinate = coordinates.x;\r\n this.isTextHighlightOn = false;\r\n this._highlightedText = \"\";\r\n this._cursorIndex = -1;\r\n this._isPointerDown = true;\r\n this._host._capturingControl[pointerId] = this;\r\n this._focusedBy = (pi.event as IPointerEvent).pointerType;\r\n if (this._host.focusedControl === this) {\r\n // Move cursor\r\n clearTimeout(this._blinkTimeout);\r\n this._markAsDirty();\r\n return true;\r\n }\r\n if (!this._isEnabled) {\r\n return false;\r\n }\r\n this._host.focusedControl = this;\r\n\r\n return true;\r\n }\r\n public override _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n if (this._host.focusedControl === this && this._isPointerDown && !this.isReadOnly) {\r\n this._clickedCoordinate = coordinates.x;\r\n this._markAsDirty();\r\n this._updateValueFromCursorIndex(this._cursorOffset);\r\n }\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public override _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\r\n this._isPointerDown = false;\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick);\r\n }\r\n\r\n protected _beforeRenderText(textWrapper: TextWrapper): TextWrapper {\r\n return textWrapper;\r\n }\r\n\r\n /** @internal */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private set isTextHighlightOn(value: boolean) {\r\n if (this._isTextHighlightOn === value) {\r\n return;\r\n }\r\n if (value) {\r\n this.onTextHighlightObservable.notifyObservers(this);\r\n }\r\n this._isTextHighlightOn = value;\r\n }\r\n\r\n /** @internal */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private get isTextHighlightOn(): boolean {\r\n return this._isTextHighlightOn;\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n\r\n this.onBlurObservable.clear();\r\n this.onFocusObservable.clear();\r\n this.onTextChangedObservable.clear();\r\n this.onTextCopyObservable.clear();\r\n this.onTextCutObservable.clear();\r\n this.onTextPasteObservable.clear();\r\n this.onTextHighlightObservable.clear();\r\n this.onKeyboardEventProcessedObservable.clear();\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the InputText class with the type store for serialization support.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterInputText(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GUI.InputText\", InputText);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"inputText.pure.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/inputText.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type Observer, Observable } from \"core/Misc/observable\";\r\nimport { type Vector2 } from \"core/Maths/math.vector.pure\";\r\nimport { type ClipboardInfo, ClipboardEventTypes } from \"core/Events/clipboardEvents\";\r\nimport { type PointerInfo, type PointerInfoBase, PointerEventTypes } from \"core/Events/pointerEvents\";\r\n\r\nimport { Control } from \"./control.pure\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport { type VirtualKeyboard } from \"./virtualKeyboard.pure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { TextWrapper } from \"./textWrapper\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { type IKeyboardEvent, type IPointerEvent } from \"core/Events/deviceInputEvents\";\r\nimport { type ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/**\r\n * Class used to create input text control\r\n */\r\nexport class InputText extends Control {\r\n protected _textWrapper: TextWrapper;\r\n protected _placeholderText = \"\";\r\n protected _background = \"#222222\";\r\n protected _focusedBackground = \"#000000\";\r\n protected _placeholderColor = \"gray\";\r\n protected _thickness = 1;\r\n protected _margin = new ValueAndUnit(10, ValueAndUnit.UNITMODE_PIXEL);\r\n protected _autoStretchWidth = true;\r\n protected _maxWidth = new ValueAndUnit(1, ValueAndUnit.UNITMODE_PERCENTAGE, false);\r\n /** the type of device that most recently focused the input: \"mouse\", \"touch\" or \"pen\" */\r\n protected _focusedBy: string;\r\n protected _blinkTimeout: number;\r\n protected _blinkIsEven = false;\r\n private _cursorOffset = 0;\r\n protected _scrollLeft: Nullable<number>;\r\n protected _textWidth: number;\r\n protected _clickedCoordinate: Nullable<number>;\r\n protected _deadKey = false;\r\n protected _addKey = true;\r\n protected _currentKey = \"\";\r\n protected _isTextHighlightOn = false;\r\n protected _textHighlightColor = \"#d5e0ff\";\r\n protected _highlighterOpacity = 0.4;\r\n protected _highlightedText = \"\";\r\n private _startHighlightIndex = 0;\r\n private _endHighlightIndex = 0;\r\n private _cursorIndex = -1;\r\n private _outlineWidth: number = 0;\r\n private _outlineColor: string = \"white\";\r\n protected _onFocusSelectAll = false;\r\n protected _isPointerDown = false;\r\n protected _onClipboardObserver: Nullable<Observer<ClipboardInfo>>;\r\n protected _onPointerDblTapObserver: Nullable<Observer<PointerInfo>>;\r\n\r\n /** @internal */\r\n public _connectedVirtualKeyboard: Nullable<VirtualKeyboard>;\r\n\r\n /** Gets or sets a string representing the message displayed on mobile when the control gets the focus */\r\n @serialize()\r\n public promptMessage = \"Please enter text:\";\r\n /** Force disable prompt on mobile device */\r\n @serialize()\r\n public disableMobilePrompt = false;\r\n\r\n /**\r\n * Gets or sets outlineWidth of the text to display\r\n */\r\n public get outlineWidth(): number {\r\n return this._outlineWidth;\r\n }\r\n\r\n public set outlineWidth(value: number) {\r\n if (this._outlineWidth === value) {\r\n return;\r\n }\r\n this._outlineWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets outlineColor of the text to display\r\n */\r\n public get outlineColor(): string {\r\n return this._outlineColor;\r\n }\r\n\r\n public set outlineColor(value: string) {\r\n if (this._outlineColor === value) {\r\n return;\r\n }\r\n this._outlineColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Observable raised when the text changes */\r\n public onTextChangedObservable = new Observable<InputText>();\r\n /** Observable raised just before an entered character is to be added */\r\n public onBeforeKeyAddObservable = new Observable<InputText>();\r\n /** Observable raised when the text is highlighted */\r\n public onTextHighlightObservable = new Observable<InputText>();\r\n /** Observable raised when copy event is triggered */\r\n public onTextCopyObservable = new Observable<InputText>();\r\n /** Observable raised when cut event is triggered */\r\n public onTextCutObservable = new Observable<InputText>();\r\n /** Observable raised when paste event is triggered */\r\n public onTextPasteObservable = new Observable<InputText>();\r\n\r\n /** Gets or sets the maximum width allowed by the control */\r\n @serialize()\r\n public get maxWidth(): string | number {\r\n return this._maxWidth.toString(this._host);\r\n }\r\n\r\n /** Gets the maximum width allowed by the control in pixels */\r\n public get maxWidthInPixels(): number {\r\n return this._maxWidth.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set maxWidth(value: string | number) {\r\n if (this._maxWidth.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._maxWidth.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the text highlighter transparency; default: 0.4\r\n * @deprecated Please use highlighterOpacity instead\r\n */\r\n @serialize()\r\n public get highligherOpacity(): number {\r\n return this.highlighterOpacity;\r\n }\r\n\r\n public set highligherOpacity(value: number) {\r\n this.highlighterOpacity = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the text highlighter transparency; default: 0.4\r\n */\r\n @serialize()\r\n public get highlighterOpacity(): number {\r\n return this._highlighterOpacity;\r\n }\r\n\r\n public set highlighterOpacity(value: number) {\r\n if (this._highlighterOpacity === value) {\r\n return;\r\n }\r\n this._highlighterOpacity = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets a boolean indicating whether to select complete text by default on input focus */\r\n @serialize()\r\n public get onFocusSelectAll(): boolean {\r\n return this._onFocusSelectAll;\r\n }\r\n\r\n public set onFocusSelectAll(value: boolean) {\r\n if (this._onFocusSelectAll === value) {\r\n return;\r\n }\r\n\r\n this._onFocusSelectAll = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the text hightlight color */\r\n @serialize()\r\n public get textHighlightColor(): string {\r\n return this._textHighlightColor;\r\n }\r\n\r\n public set textHighlightColor(value: string) {\r\n if (this._textHighlightColor === value) {\r\n return;\r\n }\r\n this._textHighlightColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets control margin */\r\n @serialize()\r\n public get margin(): string {\r\n return this._margin.toString(this._host);\r\n }\r\n\r\n /** Gets control margin in pixels */\r\n public get marginInPixels(): number {\r\n return this._margin.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set margin(value: string) {\r\n if (this._margin.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._margin.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the control can auto stretch its width to adapt to the text */\r\n @serialize()\r\n public get autoStretchWidth(): boolean {\r\n return this._autoStretchWidth;\r\n }\r\n\r\n public set autoStretchWidth(value: boolean) {\r\n if (this._autoStretchWidth === value) {\r\n return;\r\n }\r\n\r\n this._autoStretchWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets border thickness */\r\n @serialize()\r\n public get thickness(): number {\r\n return this._thickness;\r\n }\r\n\r\n public set thickness(value: number) {\r\n if (this._thickness === value) {\r\n return;\r\n }\r\n\r\n this._thickness = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the background color when focused */\r\n @serialize()\r\n public get focusedBackground(): string {\r\n return this._focusedBackground;\r\n }\r\n\r\n public set focusedBackground(value: string) {\r\n if (this._focusedBackground === value) {\r\n return;\r\n }\r\n\r\n this._focusedBackground = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the background color when focused */\r\n public override set focusedColor(value: string) {\r\n if (this._focusedColor === value) {\r\n return;\r\n }\r\n\r\n this._focusedColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the 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 the placeholder color */\r\n @serialize()\r\n public get placeholderColor(): string {\r\n return this._placeholderColor;\r\n }\r\n\r\n public set placeholderColor(value: string) {\r\n if (this._placeholderColor === value) {\r\n return;\r\n }\r\n\r\n this._placeholderColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the text displayed when the control is empty */\r\n @serialize()\r\n public get placeholderText(): string {\r\n return this._placeholderText;\r\n }\r\n\r\n public set placeholderText(value: string) {\r\n if (this._placeholderText === value) {\r\n return;\r\n }\r\n this._placeholderText = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the dead key. 0 to disable. */\r\n @serialize()\r\n public get deadKey(): boolean {\r\n return this._deadKey;\r\n }\r\n\r\n public set deadKey(flag: boolean) {\r\n this._deadKey = flag;\r\n }\r\n\r\n /** Gets or sets the highlight text */\r\n public get highlightedText(): string {\r\n return this._highlightedText;\r\n }\r\n public set highlightedText(text: string) {\r\n if (this._highlightedText === text) {\r\n return;\r\n }\r\n this._highlightedText = text;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets if the current key should be added */\r\n public get addKey(): boolean {\r\n return this._addKey;\r\n }\r\n\r\n public set addKey(flag: boolean) {\r\n this._addKey = flag;\r\n }\r\n\r\n /** Gets or sets the value of the current key being entered */\r\n public get currentKey(): string {\r\n return this._currentKey;\r\n }\r\n\r\n public set currentKey(key: string) {\r\n this._currentKey = key;\r\n }\r\n\r\n /** Gets or sets the text displayed in the control */\r\n @serialize()\r\n public get text(): string {\r\n return this._textWrapper.text;\r\n }\r\n\r\n public set text(value: string) {\r\n const valueAsString = value.toString(); // Forcing convertion\r\n\r\n if (!this._textWrapper) {\r\n this._textWrapper = new TextWrapper();\r\n }\r\n\r\n if (this._textWrapper.text === valueAsString) {\r\n return;\r\n }\r\n this._textWrapper.text = valueAsString;\r\n this._textHasChanged();\r\n }\r\n\r\n protected _textHasChanged(): void {\r\n this._markAsDirty();\r\n this.onTextChangedObservable.notifyObservers(this);\r\n }\r\n\r\n protected override _applyStates(context: ICanvasRenderingContext): void {\r\n super._applyStates(context);\r\n if (this.outlineWidth) {\r\n context.lineWidth = this.outlineWidth;\r\n context.strokeStyle = this.outlineColor;\r\n }\r\n }\r\n\r\n /** Gets or sets control width */\r\n @serialize()\r\n public override get width(): string | number {\r\n return this._width.toString(this._host);\r\n }\r\n\r\n public override set width(value: string | number) {\r\n if (this._width.toString(this._host) === value && !this._autoStretchWidth) {\r\n return;\r\n }\r\n\r\n if (this._width.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n\r\n this.autoStretchWidth = false;\r\n }\r\n\r\n /**\r\n * Creates a new InputText\r\n * @param name defines the control name\r\n * @param text defines the text of the control\r\n */\r\n constructor(\r\n public override name?: string,\r\n text: string = \"\"\r\n ) {\r\n super(name);\r\n\r\n this.text = text;\r\n this.isPointerBlocker = true;\r\n this._focusedColor = \"white\";\r\n }\r\n\r\n /** @internal */\r\n public override onBlur(): void {\r\n this._isFocused = false;\r\n this._scrollLeft = null;\r\n this._cursorOffset = 0;\r\n clearTimeout(this._blinkTimeout);\r\n this._markAsDirty();\r\n\r\n this.onBlurObservable.notifyObservers(this);\r\n\r\n this._host.unRegisterClipboardEvents();\r\n if (this._onClipboardObserver) {\r\n this._host.onClipboardObservable.remove(this._onClipboardObserver);\r\n }\r\n const scene = this._host.getScene();\r\n if (this._onPointerDblTapObserver && scene) {\r\n scene.onPointerObservable.remove(this._onPointerDblTapObserver);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override onFocus(): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n this._scrollLeft = null;\r\n this._isFocused = true;\r\n this._blinkIsEven = false;\r\n this._cursorOffset = 0;\r\n this._markAsDirty();\r\n\r\n this.onFocusObservable.notifyObservers(this as Control);\r\n\r\n if (this._focusedBy === \"touch\" && !this.disableMobilePrompt) {\r\n const value = prompt(this.promptMessage);\r\n\r\n if (value !== null) {\r\n this.text = value;\r\n }\r\n this._host.focusedControl = null;\r\n return;\r\n }\r\n\r\n this._host.registerClipboardEvents();\r\n\r\n this._onClipboardObserver = this._host.onClipboardObservable.add((clipboardInfo) => {\r\n // process clipboard event, can be configured.\r\n switch (clipboardInfo.type) {\r\n case ClipboardEventTypes.COPY:\r\n this._onCopyText(clipboardInfo.event);\r\n this.onTextCopyObservable.notifyObservers(this);\r\n break;\r\n case ClipboardEventTypes.CUT:\r\n this._onCutText(clipboardInfo.event);\r\n this.onTextCutObservable.notifyObservers(this);\r\n break;\r\n case ClipboardEventTypes.PASTE:\r\n this._onPasteText(clipboardInfo.event);\r\n this.onTextPasteObservable.notifyObservers(this);\r\n break;\r\n default:\r\n return;\r\n }\r\n });\r\n\r\n const scene = this._host.getScene();\r\n if (scene) {\r\n //register the pointer double tap event\r\n this._onPointerDblTapObserver = scene.onPointerObservable.add((pointerInfo) => {\r\n if (!this._isFocused) {\r\n return;\r\n }\r\n if (pointerInfo.type === PointerEventTypes.POINTERDOUBLETAP) {\r\n this._processDblClick(pointerInfo);\r\n }\r\n });\r\n }\r\n\r\n if (this._onFocusSelectAll) {\r\n this.selectAllText();\r\n }\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"InputText\";\r\n }\r\n\r\n /**\r\n * Function called to get the list of controls that should not steal the focus from this control\r\n * @returns an array of controls\r\n */\r\n public override keepsFocusWith(): Nullable<Control[]> {\r\n if (!this._connectedVirtualKeyboard) {\r\n return null;\r\n }\r\n return [this._connectedVirtualKeyboard];\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public processKey(keyCode: number, key?: string, evt?: IKeyboardEvent) {\r\n if (this.isReadOnly) {\r\n return;\r\n }\r\n\r\n //return if clipboard event keys (i.e -ctr/cmd + c,v,x)\r\n if (evt && (evt.ctrlKey || evt.metaKey) && (keyCode === 67 || keyCode === 86 || keyCode === 88)) {\r\n return;\r\n }\r\n\r\n //select all\r\n if (evt && (evt.ctrlKey || evt.metaKey) && keyCode === 65) {\r\n this.selectAllText();\r\n evt.preventDefault();\r\n return;\r\n }\r\n // Specific cases\r\n switch (keyCode) {\r\n case 32: //SPACE\r\n key = \" \"; //ie11 key for space is \"Spacebar\"\r\n break;\r\n case 191: //SLASH\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n break;\r\n case 8: // BACKSPACE\r\n if (this._textWrapper.text && this._textWrapper.length > 0) {\r\n //delete the highlighted text\r\n if (this.isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this.isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n this._blinkIsEven = false;\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n }\r\n //delete single character\r\n if (this._cursorOffset === 0) {\r\n this.text = this._textWrapper.substring(0, this._textWrapper.length - 1);\r\n } else {\r\n const deletePosition = this._textWrapper.length - this._cursorOffset;\r\n if (deletePosition > 0) {\r\n this._textWrapper.removePart(deletePosition - 1, deletePosition);\r\n this._textHasChanged();\r\n }\r\n }\r\n }\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n case 46: // DELETE\r\n if (this.isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this.isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n }\r\n if (this._textWrapper.text && this._textWrapper.length > 0 && this._cursorOffset > 0) {\r\n const deletePosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(deletePosition, deletePosition + 1);\r\n this._textHasChanged();\r\n this._cursorOffset--;\r\n }\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n case 13: // RETURN\r\n this._host.focusedControl = null;\r\n this.isTextHighlightOn = false;\r\n return;\r\n case 35: // END\r\n this._cursorOffset = 0;\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n case 36: // HOME\r\n this._cursorOffset = this._textWrapper.length;\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n case 37: // LEFT\r\n this._cursorOffset++;\r\n if (this._cursorOffset > this._textWrapper.length) {\r\n this._cursorOffset = this._textWrapper.length;\r\n }\r\n\r\n if (evt && evt.shiftKey) {\r\n // update the cursor\r\n this._blinkIsEven = false;\r\n // shift + ctrl/cmd + <-\r\n if (evt.ctrlKey || evt.metaKey) {\r\n if (!this.isTextHighlightOn) {\r\n if (this._textWrapper.length === this._cursorOffset) {\r\n return;\r\n } else {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset + 1;\r\n }\r\n }\r\n this._startHighlightIndex = 0;\r\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\r\n this._cursorOffset = this._textWrapper.length;\r\n this.isTextHighlightOn = true;\r\n this._markAsDirty();\r\n return;\r\n }\r\n //store the starting point\r\n if (!this.isTextHighlightOn) {\r\n this.isTextHighlightOn = true;\r\n this._cursorIndex = this._cursorOffset >= this._textWrapper.length ? this._textWrapper.length : this._cursorOffset - 1;\r\n }\r\n //if text is already highlighted\r\n else if (this._cursorIndex === -1) {\r\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\r\n this._cursorOffset = this._startHighlightIndex === 0 ? this._textWrapper.length : this._textWrapper.length - this._startHighlightIndex + 1;\r\n }\r\n //set the highlight indexes\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this.isTextHighlightOn = false;\r\n }\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (this.isTextHighlightOn) {\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n this.isTextHighlightOn = false;\r\n }\r\n if (evt && (evt.ctrlKey || evt.metaKey)) {\r\n this._cursorOffset = this._textWrapper.length;\r\n evt.preventDefault();\r\n }\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n return;\r\n case 39: // RIGHT\r\n this._cursorOffset--;\r\n if (this._cursorOffset < 0) {\r\n this._cursorOffset = 0;\r\n }\r\n if (evt && evt.shiftKey) {\r\n //update the cursor\r\n this._blinkIsEven = false;\r\n //shift + ctrl/cmd + ->\r\n if (evt.ctrlKey || evt.metaKey) {\r\n if (!this.isTextHighlightOn) {\r\n if (this._cursorOffset === 0) {\r\n return;\r\n } else {\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset - 1;\r\n }\r\n }\r\n this._endHighlightIndex = this._textWrapper.length;\r\n this.isTextHighlightOn = true;\r\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\r\n this._cursorOffset = 0;\r\n this._markAsDirty();\r\n return;\r\n }\r\n\r\n if (!this.isTextHighlightOn) {\r\n this.isTextHighlightOn = true;\r\n this._cursorIndex = this._cursorOffset <= 0 ? 0 : this._cursorOffset + 1;\r\n }\r\n //if text is already highlighted\r\n else if (this._cursorIndex === -1) {\r\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\r\n this._cursorOffset = this._textWrapper.length === this._endHighlightIndex ? 0 : this._textWrapper.length - this._endHighlightIndex - 1;\r\n }\r\n //set the highlight indexes\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this.isTextHighlightOn = false;\r\n }\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (this.isTextHighlightOn) {\r\n this._cursorOffset = this._textWrapper.length - this._endHighlightIndex;\r\n this.isTextHighlightOn = false;\r\n }\r\n //ctr + ->\r\n if (evt && (evt.ctrlKey || evt.metaKey)) {\r\n this._cursorOffset = 0;\r\n evt.preventDefault();\r\n }\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (keyCode === 32) {\r\n key = evt?.key ?? \" \";\r\n }\r\n this._deadKey = key === \"Dead\";\r\n // Printable characters\r\n if (\r\n key &&\r\n (keyCode === -1 || // Direct access\r\n keyCode === 32 || // Space\r\n keyCode === 34 || // \" add support for single and double quotes\r\n keyCode === 39 || // '\r\n (keyCode > 47 && keyCode < 64) || // Numbers\r\n (keyCode > 64 && keyCode < 91) || // Letters\r\n (keyCode > 159 && keyCode < 193) || // Special characters\r\n (keyCode > 218 && keyCode < 223) || // Special characters\r\n (keyCode > 95 && keyCode < 112))\r\n ) {\r\n // Numpad\r\n this._currentKey = key;\r\n this.onBeforeKeyAddObservable.notifyObservers(this);\r\n key = this._currentKey;\r\n if (this._addKey && !this._deadKey) {\r\n if (this.isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex, key);\r\n this._textHasChanged();\r\n this._cursorOffset = this._textWrapper.length - (this._startHighlightIndex + 1);\r\n this.isTextHighlightOn = false;\r\n this._blinkIsEven = false;\r\n this._markAsDirty();\r\n } else if (this._cursorOffset === 0) {\r\n this.text += this._deadKey && evt?.key ? evt.key : key;\r\n } else {\r\n const insertPosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(insertPosition, insertPosition, key);\r\n this._textHasChanged();\r\n }\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _updateValueFromCursorIndex(offset: number) {\r\n //update the cursor\r\n this._blinkIsEven = false;\r\n\r\n if (this._cursorIndex === -1) {\r\n this._cursorIndex = offset;\r\n } else {\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this.isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n }\r\n }\r\n this.isTextHighlightOn = true;\r\n this._markAsDirty();\r\n }\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _processDblClick(evt: PointerInfo) {\r\n //pre-find the start and end index of the word under cursor, speeds up the rendering\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._endHighlightIndex = this._startHighlightIndex;\r\n let moveLeft, moveRight;\r\n do {\r\n moveRight = this._endHighlightIndex < this._textWrapper.length && this._textWrapper.isWord(this._endHighlightIndex) ? ++this._endHighlightIndex : 0;\r\n moveLeft = this._startHighlightIndex > 0 && this._textWrapper.isWord(this._startHighlightIndex - 1) ? --this._startHighlightIndex : 0;\r\n } while (moveLeft || moveRight);\r\n\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n\r\n this.isTextHighlightOn = true;\r\n this._clickedCoordinate = null;\r\n this._blinkIsEven = true;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Allow the user to select all text\r\n */\r\n public selectAllText() {\r\n this._blinkIsEven = true;\r\n this.isTextHighlightOn = true;\r\n\r\n this._startHighlightIndex = 0;\r\n this._endHighlightIndex = this._textWrapper.length;\r\n this._cursorOffset = this._textWrapper.length;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Handles the keyboard event\r\n * @param evt Defines the KeyboardEvent\r\n */\r\n public override processKeyboard(evt: IKeyboardEvent): void {\r\n // process pressed key\r\n this.processKey(evt.keyCode, evt.key, evt);\r\n\r\n super.processKeyboard(evt);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _onCopyText(ev: ClipboardEvent): void {\r\n this.isTextHighlightOn = false;\r\n //when write permission to clipbaord data is denied\r\n try {\r\n ev.clipboardData && ev.clipboardData.setData(\"text/plain\", this._highlightedText);\r\n } catch {} //pass\r\n this._host.clipboardData = this._highlightedText;\r\n }\r\n /**\r\n * @internal\r\n */\r\n protected _onCutText(ev: ClipboardEvent): void {\r\n if (!this._highlightedText) {\r\n return;\r\n }\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this.isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n //when write permission to clipbaord data is denied\r\n try {\r\n ev.clipboardData && ev.clipboardData.setData(\"text/plain\", this._highlightedText);\r\n } catch {} //pass\r\n\r\n this._host.clipboardData = this._highlightedText;\r\n this._highlightedText = \"\";\r\n }\r\n /**\r\n * @internal\r\n */\r\n protected _onPasteText(ev: ClipboardEvent): void {\r\n let data: string;\r\n if (ev.clipboardData && ev.clipboardData.types.indexOf(\"text/plain\") !== -1) {\r\n data = ev.clipboardData.getData(\"text/plain\");\r\n } else {\r\n //get the cached data; returns blank string by default\r\n data = this._host.clipboardData;\r\n }\r\n if (this.isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex, data);\r\n this._cursorOffset = this._textWrapper.length - (this._startHighlightIndex + data.length);\r\n this.isTextHighlightOn = false;\r\n } else {\r\n const insertPosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(insertPosition, insertPosition, data);\r\n }\r\n this._textHasChanged();\r\n }\r\n\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\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 // Background\r\n if (this._isFocused) {\r\n if (this._focusedBackground) {\r\n context.fillStyle = this._isEnabled ? this._focusedBackground : this._disabledColor;\r\n\r\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n }\r\n } else if (this._background) {\r\n context.fillStyle = this._isEnabled ? this._background : this._disabledColor;\r\n\r\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n }\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowBlur = 0;\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n }\r\n\r\n if (!this._fontOffset || this._wasDirty) {\r\n this._fontOffset = Control._GetFontOffset(context.font, this._host.getScene()?.getEngine());\r\n }\r\n\r\n // Text\r\n const clipTextLeft = this._currentMeasure.left + this._margin.getValueInPixel(this._host, this._tempParentMeasure.width);\r\n if (this.color) {\r\n context.fillStyle = this.color;\r\n }\r\n\r\n let text = this._beforeRenderText(this._textWrapper);\r\n\r\n if (!this._isFocused && !this._textWrapper.text && this._placeholderText) {\r\n text = new TextWrapper();\r\n text.text = this._placeholderText;\r\n\r\n if (this._placeholderColor) {\r\n context.fillStyle = this._placeholderColor;\r\n }\r\n }\r\n\r\n this._textWidth = context.measureText(text.text).width;\r\n const marginWidth = this._margin.getValueInPixel(this._host, this._tempParentMeasure.width) * 2;\r\n if (this._autoStretchWidth) {\r\n this.width = Math.min(this._maxWidth.getValueInPixel(this._host, this._tempParentMeasure.width), this._textWidth + marginWidth) + \"px\";\r\n this._autoStretchWidth = true; // setting the width will have reset _autoStretchWidth to false!\r\n }\r\n\r\n const rootY = this._fontOffset.ascent + (this._currentMeasure.height - this._fontOffset.height) / 2;\r\n const availableWidth = this._width.getValueInPixel(this._host, this._tempParentMeasure.width) - marginWidth;\r\n\r\n context.save();\r\n context.beginPath();\r\n context.rect(clipTextLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, availableWidth + 2, this._currentMeasure.height);\r\n context.clip();\r\n\r\n if (this._isFocused && this._textWidth > availableWidth) {\r\n const textLeft = clipTextLeft - this._textWidth + availableWidth;\r\n if (!this._scrollLeft) {\r\n this._scrollLeft = textLeft;\r\n }\r\n } else {\r\n this._scrollLeft = clipTextLeft;\r\n }\r\n\r\n if (this.outlineWidth) {\r\n context.strokeText(text.text, this._scrollLeft, this._currentMeasure.top + rootY);\r\n }\r\n\r\n context.fillText(text.text, this._scrollLeft, this._currentMeasure.top + rootY);\r\n\r\n // Cursor\r\n if (this._isFocused) {\r\n // Need to move cursor\r\n if (this._clickedCoordinate) {\r\n const rightPosition = this._scrollLeft + this._textWidth;\r\n const absoluteCursorPosition = rightPosition - this._clickedCoordinate;\r\n let currentSize = 0;\r\n this._cursorOffset = 0;\r\n let previousDist = 0;\r\n do {\r\n if (this._cursorOffset) {\r\n previousDist = Math.abs(absoluteCursorPosition - currentSize);\r\n }\r\n this._cursorOffset++;\r\n currentSize = context.measureText(text.substr(text.length - this._cursorOffset, this._cursorOffset)).width;\r\n } while (currentSize < absoluteCursorPosition && text.length >= this._cursorOffset);\r\n\r\n // Find closest move\r\n if (Math.abs(absoluteCursorPosition - currentSize) > previousDist) {\r\n this._cursorOffset--;\r\n }\r\n\r\n this._blinkIsEven = false;\r\n this._clickedCoordinate = null;\r\n }\r\n\r\n // Render cursor\r\n if (!this._blinkIsEven) {\r\n const cursorOffsetText = text.substr(text.length - this._cursorOffset);\r\n const cursorOffsetWidth = context.measureText(cursorOffsetText).width;\r\n let cursorLeft = this._scrollLeft + this._textWidth - cursorOffsetWidth;\r\n\r\n if (cursorLeft < clipTextLeft) {\r\n this._scrollLeft += clipTextLeft - cursorLeft;\r\n cursorLeft = clipTextLeft;\r\n this._markAsDirty();\r\n } else if (cursorLeft > clipTextLeft + availableWidth) {\r\n this._scrollLeft += clipTextLeft + availableWidth - cursorLeft;\r\n cursorLeft = clipTextLeft + availableWidth;\r\n this._markAsDirty();\r\n }\r\n if (!this.isTextHighlightOn) {\r\n context.fillRect(cursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, 2, this._fontOffset.height);\r\n }\r\n }\r\n\r\n clearTimeout(this._blinkTimeout);\r\n this._blinkTimeout = <any>setTimeout(() => {\r\n this._blinkIsEven = !this._blinkIsEven;\r\n this._markAsDirty();\r\n }, 500);\r\n\r\n //show the highlighted text\r\n if (this.isTextHighlightOn) {\r\n clearTimeout(this._blinkTimeout);\r\n const highlightCursorOffsetWidth = context.measureText(text.substring(this._startHighlightIndex)).width;\r\n let highlightCursorLeft = this._scrollLeft + this._textWidth - highlightCursorOffsetWidth;\r\n this._highlightedText = text.substring(this._startHighlightIndex, this._endHighlightIndex);\r\n let width = context.measureText(text.substring(this._startHighlightIndex, this._endHighlightIndex)).width;\r\n if (highlightCursorLeft < clipTextLeft) {\r\n width = width - (clipTextLeft - highlightCursorLeft);\r\n if (!width) {\r\n // when using left arrow on text.length > availableWidth;\r\n // assigns the width of the first letter after clipTextLeft\r\n width = context.measureText(text.charAt(text.length - this._cursorOffset)).width;\r\n }\r\n highlightCursorLeft = clipTextLeft;\r\n }\r\n //for transparancy\r\n context.globalAlpha = this._highlighterOpacity;\r\n context.fillStyle = this._textHighlightColor;\r\n context.fillRect(highlightCursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, width, this._fontOffset.height);\r\n context.globalAlpha = 1.0;\r\n }\r\n }\r\n context.restore();\r\n\r\n // Border\r\n if (this._thickness) {\r\n if (this._isFocused) {\r\n if (this.focusedColor) {\r\n context.strokeStyle = this.focusedColor;\r\n }\r\n } else {\r\n if (this.color) {\r\n context.strokeStyle = this.color;\r\n }\r\n }\r\n\r\n context.lineWidth = this._thickness;\r\n\r\n context.strokeRect(\r\n this._currentMeasure.left + this._thickness / 2,\r\n this._currentMeasure.top + this._thickness / 2,\r\n this._currentMeasure.width - this._thickness,\r\n this._currentMeasure.height - this._thickness\r\n );\r\n }\r\n\r\n context.restore();\r\n }\r\n\r\n public override _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n this._clickedCoordinate = coordinates.x;\r\n this.isTextHighlightOn = false;\r\n this._highlightedText = \"\";\r\n this._cursorIndex = -1;\r\n this._isPointerDown = true;\r\n this._host._capturingControl[pointerId] = this;\r\n this._focusedBy = (pi.event as IPointerEvent).pointerType;\r\n if (this._host.focusedControl === this) {\r\n // Move cursor\r\n clearTimeout(this._blinkTimeout);\r\n this._markAsDirty();\r\n return true;\r\n }\r\n if (!this._isEnabled) {\r\n return false;\r\n }\r\n this._host.focusedControl = this;\r\n\r\n return true;\r\n }\r\n public override _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n if (this._host.focusedControl === this && this._isPointerDown && !this.isReadOnly) {\r\n this._clickedCoordinate = coordinates.x;\r\n this._markAsDirty();\r\n this._updateValueFromCursorIndex(this._cursorOffset);\r\n }\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public override _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\r\n this._isPointerDown = false;\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick);\r\n }\r\n\r\n protected _beforeRenderText(textWrapper: TextWrapper): TextWrapper {\r\n return textWrapper;\r\n }\r\n\r\n /** @internal */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private set isTextHighlightOn(value: boolean) {\r\n if (this._isTextHighlightOn === value) {\r\n return;\r\n }\r\n if (value) {\r\n this.onTextHighlightObservable.notifyObservers(this);\r\n }\r\n this._isTextHighlightOn = value;\r\n }\r\n\r\n /** @internal */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private get isTextHighlightOn(): boolean {\r\n return this._isTextHighlightOn;\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n\r\n this.onBlurObservable.clear();\r\n this.onFocusObservable.clear();\r\n this.onTextChangedObservable.clear();\r\n this.onTextCopyObservable.clear();\r\n this.onTextCutObservable.clear();\r\n this.onTextPasteObservable.clear();\r\n this.onTextHighlightObservable.clear();\r\n this.onKeyboardEventProcessedObservable.clear();\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the InputText class with the type store for serialization support.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterInputText(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GUI.InputText\", InputText);\r\n}\r\n"]}
|
|
@@ -56,6 +56,7 @@ export declare class Line extends Control {
|
|
|
56
56
|
protected _getTypeName(): string;
|
|
57
57
|
_draw(context: ICanvasRenderingContext): void;
|
|
58
58
|
_measure(): void;
|
|
59
|
+
protected _preMeasure(parentMeasure: Measure): void;
|
|
59
60
|
_layout(parentMeasure: Measure, context: ICanvasRenderingContext): boolean;
|
|
60
61
|
protected _computeAlignment(parentMeasure: Measure): void;
|
|
61
62
|
/**
|
package/2D/controls/line.pure.js
CHANGED
|
@@ -116,11 +116,11 @@ let Line = (() => {
|
|
|
116
116
|
}
|
|
117
117
|
/** @internal */
|
|
118
118
|
get _effectiveX2() {
|
|
119
|
-
return (this._connectedControl ? this._connectedControl.centerX : 0) + this._x2.getValue(this._host);
|
|
119
|
+
return (this._connectedControl ? this._connectedControl.centerX - this._cachedParentMeasure.left : 0) + this._x2.getValue(this._host);
|
|
120
120
|
}
|
|
121
121
|
/** @internal */
|
|
122
122
|
get _effectiveY2() {
|
|
123
|
-
return (this._connectedControl ? this._connectedControl.centerY : 0) + this._y2.getValue(this._host);
|
|
123
|
+
return (this._connectedControl ? this._connectedControl.centerY - this._cachedParentMeasure.top : 0) + this._y2.getValue(this._host);
|
|
124
124
|
}
|
|
125
125
|
/**
|
|
126
126
|
* Creates a new Line
|
|
@@ -170,6 +170,9 @@ let Line = (() => {
|
|
|
170
170
|
this._currentMeasure.width = Math.abs(this._x1.getValue(this._host) - this._effectiveX2) + this._lineWidth;
|
|
171
171
|
this._currentMeasure.height = Math.abs(this._y1.getValue(this._host) - this._effectiveY2) + this._lineWidth;
|
|
172
172
|
}
|
|
173
|
+
_preMeasure(parentMeasure) {
|
|
174
|
+
this._cachedParentMeasure.copyFrom(parentMeasure);
|
|
175
|
+
}
|
|
173
176
|
_layout(parentMeasure, context) {
|
|
174
177
|
if (this._connectedControl) {
|
|
175
178
|
// If we have a connected control, we need to let it layout first so we can ensure our layout math uses its latest position
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line.pure.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/line.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type Observer } from \"core/Misc/observable\";\r\nimport { Vector3, Matrix } from \"core/Maths/math.vector.pure\";\r\nimport { Tools } from \"core/Misc/tools.pure\";\r\nimport { type Scene } from \"core/scene\";\r\n\r\nimport { Control } from \"./control.pure\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport { type Measure } from \"../measure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { type ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/** Class used to render 2D lines */\r\nexport class Line extends Control {\r\n private _lineWidth = 1;\r\n /** @internal */\r\n public _x1 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _y1 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _x2 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _y2 = new ValueAndUnit(0);\r\n private _dash = new Array<number>();\r\n private _connectedControl: Control;\r\n private _connectedControlDirtyObserver: Nullable<Observer<Control>>;\r\n\r\n /** Gets or sets the dash pattern */\r\n @serialize()\r\n public get dash(): Array<number> {\r\n return this._dash;\r\n }\r\n\r\n public set dash(value: Array<number>) {\r\n if (this._dash === value) {\r\n return;\r\n }\r\n\r\n this._dash = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the control connected with the line end */\r\n public get connectedControl(): Control {\r\n return this._connectedControl;\r\n }\r\n\r\n public set connectedControl(value: Control) {\r\n // Don't allow circular references, and no-op if the same control is assigned\r\n if (this._connectedControl === value || (value instanceof Line && value._connectedControl === (this as Control))) {\r\n return;\r\n }\r\n\r\n if (this._connectedControlDirtyObserver && this._connectedControl) {\r\n this._connectedControl.onDirtyObservable.remove(this._connectedControlDirtyObserver);\r\n this._connectedControlDirtyObserver = null;\r\n }\r\n\r\n if (value) {\r\n this._connectedControlDirtyObserver = value.onDirtyObservable.add(() => this._markAsDirty());\r\n }\r\n\r\n this._connectedControl = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets start coordinates on X axis */\r\n @serialize()\r\n public get x1(): string | number {\r\n return this._x1.toString(this._host);\r\n }\r\n\r\n public set x1(value: string | number) {\r\n if (this._x1.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._x1.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets start coordinates on Y axis */\r\n @serialize()\r\n public get y1(): string | number {\r\n return this._y1.toString(this._host);\r\n }\r\n\r\n public set y1(value: string | number) {\r\n if (this._y1.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._y1.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets end coordinates on X axis */\r\n @serialize()\r\n public get x2(): string | number {\r\n return this._x2.toString(this._host);\r\n }\r\n\r\n public set x2(value: string | number) {\r\n if (this._x2.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._x2.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets end coordinates on Y axis */\r\n @serialize()\r\n public get y2(): string | number {\r\n return this._y2.toString(this._host);\r\n }\r\n\r\n public set y2(value: string | number) {\r\n if (this._y2.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._y2.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets line width */\r\n @serialize()\r\n public get lineWidth(): number {\r\n return this._lineWidth;\r\n }\r\n\r\n public set lineWidth(value: number) {\r\n if (this._lineWidth === value) {\r\n return;\r\n }\r\n\r\n this._lineWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets horizontal alignment */\r\n public override set horizontalAlignment(value: number) {\r\n return;\r\n }\r\n\r\n /** Gets or sets vertical alignment */\r\n public override set verticalAlignment(value: number) {\r\n return;\r\n }\r\n\r\n /** @internal */\r\n public get _effectiveX2(): number {\r\n return (this._connectedControl ? this._connectedControl.centerX : 0) + this._x2.getValue(this._host);\r\n }\r\n\r\n /** @internal */\r\n public get _effectiveY2(): number {\r\n return (this._connectedControl ? this._connectedControl.centerY : 0) + this._y2.getValue(this._host);\r\n }\r\n\r\n /**\r\n * Creates a new Line\r\n * @param name defines the control name\r\n */\r\n constructor(public override name?: string) {\r\n super(name);\r\n\r\n this._automaticSize = true;\r\n\r\n this.isHitTestVisible = false;\r\n this._horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n this._verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"Line\";\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 this._applyStates(context);\r\n context.strokeStyle = this._getColor(context);\r\n context.lineWidth = this._lineWidth;\r\n context.setLineDash(this._dash);\r\n\r\n context.beginPath();\r\n context.moveTo(this._cachedParentMeasure.left + this._x1.getValue(this._host), this._cachedParentMeasure.top + this._y1.getValue(this._host));\r\n\r\n context.lineTo(this._cachedParentMeasure.left + this._effectiveX2, this._cachedParentMeasure.top + this._effectiveY2);\r\n context.stroke();\r\n\r\n context.restore();\r\n }\r\n\r\n public override _measure(): void {\r\n // Width / Height\r\n this._currentMeasure.width = Math.abs(this._x1.getValue(this._host) - this._effectiveX2) + this._lineWidth;\r\n this._currentMeasure.height = Math.abs(this._y1.getValue(this._host) - this._effectiveY2) + this._lineWidth;\r\n }\r\n\r\n public override _layout(parentMeasure: Measure, context: ICanvasRenderingContext): boolean {\r\n if (this._connectedControl) {\r\n // If we have a connected control, we need to let it layout first so we can ensure our layout math uses its latest position\r\n this._connectedControl._layout(parentMeasure, context);\r\n }\r\n return super._layout(parentMeasure, context);\r\n }\r\n\r\n protected override _computeAlignment(parentMeasure: Measure): void {\r\n this._currentMeasure.left = parentMeasure.left + Math.min(this._x1.getValue(this._host), this._effectiveX2) - this._lineWidth / 2;\r\n this._currentMeasure.top = parentMeasure.top + Math.min(this._y1.getValue(this._host), this._effectiveY2) - this._lineWidth / 2;\r\n }\r\n\r\n /**\r\n * Move one end of the line given 3D cartesian coordinates.\r\n * @param position Targeted world position\r\n * @param scene Scene\r\n * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.\r\n */\r\n public override moveToVector3(position: Vector3, scene: Scene, end: boolean = false): void {\r\n if (!this._host || this.parent !== this._host._rootContainer) {\r\n Tools.Error(\"Cannot move a control to a vector3 if the control is not at root level\");\r\n return;\r\n }\r\n\r\n const globalViewport = this._host._getGlobalViewport();\r\n const projectedPosition = Vector3.Project(position, Matrix.IdentityReadOnly, scene.getTransformMatrix(), globalViewport);\r\n\r\n this._moveToProjectedPosition(projectedPosition, end);\r\n\r\n if (projectedPosition.z < 0 || projectedPosition.z > 1) {\r\n this.notRenderable = true;\r\n return;\r\n }\r\n this.notRenderable = false;\r\n }\r\n\r\n /**\r\n * Move one end of the line to a position in screen absolute space.\r\n * @param projectedPosition Position in screen absolute space (X, Y)\r\n * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.\r\n */\r\n public override _moveToProjectedPosition(projectedPosition: Vector3, end: boolean = false): void {\r\n const x: string = projectedPosition.x + this._linkOffsetX.getValue(this._host) + \"px\";\r\n const y: string = projectedPosition.y + this._linkOffsetY.getValue(this._host) + \"px\";\r\n\r\n if (end) {\r\n this.x2 = x;\r\n this.y2 = y;\r\n this._x2.ignoreAdaptiveScaling = true;\r\n this._y2.ignoreAdaptiveScaling = true;\r\n } else {\r\n this.x1 = x;\r\n this.y1 = y;\r\n this._x1.ignoreAdaptiveScaling = true;\r\n this._y1.ignoreAdaptiveScaling = true;\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the Line class with the type store for serialization support.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterLine(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GUI.Line\", Line);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"line.pure.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/line.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type Observer } from \"core/Misc/observable\";\r\nimport { Vector3, Matrix } from \"core/Maths/math.vector.pure\";\r\nimport { Tools } from \"core/Misc/tools.pure\";\r\nimport { type Scene } from \"core/scene\";\r\n\r\nimport { Control } from \"./control.pure\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport { type Measure } from \"../measure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { type ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/** Class used to render 2D lines */\r\nexport class Line extends Control {\r\n private _lineWidth = 1;\r\n /** @internal */\r\n public _x1 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _y1 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _x2 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _y2 = new ValueAndUnit(0);\r\n private _dash = new Array<number>();\r\n private _connectedControl: Control;\r\n private _connectedControlDirtyObserver: Nullable<Observer<Control>>;\r\n\r\n /** Gets or sets the dash pattern */\r\n @serialize()\r\n public get dash(): Array<number> {\r\n return this._dash;\r\n }\r\n\r\n public set dash(value: Array<number>) {\r\n if (this._dash === value) {\r\n return;\r\n }\r\n\r\n this._dash = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the control connected with the line end */\r\n public get connectedControl(): Control {\r\n return this._connectedControl;\r\n }\r\n\r\n public set connectedControl(value: Control) {\r\n // Don't allow circular references, and no-op if the same control is assigned\r\n if (this._connectedControl === value || (value instanceof Line && value._connectedControl === (this as Control))) {\r\n return;\r\n }\r\n\r\n if (this._connectedControlDirtyObserver && this._connectedControl) {\r\n this._connectedControl.onDirtyObservable.remove(this._connectedControlDirtyObserver);\r\n this._connectedControlDirtyObserver = null;\r\n }\r\n\r\n if (value) {\r\n this._connectedControlDirtyObserver = value.onDirtyObservable.add(() => this._markAsDirty());\r\n }\r\n\r\n this._connectedControl = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets start coordinates on X axis */\r\n @serialize()\r\n public get x1(): string | number {\r\n return this._x1.toString(this._host);\r\n }\r\n\r\n public set x1(value: string | number) {\r\n if (this._x1.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._x1.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets start coordinates on Y axis */\r\n @serialize()\r\n public get y1(): string | number {\r\n return this._y1.toString(this._host);\r\n }\r\n\r\n public set y1(value: string | number) {\r\n if (this._y1.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._y1.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets end coordinates on X axis */\r\n @serialize()\r\n public get x2(): string | number {\r\n return this._x2.toString(this._host);\r\n }\r\n\r\n public set x2(value: string | number) {\r\n if (this._x2.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._x2.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets end coordinates on Y axis */\r\n @serialize()\r\n public get y2(): string | number {\r\n return this._y2.toString(this._host);\r\n }\r\n\r\n public set y2(value: string | number) {\r\n if (this._y2.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._y2.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets line width */\r\n @serialize()\r\n public get lineWidth(): number {\r\n return this._lineWidth;\r\n }\r\n\r\n public set lineWidth(value: number) {\r\n if (this._lineWidth === value) {\r\n return;\r\n }\r\n\r\n this._lineWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets horizontal alignment */\r\n public override set horizontalAlignment(value: number) {\r\n return;\r\n }\r\n\r\n /** Gets or sets vertical alignment */\r\n public override set verticalAlignment(value: number) {\r\n return;\r\n }\r\n\r\n /** @internal */\r\n public get _effectiveX2(): number {\r\n return (this._connectedControl ? this._connectedControl.centerX - this._cachedParentMeasure.left : 0) + this._x2.getValue(this._host);\r\n }\r\n\r\n /** @internal */\r\n public get _effectiveY2(): number {\r\n return (this._connectedControl ? this._connectedControl.centerY - this._cachedParentMeasure.top : 0) + this._y2.getValue(this._host);\r\n }\r\n\r\n /**\r\n * Creates a new Line\r\n * @param name defines the control name\r\n */\r\n constructor(public override name?: string) {\r\n super(name);\r\n\r\n this._automaticSize = true;\r\n\r\n this.isHitTestVisible = false;\r\n this._horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n this._verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"Line\";\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 this._applyStates(context);\r\n context.strokeStyle = this._getColor(context);\r\n context.lineWidth = this._lineWidth;\r\n context.setLineDash(this._dash);\r\n\r\n context.beginPath();\r\n context.moveTo(this._cachedParentMeasure.left + this._x1.getValue(this._host), this._cachedParentMeasure.top + this._y1.getValue(this._host));\r\n\r\n context.lineTo(this._cachedParentMeasure.left + this._effectiveX2, this._cachedParentMeasure.top + this._effectiveY2);\r\n context.stroke();\r\n\r\n context.restore();\r\n }\r\n\r\n public override _measure(): void {\r\n // Width / Height\r\n this._currentMeasure.width = Math.abs(this._x1.getValue(this._host) - this._effectiveX2) + this._lineWidth;\r\n this._currentMeasure.height = Math.abs(this._y1.getValue(this._host) - this._effectiveY2) + this._lineWidth;\r\n }\r\n\r\n protected override _preMeasure(parentMeasure: Measure): void {\r\n this._cachedParentMeasure.copyFrom(parentMeasure);\r\n }\r\n\r\n public override _layout(parentMeasure: Measure, context: ICanvasRenderingContext): boolean {\r\n if (this._connectedControl) {\r\n // If we have a connected control, we need to let it layout first so we can ensure our layout math uses its latest position\r\n this._connectedControl._layout(parentMeasure, context);\r\n }\r\n return super._layout(parentMeasure, context);\r\n }\r\n\r\n protected override _computeAlignment(parentMeasure: Measure): void {\r\n this._currentMeasure.left = parentMeasure.left + Math.min(this._x1.getValue(this._host), this._effectiveX2) - this._lineWidth / 2;\r\n this._currentMeasure.top = parentMeasure.top + Math.min(this._y1.getValue(this._host), this._effectiveY2) - this._lineWidth / 2;\r\n }\r\n\r\n /**\r\n * Move one end of the line given 3D cartesian coordinates.\r\n * @param position Targeted world position\r\n * @param scene Scene\r\n * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.\r\n */\r\n public override moveToVector3(position: Vector3, scene: Scene, end: boolean = false): void {\r\n if (!this._host || this.parent !== this._host._rootContainer) {\r\n Tools.Error(\"Cannot move a control to a vector3 if the control is not at root level\");\r\n return;\r\n }\r\n\r\n const globalViewport = this._host._getGlobalViewport();\r\n const projectedPosition = Vector3.Project(position, Matrix.IdentityReadOnly, scene.getTransformMatrix(), globalViewport);\r\n\r\n this._moveToProjectedPosition(projectedPosition, end);\r\n\r\n if (projectedPosition.z < 0 || projectedPosition.z > 1) {\r\n this.notRenderable = true;\r\n return;\r\n }\r\n this.notRenderable = false;\r\n }\r\n\r\n /**\r\n * Move one end of the line to a position in screen absolute space.\r\n * @param projectedPosition Position in screen absolute space (X, Y)\r\n * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.\r\n */\r\n public override _moveToProjectedPosition(projectedPosition: Vector3, end: boolean = false): void {\r\n const x: string = projectedPosition.x + this._linkOffsetX.getValue(this._host) + \"px\";\r\n const y: string = projectedPosition.y + this._linkOffsetY.getValue(this._host) + \"px\";\r\n\r\n if (end) {\r\n this.x2 = x;\r\n this.y2 = y;\r\n this._x2.ignoreAdaptiveScaling = true;\r\n this._y2.ignoreAdaptiveScaling = true;\r\n } else {\r\n this.x1 = x;\r\n this.y1 = y;\r\n this._x1.ignoreAdaptiveScaling = true;\r\n this._y1.ignoreAdaptiveScaling = true;\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the Line class with the type store for serialization support.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterLine(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GUI.Line\", Line);\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babylonjs/gui",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.17.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"module": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"postcompile": "build-tools -c add-js-to-es6"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@babylonjs/core": "9.
|
|
21
|
+
"@babylonjs/core": "9.17.1",
|
|
22
22
|
"@dev/build-tools": "^1.0.0",
|
|
23
23
|
"@dev/gui": "1.0.0"
|
|
24
24
|
},
|