@babylonjs/gui 5.0.0-beta.9 → 5.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/2D/advancedDynamicTexture.d.ts +11 -0
- package/2D/advancedDynamicTexture.js +95 -48
- package/2D/advancedDynamicTexture.js.map +1 -1
- package/2D/controls/container.d.ts +1 -1
- package/2D/controls/container.js.map +1 -1
- package/2D/controls/control.d.ts +7 -7
- package/2D/controls/control.js +12 -12
- package/2D/controls/control.js.map +1 -1
- package/2D/controls/inputText.d.ts +2 -0
- package/2D/controls/inputText.js +2 -1
- package/2D/controls/inputText.js.map +1 -1
- package/2D/controls/sliders/baseSlider.js +1 -1
- package/2D/controls/sliders/baseSlider.js.map +1 -1
- package/2D/controls/textBlock.d.ts +1 -0
- package/2D/controls/textBlock.js +17 -7
- package/2D/controls/textBlock.js.map +1 -1
- package/2D/xmlLoader.js +8 -1
- package/2D/xmlLoader.js.map +1 -1
- package/3D/controls/contentDisplay3D.js +1 -1
- package/3D/controls/contentDisplay3D.js.map +1 -1
- package/3D/controls/holographicSlate.d.ts +45 -35
- package/3D/controls/holographicSlate.js +172 -113
- package/3D/controls/holographicSlate.js.map +1 -1
- package/3D/controls/touchButton3D.d.ts +12 -1
- package/3D/controls/touchButton3D.js +43 -4
- package/3D/controls/touchButton3D.js.map +1 -1
- package/3D/controls/touchHolographicButton.d.ts +5 -0
- package/3D/controls/touchHolographicButton.js +17 -4
- package/3D/controls/touchHolographicButton.js.map +1 -1
- package/3D/gizmos/slateGizmo.d.ts +2 -4
- package/3D/gizmos/slateGizmo.js +24 -18
- package/3D/gizmos/slateGizmo.js.map +1 -1
- package/package.json +2 -2
|
@@ -25,6 +25,8 @@ export declare class InputText extends Control implements IFocusableControl {
|
|
|
25
25
|
private _autoStretchWidth;
|
|
26
26
|
private _maxWidth;
|
|
27
27
|
private _isFocused;
|
|
28
|
+
/** the type of device that most recently focused the input: "mouse", "touch" or "pen" */
|
|
29
|
+
private _focusedBy;
|
|
28
30
|
private _blinkTimeout;
|
|
29
31
|
private _blinkIsEven;
|
|
30
32
|
private _cursorOffset;
|
package/2D/controls/inputText.js
CHANGED
|
@@ -386,7 +386,7 @@ var InputText = /** @class */ (function (_super) {
|
|
|
386
386
|
this._cursorOffset = 0;
|
|
387
387
|
this._markAsDirty();
|
|
388
388
|
this.onFocusObservable.notifyObservers(this);
|
|
389
|
-
if (
|
|
389
|
+
if (this._focusedBy === "touch" && !this.disableMobilePrompt) {
|
|
390
390
|
var value = prompt(this.promptMessage);
|
|
391
391
|
if (value !== null) {
|
|
392
392
|
this.text = value;
|
|
@@ -999,6 +999,7 @@ var InputText = /** @class */ (function (_super) {
|
|
|
999
999
|
this._cursorIndex = -1;
|
|
1000
1000
|
this._isPointerDown = true;
|
|
1001
1001
|
this._host._capturingControl[pointerId] = this;
|
|
1002
|
+
this._focusedBy = pi.event.pointerType;
|
|
1002
1003
|
if (this._host.focusedControl === this) {
|
|
1003
1004
|
// Move cursor
|
|
1004
1005
|
clearTimeout(this._blinkTimeout);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputText.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/2D/controls/inputText.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"@babylonjs/core/types\";\nimport { Observable, Observer } from \"@babylonjs/core/Misc/observable\";\nimport { Vector2 } from \"@babylonjs/core/Maths/math.vector\";\nimport { ClipboardEventTypes, ClipboardInfo } from \"@babylonjs/core/Events/clipboardEvents\";\nimport { PointerInfo, PointerEventTypes, PointerInfoBase } from '@babylonjs/core/Events/pointerEvents';\n\nimport { Control } from \"./control\";\nimport { IFocusableControl } from \"./focusableControl\";\nimport { ValueAndUnit } from \"../valueAndUnit\";\nimport { VirtualKeyboard } from \"./virtualKeyboard\";\nimport { RegisterClass } from '@babylonjs/core/Misc/typeStore';\nimport { Measure } from '../measure';\nimport { TextWrapper } from './textWrapper';\nimport { serialize } from '@babylonjs/core/Misc/decorators';\nimport { IKeyboardEvent } from '@babylonjs/core/Events/deviceInputEvents';\nimport { ICanvasRenderingContext } from \"@babylonjs/core/Engines/ICanvas\";\n\n/**\n * Class used to create input text control\n */\nexport class InputText extends Control implements IFocusableControl {\n private _textWrapper: TextWrapper;\n private _placeholderText = \"\";\n private _background = \"#222222\";\n private _focusedBackground = \"#000000\";\n private _focusedColor = \"white\";\n private _placeholderColor = \"gray\";\n private _thickness = 1;\n private _margin = new ValueAndUnit(10, ValueAndUnit.UNITMODE_PIXEL);\n private _autoStretchWidth = true;\n private _maxWidth = new ValueAndUnit(1, ValueAndUnit.UNITMODE_PERCENTAGE, false);\n private _isFocused = false;\n private _blinkTimeout: number;\n private _blinkIsEven = false;\n private _cursorOffset = 0;\n private _scrollLeft: Nullable<number>;\n private _textWidth: number;\n private _clickedCoordinate: Nullable<number>;\n private _deadKey = false;\n private _addKey = true;\n private _currentKey = \"\";\n private _isTextHighlightOn = false;\n private _textHighlightColor = \"#d5e0ff\";\n private _highligherOpacity = 0.4;\n private _highlightedText = \"\";\n private _startHighlightIndex = 0;\n private _endHighlightIndex = 0;\n private _cursorIndex = -1;\n private _onFocusSelectAll = false;\n private _isPointerDown = false;\n private _onClipboardObserver: Nullable<Observer<ClipboardInfo>>;\n private _onPointerDblTapObserver: Nullable<Observer<PointerInfo>>;\n\n /** @hidden */\n public _connectedVirtualKeyboard: Nullable<VirtualKeyboard>;\n\n /** Gets or sets a string representing the message displayed on mobile when the control gets the focus */\n @serialize()\n public promptMessage = \"Please enter text:\";\n /** Force disable prompt on mobile device */\n @serialize()\n public disableMobilePrompt = false;\n\n /** Observable raised when the text changes */\n public onTextChangedObservable = new Observable<InputText>();\n /** Observable raised just before an entered character is to be added */\n public onBeforeKeyAddObservable = new Observable<InputText>();\n /** Observable raised when the control gets the focus */\n public onFocusObservable = new Observable<InputText>();\n /** Observable raised when the control loses the focus */\n public onBlurObservable = new Observable<InputText>();\n /**Observable raised when the text is highlighted */\n public onTextHighlightObservable = new Observable<InputText>();\n /**Observable raised when copy event is triggered */\n public onTextCopyObservable = new Observable<InputText>();\n /** Observable raised when cut event is triggered */\n public onTextCutObservable = new Observable<InputText>();\n /** Observable raised when paste event is triggered */\n public onTextPasteObservable = new Observable<InputText>();\n /** Observable raised when a key event was processed */\n public onKeyboardEventProcessedObservable = new Observable<IKeyboardEvent>();\n\n /** Gets or sets the maximum width allowed by the control */\n @serialize()\n public get maxWidth(): string | number {\n return this._maxWidth.toString(this._host);\n }\n\n /** Gets the maximum width allowed by the control in pixels */\n public get maxWidthInPixels(): number {\n return this._maxWidth.getValueInPixel(this._host, this._cachedParentMeasure.width);\n }\n\n public set maxWidth(value: string | number) {\n if (this._maxWidth.toString(this._host) === value) {\n return;\n }\n\n if (this._maxWidth.fromString(value)) {\n this._markAsDirty();\n }\n }\n\n /** Gets or sets the text highlighter transparency; default: 0.4 */\n @serialize()\n public get highligherOpacity(): number {\n return this._highligherOpacity;\n }\n\n public set highligherOpacity(value: number) {\n if (this._highligherOpacity === value) {\n return;\n }\n this._highligherOpacity = value;\n this._markAsDirty();\n }\n /** Gets or sets a boolean indicating whether to select complete text by default on input focus */\n @serialize()\n public get onFocusSelectAll(): boolean {\n return this._onFocusSelectAll;\n }\n\n public set onFocusSelectAll(value: boolean) {\n if (this._onFocusSelectAll === value) {\n return;\n }\n\n this._onFocusSelectAll = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the text hightlight color */\n @serialize()\n public get textHighlightColor(): string {\n return this._textHighlightColor;\n }\n\n public set textHighlightColor(value: string) {\n if (this._textHighlightColor === value) {\n return;\n }\n this._textHighlightColor = value;\n this._markAsDirty();\n }\n\n /** Gets or sets control margin */\n @serialize()\n public get margin(): string {\n return this._margin.toString(this._host);\n }\n\n /** Gets control margin in pixels */\n public get marginInPixels(): number {\n return this._margin.getValueInPixel(this._host, this._cachedParentMeasure.width);\n }\n\n public set margin(value: string) {\n if (this._margin.toString(this._host) === value) {\n return;\n }\n\n if (this._margin.fromString(value)) {\n this._markAsDirty();\n }\n }\n\n /** Gets or sets a boolean indicating if the control can auto stretch its width to adapt to the text */\n @serialize()\n public get autoStretchWidth(): boolean {\n return this._autoStretchWidth;\n }\n\n public set autoStretchWidth(value: boolean) {\n if (this._autoStretchWidth === value) {\n return;\n }\n\n this._autoStretchWidth = value;\n this._markAsDirty();\n }\n\n /** Gets or sets border thickness */\n @serialize()\n public get thickness(): number {\n return this._thickness;\n }\n\n public set thickness(value: number) {\n if (this._thickness === value) {\n return;\n }\n\n this._thickness = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the background color when focused */\n @serialize()\n public get focusedBackground(): string {\n return this._focusedBackground;\n }\n\n public set focusedBackground(value: string) {\n if (this._focusedBackground === value) {\n return;\n }\n\n this._focusedBackground = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the background color when focused */\n @serialize()\n public get focusedColor(): string {\n return this._focusedColor;\n }\n\n public set focusedColor(value: string) {\n if (this._focusedColor === value) {\n return;\n }\n\n this._focusedColor = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the background color */\n @serialize()\n public get background(): string {\n return this._background;\n }\n\n public set background(value: string) {\n if (this._background === value) {\n return;\n }\n\n this._background = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the placeholder color */\n @serialize()\n public get placeholderColor(): string {\n return this._placeholderColor;\n }\n\n public set placeholderColor(value: string) {\n if (this._placeholderColor === value) {\n return;\n }\n\n this._placeholderColor = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the text displayed when the control is empty */\n @serialize()\n public get placeholderText(): string {\n return this._placeholderText;\n }\n\n public set placeholderText(value: string) {\n if (this._placeholderText === value) {\n return;\n }\n this._placeholderText = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the dead key flag */\n @serialize()\n public get deadKey(): boolean {\n return this._deadKey;\n }\n\n public set deadKey(flag: boolean) {\n this._deadKey = flag;\n }\n\n /** Gets or sets the highlight text */\n public get highlightedText(): string {\n return this._highlightedText;\n }\n public set highlightedText(text: string) {\n if (this._highlightedText === text) {\n return;\n }\n this._highlightedText = text;\n this._markAsDirty();\n }\n\n /** Gets or sets if the current key should be added */\n public get addKey(): boolean {\n return this._addKey;\n }\n\n public set addKey(flag: boolean) {\n this._addKey = flag;\n }\n\n /** Gets or sets the value of the current key being entered */\n public get currentKey(): string {\n return this._currentKey;\n }\n\n public set currentKey(key: string) {\n this._currentKey = key;\n }\n\n /** Gets or sets the text displayed in the control */\n @serialize()\n public get text(): string {\n return this._textWrapper.text;\n }\n\n public set text(value: string) {\n let valueAsString = value.toString(); // Forcing convertion\n\n if (!this._textWrapper) {\n this._textWrapper = new TextWrapper();\n }\n\n if (this._textWrapper.text === valueAsString) {\n return;\n }\n this._textWrapper.text = valueAsString;\n this._textHasChanged();\n }\n\n private _textHasChanged(): void {\n this._markAsDirty();\n this.onTextChangedObservable.notifyObservers(this);\n }\n\n /** Gets or sets control width */\n @serialize()\n public get width(): string | number {\n return this._width.toString(this._host);\n }\n\n public set width(value: string | number) {\n if (this._width.toString(this._host) === value) {\n return;\n }\n\n if (this._width.fromString(value)) {\n this._markAsDirty();\n }\n\n this.autoStretchWidth = false;\n }\n\n /**\n * Creates a new InputText\n * @param name defines the control name\n * @param text defines the text of the control\n */\n constructor(public name?: string, text: string = \"\") {\n super(name);\n\n this.text = text;\n this.isPointerBlocker = true;\n }\n\n /** @hidden */\n public onBlur(): void {\n this._isFocused = false;\n this._scrollLeft = null;\n this._cursorOffset = 0;\n clearTimeout(this._blinkTimeout);\n this._markAsDirty();\n\n this.onBlurObservable.notifyObservers(this);\n\n this._host.unRegisterClipboardEvents();\n if (this._onClipboardObserver) {\n this._host.onClipboardObservable.remove(this._onClipboardObserver);\n }\n let scene = this._host.getScene();\n if (this._onPointerDblTapObserver && scene) {\n scene.onPointerObservable.remove(this._onPointerDblTapObserver);\n }\n }\n\n /** @hidden */\n public onFocus(): void {\n if (!this._isEnabled) {\n return;\n }\n this._scrollLeft = null;\n this._isFocused = true;\n this._blinkIsEven = false;\n this._cursorOffset = 0;\n this._markAsDirty();\n\n this.onFocusObservable.notifyObservers(this);\n\n if (navigator.userAgent.indexOf(\"Mobile\") !== -1 && !this.disableMobilePrompt) {\n let value = prompt(this.promptMessage);\n\n if (value !== null) {\n this.text = value;\n }\n this._host.focusedControl = null;\n return;\n }\n\n this._host.registerClipboardEvents();\n\n this._onClipboardObserver = this._host.onClipboardObservable.add((clipboardInfo) => {\n // process clipboard event, can be configured.\n switch (clipboardInfo.type) {\n case ClipboardEventTypes.COPY:\n this._onCopyText(clipboardInfo.event);\n this.onTextCopyObservable.notifyObservers(this);\n break;\n case ClipboardEventTypes.CUT:\n this._onCutText(clipboardInfo.event);\n this.onTextCutObservable.notifyObservers(this);\n break;\n case ClipboardEventTypes.PASTE:\n this._onPasteText(clipboardInfo.event);\n this.onTextPasteObservable.notifyObservers(this);\n break;\n default: return;\n }\n });\n\n let scene = this._host.getScene();\n if (scene) {\n //register the pointer double tap event\n this._onPointerDblTapObserver = scene.onPointerObservable.add((pointerInfo) => {\n if (!this._isFocused) {\n return;\n }\n if (pointerInfo.type === PointerEventTypes.POINTERDOUBLETAP) {\n this._processDblClick(pointerInfo);\n }\n });\n }\n\n if (this._onFocusSelectAll) {\n this._selectAllText();\n }\n\n }\n\n /**\n * Function to focus an inputText programmatically\n */\n public focus() {\n this._host.moveFocusToControl(this);\n }\n\n /**\n * Function to unfocus an inputText programmatically\n */\n public blur() {\n this._host.focusedControl = null;\n }\n\n protected _getTypeName(): string {\n return \"InputText\";\n }\n\n /**\n * Function called to get the list of controls that should not steal the focus from this control\n * @returns an array of controls\n */\n public keepsFocusWith(): Nullable<Control[]> {\n if (!this._connectedVirtualKeyboard) {\n return null;\n }\n return [this._connectedVirtualKeyboard];\n }\n\n /** @hidden */\n public processKey(keyCode: number, key?: string, evt?: IKeyboardEvent) {\n if (this.isReadOnly) {\n return;\n }\n\n //return if clipboard event keys (i.e -ctr/cmd + c,v,x)\n if (evt && (evt.ctrlKey || evt.metaKey) && (keyCode === 67 || keyCode === 86 || keyCode === 88)) {\n return;\n }\n\n //select all\n if (evt && (evt.ctrlKey || evt.metaKey) && keyCode === 65) {\n this._selectAllText();\n evt.preventDefault();\n return;\n }\n // Specific cases\n switch (keyCode) {\n case 32: //SPACE\n key = \" \"; //ie11 key for space is \"Spacebar\"\n break;\n case 191: //SLASH\n if (evt) {\n evt.preventDefault();\n }\n break;\n case 8: // BACKSPACE\n if (this._textWrapper.text && this._textWrapper.length > 0) {\n //delete the highlighted text\n if (this._isTextHighlightOn) {\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\n this._textHasChanged();\n this._isTextHighlightOn = false;\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\n this._blinkIsEven = false;\n if (evt) {\n evt.preventDefault();\n }\n return;\n }\n //delete single character\n if (this._cursorOffset === 0) {\n this.text = this._textWrapper.substr(0, this._textWrapper.length - 1);\n } else {\n let deletePosition = this._textWrapper.length - this._cursorOffset;\n if (deletePosition > 0) {\n this._textWrapper.removePart(deletePosition - 1, deletePosition);\n this._textHasChanged();\n }\n }\n }\n if (evt) {\n evt.preventDefault();\n }\n return;\n case 46: // DELETE\n if (this._isTextHighlightOn) {\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\n this._textHasChanged();\n this._isTextHighlightOn = false;\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\n if (evt) {\n evt.preventDefault();\n }\n return;\n }\n if (this._textWrapper.text && this._textWrapper.length > 0 && this._cursorOffset > 0) {\n let deletePosition = this._textWrapper.length - this._cursorOffset;\n this._textWrapper.removePart(deletePosition, deletePosition + 1);\n this._textHasChanged();\n this._cursorOffset--;\n }\n if (evt) {\n evt.preventDefault();\n }\n return;\n case 13: // RETURN\n this._host.focusedControl = null;\n this._isTextHighlightOn = false;\n return;\n case 35: // END\n this._cursorOffset = 0;\n this._blinkIsEven = false;\n this._isTextHighlightOn = false;\n this._markAsDirty();\n return;\n case 36: // HOME\n this._cursorOffset = this._textWrapper.length;\n this._blinkIsEven = false;\n this._isTextHighlightOn = false;\n this._markAsDirty();\n return;\n case 37: // LEFT\n this._cursorOffset++;\n if (this._cursorOffset > this._textWrapper.length) {\n this._cursorOffset = this._textWrapper.length;\n }\n\n if (evt && evt.shiftKey) {\n // update the cursor\n this._blinkIsEven = false;\n // shift + ctrl/cmd + <-\n if (evt.ctrlKey || evt.metaKey) {\n if (!this._isTextHighlightOn) {\n if (this._textWrapper.length === this._cursorOffset) {\n return;\n }\n else {\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset + 1;\n }\n }\n this._startHighlightIndex = 0;\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\n this._cursorOffset = this._textWrapper.length;\n this._isTextHighlightOn = true;\n this._markAsDirty();\n return;\n }\n //store the starting point\n if (!this._isTextHighlightOn) {\n this._isTextHighlightOn = true;\n this._cursorIndex = (this._cursorOffset >= this._textWrapper.length) ? this._textWrapper.length : this._cursorOffset - 1;\n }\n //if text is already highlighted\n else if (this._cursorIndex === -1) {\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\n this._cursorOffset = (this._startHighlightIndex === 0) ? this._textWrapper.length : this._textWrapper.length - this._startHighlightIndex + 1;\n }\n //set the highlight indexes\n if (this._cursorIndex < this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\n }\n else if (this._cursorIndex > this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\n }\n else {\n this._isTextHighlightOn = false;\n }\n this._markAsDirty();\n return;\n }\n if (this._isTextHighlightOn) {\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\n this._isTextHighlightOn = false;\n }\n if (evt && (evt.ctrlKey || evt.metaKey)) {\n this._cursorOffset = this._textWrapper.length;\n evt.preventDefault();\n }\n this._blinkIsEven = false;\n this._isTextHighlightOn = false;\n this._cursorIndex = -1;\n this._markAsDirty();\n return;\n case 39: // RIGHT\n this._cursorOffset--;\n if (this._cursorOffset < 0) {\n this._cursorOffset = 0;\n }\n if (evt && evt.shiftKey) {\n //update the cursor\n this._blinkIsEven = false;\n //shift + ctrl/cmd + ->\n if (evt.ctrlKey || evt.metaKey) {\n if (!this._isTextHighlightOn) {\n if (this._cursorOffset === 0) {\n return;\n }\n else {\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset - 1;\n }\n }\n this._endHighlightIndex = this._textWrapper.length;\n this._isTextHighlightOn = true;\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\n this._cursorOffset = 0;\n this._markAsDirty();\n return;\n }\n\n if (!this._isTextHighlightOn) {\n this._isTextHighlightOn = true;\n this._cursorIndex = (this._cursorOffset <= 0) ? 0 : this._cursorOffset + 1;\n }\n //if text is already highlighted\n else if (this._cursorIndex === -1) {\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\n this._cursorOffset = (this._textWrapper.length === this._endHighlightIndex) ? 0 : this._textWrapper.length - this._endHighlightIndex - 1;\n }\n //set the highlight indexes\n if (this._cursorIndex < this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\n }\n else if (this._cursorIndex > this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\n }\n else {\n this._isTextHighlightOn = false;\n }\n this._markAsDirty();\n return;\n }\n if (this._isTextHighlightOn) {\n this._cursorOffset = this._textWrapper.length - this._endHighlightIndex;\n this._isTextHighlightOn = false;\n }\n //ctr + ->\n if (evt && (evt.ctrlKey || evt.metaKey)) {\n this._cursorOffset = 0;\n evt.preventDefault();\n }\n this._blinkIsEven = false;\n this._isTextHighlightOn = false;\n this._cursorIndex = -1;\n this._markAsDirty();\n return;\n case 222: // Dead\n if (evt) {\n //add support for single and double quotes\n if (evt.code == \"Quote\") {\n if (evt.shiftKey) {\n keyCode = 34;\n key = '\"';\n } else {\n keyCode = 39;\n key = \"'\";\n }\n } else {\n evt.preventDefault();\n this._cursorIndex = -1;\n this.deadKey = true;\n }\n } else {\n this._cursorIndex = -1;\n this.deadKey = true;\n }\n break;\n }\n // Printable characters\n if (key &&\n ((keyCode === -1) || // Direct access\n (keyCode === 32) || // Space\n (keyCode === 34) || // \" add support for single and double quotes\n (keyCode === 39) || // '\n (keyCode > 47 && keyCode < 64) || // Numbers\n (keyCode > 64 && keyCode < 91) || // Letters\n (keyCode > 159 && keyCode < 193) || // Special characters\n (keyCode > 218 && keyCode < 223) || // Special characters\n (keyCode > 95 && keyCode < 112))) { // Numpad\n this._currentKey = key;\n this.onBeforeKeyAddObservable.notifyObservers(this);\n key = this._currentKey;\n if (this._addKey) {\n if (this._isTextHighlightOn) {\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex, key);\n this._textHasChanged();\n this._cursorOffset = this._textWrapper.length - (this._startHighlightIndex + 1);\n this._isTextHighlightOn = false;\n this._blinkIsEven = false;\n this._markAsDirty();\n }\n else if (this._cursorOffset === 0) {\n this.text += key;\n } else {\n let insertPosition = this._textWrapper.length - this._cursorOffset;\n this._textWrapper.removePart(insertPosition, insertPosition, key);\n this._textHasChanged();\n }\n }\n }\n }\n\n /** @hidden */\n private _updateValueFromCursorIndex(offset: number) {\n //update the cursor\n this._blinkIsEven = false;\n\n if (this._cursorIndex === -1) {\n this._cursorIndex = offset;\n } else {\n if (this._cursorIndex < this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\n }\n else if (this._cursorIndex > this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\n }\n else {\n this._isTextHighlightOn = false;\n this._markAsDirty();\n return;\n }\n }\n this._isTextHighlightOn = true;\n this._markAsDirty();\n }\n /** @hidden */\n private _processDblClick(evt: PointerInfo) {\n //pre-find the start and end index of the word under cursor, speeds up the rendering\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\n this._endHighlightIndex = this._startHighlightIndex;\n let moveLeft, moveRight;\n do {\n moveRight = this._endHighlightIndex < this._textWrapper.length && this._textWrapper.isWord(this._endHighlightIndex) ? ++this._endHighlightIndex : 0;\n moveLeft = this._startHighlightIndex > 0 && this._textWrapper.isWord(this._startHighlightIndex - 1) ? --this._startHighlightIndex : 0;\n } while (moveLeft || moveRight);\n\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\n this.onTextHighlightObservable.notifyObservers(this);\n\n this._isTextHighlightOn = true;\n this._clickedCoordinate = null;\n this._blinkIsEven = true;\n this._cursorIndex = -1;\n this._markAsDirty();\n }\n /** @hidden */\n private _selectAllText() {\n this._blinkIsEven = true;\n this._isTextHighlightOn = true;\n\n this._startHighlightIndex = 0;\n this._endHighlightIndex = this._textWrapper.length;\n this._cursorOffset = this._textWrapper.length;\n this._cursorIndex = -1;\n this._markAsDirty();\n }\n\n /**\n * Handles the keyboard event\n * @param evt Defines the KeyboardEvent\n */\n public processKeyboard(evt: IKeyboardEvent): void {\n // process pressed key\n this.processKey(evt.keyCode, evt.key, evt);\n\n this.onKeyboardEventProcessedObservable.notifyObservers(evt);\n }\n\n /** @hidden */\n private _onCopyText(ev: ClipboardEvent): void {\n this._isTextHighlightOn = false;\n //when write permission to clipbaord data is denied\n try {\n ev.clipboardData && ev.clipboardData.setData(\"text/plain\", this._highlightedText);\n }\n catch { } //pass\n this._host.clipboardData = this._highlightedText;\n }\n /** @hidden */\n private _onCutText(ev: ClipboardEvent): void {\n if (!this._highlightedText) {\n return;\n }\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\n this._textHasChanged();\n this._isTextHighlightOn = false;\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\n //when write permission to clipbaord data is denied\n try {\n ev.clipboardData && ev.clipboardData.setData(\"text/plain\", this._highlightedText);\n }\n catch { } //pass\n\n this._host.clipboardData = this._highlightedText;\n this._highlightedText = \"\";\n }\n /** @hidden */\n private _onPasteText(ev: ClipboardEvent): void {\n let data: string = \"\";\n if (ev.clipboardData && ev.clipboardData.types.indexOf(\"text/plain\") !== -1) {\n data = ev.clipboardData.getData(\"text/plain\");\n }\n else {\n //get the cached data; returns blank string by default\n data = this._host.clipboardData;\n }\n let insertPosition = this._textWrapper.length - this._cursorOffset;\n this._textWrapper.removePart(insertPosition, insertPosition, data);\n this._textHasChanged();\n }\n\n public _draw(context: ICanvasRenderingContext, invalidatedRectangle?: Nullable<Measure>): void {\n context.save();\n\n this._applyStates(context);\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\n context.shadowColor = this.shadowColor;\n context.shadowBlur = this.shadowBlur;\n context.shadowOffsetX = this.shadowOffsetX;\n context.shadowOffsetY = this.shadowOffsetY;\n }\n\n // Background\n if (this._isFocused) {\n if (this._focusedBackground) {\n context.fillStyle = this._isEnabled ? this._focusedBackground : this._disabledColor;\n\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\n }\n } else if (this._background) {\n context.fillStyle = this._isEnabled ? this._background : this._disabledColor;\n\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\n }\n\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\n context.shadowBlur = 0;\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n }\n\n if (!this._fontOffset || this._wasDirty) {\n this._fontOffset = Control._GetFontOffset(context.font);\n }\n\n // Text\n let clipTextLeft = this._currentMeasure.left + this._margin.getValueInPixel(this._host, this._tempParentMeasure.width);\n if (this.color) {\n context.fillStyle = this.color;\n }\n\n let text = this._beforeRenderText(this._textWrapper);\n\n if (!this._isFocused && !this._textWrapper.text && this._placeholderText) {\n text = new TextWrapper();\n text.text = this._placeholderText;\n\n if (this._placeholderColor) {\n context.fillStyle = this._placeholderColor;\n }\n }\n\n this._textWidth = context.measureText(text.text).width;\n let marginWidth = this._margin.getValueInPixel(this._host, this._tempParentMeasure.width) * 2;\n if (this._autoStretchWidth) {\n this.width = Math.min(this._maxWidth.getValueInPixel(this._host, this._tempParentMeasure.width), this._textWidth + marginWidth) + \"px\";\n this._autoStretchWidth = true; // setting the width will have reset _autoStretchWidth to false!\n }\n\n let rootY = this._fontOffset.ascent + (this._currentMeasure.height - this._fontOffset.height) / 2;\n let availableWidth = this._width.getValueInPixel(this._host, this._tempParentMeasure.width) - marginWidth;\n\n context.save();\n context.beginPath();\n context.rect(clipTextLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, availableWidth + 2, this._currentMeasure.height);\n context.clip();\n\n if (this._isFocused && this._textWidth > availableWidth) {\n let textLeft = clipTextLeft - this._textWidth + availableWidth;\n if (!this._scrollLeft) {\n this._scrollLeft = textLeft;\n }\n } else {\n this._scrollLeft = clipTextLeft;\n }\n\n context.fillText(text.text, this._scrollLeft, this._currentMeasure.top + rootY);\n\n // Cursor\n if (this._isFocused) {\n\n // Need to move cursor\n if (this._clickedCoordinate) {\n var rightPosition = this._scrollLeft + this._textWidth;\n var absoluteCursorPosition = rightPosition - this._clickedCoordinate;\n var currentSize = 0;\n this._cursorOffset = 0;\n var previousDist = 0;\n do {\n if (this._cursorOffset) {\n previousDist = Math.abs(absoluteCursorPosition - currentSize);\n }\n this._cursorOffset++;\n currentSize = context.measureText(text.substr(text.length - this._cursorOffset, this._cursorOffset)).width;\n\n } while (currentSize < absoluteCursorPosition && (text.length >= this._cursorOffset));\n\n // Find closest move\n if (Math.abs(absoluteCursorPosition - currentSize) > previousDist) {\n this._cursorOffset--;\n }\n\n this._blinkIsEven = false;\n this._clickedCoordinate = null;\n }\n\n // Render cursor\n if (!this._blinkIsEven) {\n let cursorOffsetText = text.substr(text.length - this._cursorOffset);\n let cursorOffsetWidth = context.measureText(cursorOffsetText).width;\n let cursorLeft = this._scrollLeft + this._textWidth - cursorOffsetWidth;\n\n if (cursorLeft < clipTextLeft) {\n this._scrollLeft += (clipTextLeft - cursorLeft);\n cursorLeft = clipTextLeft;\n this._markAsDirty();\n } else if (cursorLeft > clipTextLeft + availableWidth) {\n this._scrollLeft += (clipTextLeft + availableWidth - cursorLeft);\n cursorLeft = clipTextLeft + availableWidth;\n this._markAsDirty();\n }\n if (!this._isTextHighlightOn) {\n context.fillRect(cursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, 2, this._fontOffset.height);\n }\n }\n\n clearTimeout(this._blinkTimeout);\n this._blinkTimeout = <any>setTimeout(() => {\n this._blinkIsEven = !this._blinkIsEven;\n this._markAsDirty();\n }, 500);\n\n //show the highlighted text\n if (this._isTextHighlightOn) {\n clearTimeout(this._blinkTimeout);\n let highlightCursorOffsetWidth = context.measureText(text.substring(this._startHighlightIndex)).width;\n let highlightCursorLeft = this._scrollLeft + this._textWidth - highlightCursorOffsetWidth;\n this._highlightedText = text.substring(this._startHighlightIndex, this._endHighlightIndex);\n let width = context.measureText(text.substring(this._startHighlightIndex, this._endHighlightIndex)).width;\n if (highlightCursorLeft < clipTextLeft) {\n width = width - (clipTextLeft - highlightCursorLeft);\n if (!width) {\n // when using left arrow on text.length > availableWidth;\n // assigns the width of the first letter after clipTextLeft\n width = context.measureText(text.charAt(text.length - this._cursorOffset)).width;\n }\n highlightCursorLeft = clipTextLeft;\n }\n //for transparancy\n context.globalAlpha = this._highligherOpacity;\n context.fillStyle = this._textHighlightColor;\n context.fillRect(highlightCursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, width, this._fontOffset.height);\n context.globalAlpha = 1.0;\n }\n }\n context.restore();\n\n // Border\n if (this._thickness) {\n if (this._isFocused) {\n if (this.focusedColor) {\n context.strokeStyle = this.focusedColor;\n }\n } else {\n if (this.color) {\n context.strokeStyle = this.color;\n }\n }\n\n context.lineWidth = this._thickness;\n\n context.strokeRect(this._currentMeasure.left + this._thickness / 2, this._currentMeasure.top + this._thickness / 2,\n this._currentMeasure.width - this._thickness, this._currentMeasure.height - this._thickness);\n }\n\n context.restore();\n }\n\n public _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\n return false;\n }\n\n if (this.isReadOnly) {\n return true;\n }\n\n this._clickedCoordinate = coordinates.x;\n this._isTextHighlightOn = false;\n this._highlightedText = \"\";\n this._cursorIndex = -1;\n this._isPointerDown = true;\n this._host._capturingControl[pointerId] = this;\n if (this._host.focusedControl === this) {\n // Move cursor\n clearTimeout(this._blinkTimeout);\n this._markAsDirty();\n return true;\n }\n if (!this._isEnabled) {\n return false;\n }\n this._host.focusedControl = this;\n\n return true;\n }\n public _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\n if (this._host.focusedControl === this && this._isPointerDown && !this.isReadOnly) {\n this._clickedCoordinate = coordinates.x;\n this._markAsDirty();\n this._updateValueFromCursorIndex(this._cursorOffset);\n }\n super._onPointerMove(target, coordinates, pointerId, pi);\n }\n\n public _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\n\n this._isPointerDown = false;\n delete this._host._capturingControl[pointerId];\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick);\n }\n\n protected _beforeRenderText(textWrapper: TextWrapper): TextWrapper {\n return textWrapper;\n }\n\n public dispose() {\n super.dispose();\n\n this.onBlurObservable.clear();\n this.onFocusObservable.clear();\n this.onTextChangedObservable.clear();\n this.onTextCopyObservable.clear();\n this.onTextCutObservable.clear();\n this.onTextPasteObservable.clear();\n this.onTextHighlightObservable.clear();\n this.onKeyboardEventProcessedObservable.clear();\n }\n}\nRegisterClass(\"BABYLON.GUI.InputText\", InputText);\n"]}
|
|
1
|
+
{"version":3,"file":"inputText.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/2D/controls/inputText.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"@babylonjs/core/types\";\nimport { Observable, Observer } from \"@babylonjs/core/Misc/observable\";\nimport { Vector2 } from \"@babylonjs/core/Maths/math.vector\";\nimport { ClipboardEventTypes, ClipboardInfo } from \"@babylonjs/core/Events/clipboardEvents\";\nimport { PointerInfo, PointerEventTypes, PointerInfoBase } from '@babylonjs/core/Events/pointerEvents';\n\nimport { Control } from \"./control\";\nimport { IFocusableControl } from \"./focusableControl\";\nimport { ValueAndUnit } from \"../valueAndUnit\";\nimport { VirtualKeyboard } from \"./virtualKeyboard\";\nimport { RegisterClass } from '@babylonjs/core/Misc/typeStore';\nimport { Measure } from '../measure';\nimport { TextWrapper } from './textWrapper';\nimport { serialize } from '@babylonjs/core/Misc/decorators';\nimport { IKeyboardEvent, IPointerEvent } from '@babylonjs/core/Events/deviceInputEvents';\nimport { ICanvasRenderingContext } from \"@babylonjs/core/Engines/ICanvas\";\n\n/**\n * Class used to create input text control\n */\nexport class InputText extends Control implements IFocusableControl {\n private _textWrapper: TextWrapper;\n private _placeholderText = \"\";\n private _background = \"#222222\";\n private _focusedBackground = \"#000000\";\n private _focusedColor = \"white\";\n private _placeholderColor = \"gray\";\n private _thickness = 1;\n private _margin = new ValueAndUnit(10, ValueAndUnit.UNITMODE_PIXEL);\n private _autoStretchWidth = true;\n private _maxWidth = new ValueAndUnit(1, ValueAndUnit.UNITMODE_PERCENTAGE, false);\n private _isFocused = false;\n /** the type of device that most recently focused the input: \"mouse\", \"touch\" or \"pen\" */\n private _focusedBy: string;\n private _blinkTimeout: number;\n private _blinkIsEven = false;\n private _cursorOffset = 0;\n private _scrollLeft: Nullable<number>;\n private _textWidth: number;\n private _clickedCoordinate: Nullable<number>;\n private _deadKey = false;\n private _addKey = true;\n private _currentKey = \"\";\n private _isTextHighlightOn = false;\n private _textHighlightColor = \"#d5e0ff\";\n private _highligherOpacity = 0.4;\n private _highlightedText = \"\";\n private _startHighlightIndex = 0;\n private _endHighlightIndex = 0;\n private _cursorIndex = -1;\n private _onFocusSelectAll = false;\n private _isPointerDown = false;\n private _onClipboardObserver: Nullable<Observer<ClipboardInfo>>;\n private _onPointerDblTapObserver: Nullable<Observer<PointerInfo>>;\n\n /** @hidden */\n public _connectedVirtualKeyboard: Nullable<VirtualKeyboard>;\n\n /** Gets or sets a string representing the message displayed on mobile when the control gets the focus */\n @serialize()\n public promptMessage = \"Please enter text:\";\n /** Force disable prompt on mobile device */\n @serialize()\n public disableMobilePrompt = false;\n\n /** Observable raised when the text changes */\n public onTextChangedObservable = new Observable<InputText>();\n /** Observable raised just before an entered character is to be added */\n public onBeforeKeyAddObservable = new Observable<InputText>();\n /** Observable raised when the control gets the focus */\n public onFocusObservable = new Observable<InputText>();\n /** Observable raised when the control loses the focus */\n public onBlurObservable = new Observable<InputText>();\n /**Observable raised when the text is highlighted */\n public onTextHighlightObservable = new Observable<InputText>();\n /**Observable raised when copy event is triggered */\n public onTextCopyObservable = new Observable<InputText>();\n /** Observable raised when cut event is triggered */\n public onTextCutObservable = new Observable<InputText>();\n /** Observable raised when paste event is triggered */\n public onTextPasteObservable = new Observable<InputText>();\n /** Observable raised when a key event was processed */\n public onKeyboardEventProcessedObservable = new Observable<IKeyboardEvent>();\n\n /** Gets or sets the maximum width allowed by the control */\n @serialize()\n public get maxWidth(): string | number {\n return this._maxWidth.toString(this._host);\n }\n\n /** Gets the maximum width allowed by the control in pixels */\n public get maxWidthInPixels(): number {\n return this._maxWidth.getValueInPixel(this._host, this._cachedParentMeasure.width);\n }\n\n public set maxWidth(value: string | number) {\n if (this._maxWidth.toString(this._host) === value) {\n return;\n }\n\n if (this._maxWidth.fromString(value)) {\n this._markAsDirty();\n }\n }\n\n /** Gets or sets the text highlighter transparency; default: 0.4 */\n @serialize()\n public get highligherOpacity(): number {\n return this._highligherOpacity;\n }\n\n public set highligherOpacity(value: number) {\n if (this._highligherOpacity === value) {\n return;\n }\n this._highligherOpacity = value;\n this._markAsDirty();\n }\n /** Gets or sets a boolean indicating whether to select complete text by default on input focus */\n @serialize()\n public get onFocusSelectAll(): boolean {\n return this._onFocusSelectAll;\n }\n\n public set onFocusSelectAll(value: boolean) {\n if (this._onFocusSelectAll === value) {\n return;\n }\n\n this._onFocusSelectAll = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the text hightlight color */\n @serialize()\n public get textHighlightColor(): string {\n return this._textHighlightColor;\n }\n\n public set textHighlightColor(value: string) {\n if (this._textHighlightColor === value) {\n return;\n }\n this._textHighlightColor = value;\n this._markAsDirty();\n }\n\n /** Gets or sets control margin */\n @serialize()\n public get margin(): string {\n return this._margin.toString(this._host);\n }\n\n /** Gets control margin in pixels */\n public get marginInPixels(): number {\n return this._margin.getValueInPixel(this._host, this._cachedParentMeasure.width);\n }\n\n public set margin(value: string) {\n if (this._margin.toString(this._host) === value) {\n return;\n }\n\n if (this._margin.fromString(value)) {\n this._markAsDirty();\n }\n }\n\n /** Gets or sets a boolean indicating if the control can auto stretch its width to adapt to the text */\n @serialize()\n public get autoStretchWidth(): boolean {\n return this._autoStretchWidth;\n }\n\n public set autoStretchWidth(value: boolean) {\n if (this._autoStretchWidth === value) {\n return;\n }\n\n this._autoStretchWidth = value;\n this._markAsDirty();\n }\n\n /** Gets or sets border thickness */\n @serialize()\n public get thickness(): number {\n return this._thickness;\n }\n\n public set thickness(value: number) {\n if (this._thickness === value) {\n return;\n }\n\n this._thickness = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the background color when focused */\n @serialize()\n public get focusedBackground(): string {\n return this._focusedBackground;\n }\n\n public set focusedBackground(value: string) {\n if (this._focusedBackground === value) {\n return;\n }\n\n this._focusedBackground = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the background color when focused */\n @serialize()\n public get focusedColor(): string {\n return this._focusedColor;\n }\n\n public set focusedColor(value: string) {\n if (this._focusedColor === value) {\n return;\n }\n\n this._focusedColor = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the background color */\n @serialize()\n public get background(): string {\n return this._background;\n }\n\n public set background(value: string) {\n if (this._background === value) {\n return;\n }\n\n this._background = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the placeholder color */\n @serialize()\n public get placeholderColor(): string {\n return this._placeholderColor;\n }\n\n public set placeholderColor(value: string) {\n if (this._placeholderColor === value) {\n return;\n }\n\n this._placeholderColor = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the text displayed when the control is empty */\n @serialize()\n public get placeholderText(): string {\n return this._placeholderText;\n }\n\n public set placeholderText(value: string) {\n if (this._placeholderText === value) {\n return;\n }\n this._placeholderText = value;\n this._markAsDirty();\n }\n\n /** Gets or sets the dead key flag */\n @serialize()\n public get deadKey(): boolean {\n return this._deadKey;\n }\n\n public set deadKey(flag: boolean) {\n this._deadKey = flag;\n }\n\n /** Gets or sets the highlight text */\n public get highlightedText(): string {\n return this._highlightedText;\n }\n public set highlightedText(text: string) {\n if (this._highlightedText === text) {\n return;\n }\n this._highlightedText = text;\n this._markAsDirty();\n }\n\n /** Gets or sets if the current key should be added */\n public get addKey(): boolean {\n return this._addKey;\n }\n\n public set addKey(flag: boolean) {\n this._addKey = flag;\n }\n\n /** Gets or sets the value of the current key being entered */\n public get currentKey(): string {\n return this._currentKey;\n }\n\n public set currentKey(key: string) {\n this._currentKey = key;\n }\n\n /** Gets or sets the text displayed in the control */\n @serialize()\n public get text(): string {\n return this._textWrapper.text;\n }\n\n public set text(value: string) {\n let valueAsString = value.toString(); // Forcing convertion\n\n if (!this._textWrapper) {\n this._textWrapper = new TextWrapper();\n }\n\n if (this._textWrapper.text === valueAsString) {\n return;\n }\n this._textWrapper.text = valueAsString;\n this._textHasChanged();\n }\n\n private _textHasChanged(): void {\n this._markAsDirty();\n this.onTextChangedObservable.notifyObservers(this);\n }\n\n /** Gets or sets control width */\n @serialize()\n public get width(): string | number {\n return this._width.toString(this._host);\n }\n\n public set width(value: string | number) {\n if (this._width.toString(this._host) === value) {\n return;\n }\n\n if (this._width.fromString(value)) {\n this._markAsDirty();\n }\n\n this.autoStretchWidth = false;\n }\n\n /**\n * Creates a new InputText\n * @param name defines the control name\n * @param text defines the text of the control\n */\n constructor(public name?: string, text: string = \"\") {\n super(name);\n\n this.text = text;\n this.isPointerBlocker = true;\n }\n\n /** @hidden */\n public onBlur(): void {\n this._isFocused = false;\n this._scrollLeft = null;\n this._cursorOffset = 0;\n clearTimeout(this._blinkTimeout);\n this._markAsDirty();\n\n this.onBlurObservable.notifyObservers(this);\n\n this._host.unRegisterClipboardEvents();\n if (this._onClipboardObserver) {\n this._host.onClipboardObservable.remove(this._onClipboardObserver);\n }\n let scene = this._host.getScene();\n if (this._onPointerDblTapObserver && scene) {\n scene.onPointerObservable.remove(this._onPointerDblTapObserver);\n }\n }\n\n /** @hidden */\n public onFocus(): void {\n if (!this._isEnabled) {\n return;\n }\n this._scrollLeft = null;\n this._isFocused = true;\n this._blinkIsEven = false;\n this._cursorOffset = 0;\n this._markAsDirty();\n\n this.onFocusObservable.notifyObservers(this);\n\n if (this._focusedBy === \"touch\" && !this.disableMobilePrompt) {\n let value = prompt(this.promptMessage);\n\n if (value !== null) {\n this.text = value;\n }\n this._host.focusedControl = null;\n return;\n }\n\n this._host.registerClipboardEvents();\n\n this._onClipboardObserver = this._host.onClipboardObservable.add((clipboardInfo) => {\n // process clipboard event, can be configured.\n switch (clipboardInfo.type) {\n case ClipboardEventTypes.COPY:\n this._onCopyText(clipboardInfo.event);\n this.onTextCopyObservable.notifyObservers(this);\n break;\n case ClipboardEventTypes.CUT:\n this._onCutText(clipboardInfo.event);\n this.onTextCutObservable.notifyObservers(this);\n break;\n case ClipboardEventTypes.PASTE:\n this._onPasteText(clipboardInfo.event);\n this.onTextPasteObservable.notifyObservers(this);\n break;\n default: return;\n }\n });\n\n let scene = this._host.getScene();\n if (scene) {\n //register the pointer double tap event\n this._onPointerDblTapObserver = scene.onPointerObservable.add((pointerInfo) => {\n if (!this._isFocused) {\n return;\n }\n if (pointerInfo.type === PointerEventTypes.POINTERDOUBLETAP) {\n this._processDblClick(pointerInfo);\n }\n });\n }\n\n if (this._onFocusSelectAll) {\n this._selectAllText();\n }\n\n }\n\n /**\n * Function to focus an inputText programmatically\n */\n public focus() {\n this._host.moveFocusToControl(this);\n }\n\n /**\n * Function to unfocus an inputText programmatically\n */\n public blur() {\n this._host.focusedControl = null;\n }\n\n protected _getTypeName(): string {\n return \"InputText\";\n }\n\n /**\n * Function called to get the list of controls that should not steal the focus from this control\n * @returns an array of controls\n */\n public keepsFocusWith(): Nullable<Control[]> {\n if (!this._connectedVirtualKeyboard) {\n return null;\n }\n return [this._connectedVirtualKeyboard];\n }\n\n /** @hidden */\n public processKey(keyCode: number, key?: string, evt?: IKeyboardEvent) {\n if (this.isReadOnly) {\n return;\n }\n\n //return if clipboard event keys (i.e -ctr/cmd + c,v,x)\n if (evt && (evt.ctrlKey || evt.metaKey) && (keyCode === 67 || keyCode === 86 || keyCode === 88)) {\n return;\n }\n\n //select all\n if (evt && (evt.ctrlKey || evt.metaKey) && keyCode === 65) {\n this._selectAllText();\n evt.preventDefault();\n return;\n }\n // Specific cases\n switch (keyCode) {\n case 32: //SPACE\n key = \" \"; //ie11 key for space is \"Spacebar\"\n break;\n case 191: //SLASH\n if (evt) {\n evt.preventDefault();\n }\n break;\n case 8: // BACKSPACE\n if (this._textWrapper.text && this._textWrapper.length > 0) {\n //delete the highlighted text\n if (this._isTextHighlightOn) {\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\n this._textHasChanged();\n this._isTextHighlightOn = false;\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\n this._blinkIsEven = false;\n if (evt) {\n evt.preventDefault();\n }\n return;\n }\n //delete single character\n if (this._cursorOffset === 0) {\n this.text = this._textWrapper.substr(0, this._textWrapper.length - 1);\n } else {\n let deletePosition = this._textWrapper.length - this._cursorOffset;\n if (deletePosition > 0) {\n this._textWrapper.removePart(deletePosition - 1, deletePosition);\n this._textHasChanged();\n }\n }\n }\n if (evt) {\n evt.preventDefault();\n }\n return;\n case 46: // DELETE\n if (this._isTextHighlightOn) {\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\n this._textHasChanged();\n this._isTextHighlightOn = false;\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\n if (evt) {\n evt.preventDefault();\n }\n return;\n }\n if (this._textWrapper.text && this._textWrapper.length > 0 && this._cursorOffset > 0) {\n let deletePosition = this._textWrapper.length - this._cursorOffset;\n this._textWrapper.removePart(deletePosition, deletePosition + 1);\n this._textHasChanged();\n this._cursorOffset--;\n }\n if (evt) {\n evt.preventDefault();\n }\n return;\n case 13: // RETURN\n this._host.focusedControl = null;\n this._isTextHighlightOn = false;\n return;\n case 35: // END\n this._cursorOffset = 0;\n this._blinkIsEven = false;\n this._isTextHighlightOn = false;\n this._markAsDirty();\n return;\n case 36: // HOME\n this._cursorOffset = this._textWrapper.length;\n this._blinkIsEven = false;\n this._isTextHighlightOn = false;\n this._markAsDirty();\n return;\n case 37: // LEFT\n this._cursorOffset++;\n if (this._cursorOffset > this._textWrapper.length) {\n this._cursorOffset = this._textWrapper.length;\n }\n\n if (evt && evt.shiftKey) {\n // update the cursor\n this._blinkIsEven = false;\n // shift + ctrl/cmd + <-\n if (evt.ctrlKey || evt.metaKey) {\n if (!this._isTextHighlightOn) {\n if (this._textWrapper.length === this._cursorOffset) {\n return;\n }\n else {\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset + 1;\n }\n }\n this._startHighlightIndex = 0;\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\n this._cursorOffset = this._textWrapper.length;\n this._isTextHighlightOn = true;\n this._markAsDirty();\n return;\n }\n //store the starting point\n if (!this._isTextHighlightOn) {\n this._isTextHighlightOn = true;\n this._cursorIndex = (this._cursorOffset >= this._textWrapper.length) ? this._textWrapper.length : this._cursorOffset - 1;\n }\n //if text is already highlighted\n else if (this._cursorIndex === -1) {\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\n this._cursorOffset = (this._startHighlightIndex === 0) ? this._textWrapper.length : this._textWrapper.length - this._startHighlightIndex + 1;\n }\n //set the highlight indexes\n if (this._cursorIndex < this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\n }\n else if (this._cursorIndex > this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\n }\n else {\n this._isTextHighlightOn = false;\n }\n this._markAsDirty();\n return;\n }\n if (this._isTextHighlightOn) {\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\n this._isTextHighlightOn = false;\n }\n if (evt && (evt.ctrlKey || evt.metaKey)) {\n this._cursorOffset = this._textWrapper.length;\n evt.preventDefault();\n }\n this._blinkIsEven = false;\n this._isTextHighlightOn = false;\n this._cursorIndex = -1;\n this._markAsDirty();\n return;\n case 39: // RIGHT\n this._cursorOffset--;\n if (this._cursorOffset < 0) {\n this._cursorOffset = 0;\n }\n if (evt && evt.shiftKey) {\n //update the cursor\n this._blinkIsEven = false;\n //shift + ctrl/cmd + ->\n if (evt.ctrlKey || evt.metaKey) {\n if (!this._isTextHighlightOn) {\n if (this._cursorOffset === 0) {\n return;\n }\n else {\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset - 1;\n }\n }\n this._endHighlightIndex = this._textWrapper.length;\n this._isTextHighlightOn = true;\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\n this._cursorOffset = 0;\n this._markAsDirty();\n return;\n }\n\n if (!this._isTextHighlightOn) {\n this._isTextHighlightOn = true;\n this._cursorIndex = (this._cursorOffset <= 0) ? 0 : this._cursorOffset + 1;\n }\n //if text is already highlighted\n else if (this._cursorIndex === -1) {\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\n this._cursorOffset = (this._textWrapper.length === this._endHighlightIndex) ? 0 : this._textWrapper.length - this._endHighlightIndex - 1;\n }\n //set the highlight indexes\n if (this._cursorIndex < this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\n }\n else if (this._cursorIndex > this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\n }\n else {\n this._isTextHighlightOn = false;\n }\n this._markAsDirty();\n return;\n }\n if (this._isTextHighlightOn) {\n this._cursorOffset = this._textWrapper.length - this._endHighlightIndex;\n this._isTextHighlightOn = false;\n }\n //ctr + ->\n if (evt && (evt.ctrlKey || evt.metaKey)) {\n this._cursorOffset = 0;\n evt.preventDefault();\n }\n this._blinkIsEven = false;\n this._isTextHighlightOn = false;\n this._cursorIndex = -1;\n this._markAsDirty();\n return;\n case 222: // Dead\n if (evt) {\n //add support for single and double quotes\n if (evt.code == \"Quote\") {\n if (evt.shiftKey) {\n keyCode = 34;\n key = '\"';\n } else {\n keyCode = 39;\n key = \"'\";\n }\n } else {\n evt.preventDefault();\n this._cursorIndex = -1;\n this.deadKey = true;\n }\n } else {\n this._cursorIndex = -1;\n this.deadKey = true;\n }\n break;\n }\n // Printable characters\n if (key &&\n ((keyCode === -1) || // Direct access\n (keyCode === 32) || // Space\n (keyCode === 34) || // \" add support for single and double quotes\n (keyCode === 39) || // '\n (keyCode > 47 && keyCode < 64) || // Numbers\n (keyCode > 64 && keyCode < 91) || // Letters\n (keyCode > 159 && keyCode < 193) || // Special characters\n (keyCode > 218 && keyCode < 223) || // Special characters\n (keyCode > 95 && keyCode < 112))) { // Numpad\n this._currentKey = key;\n this.onBeforeKeyAddObservable.notifyObservers(this);\n key = this._currentKey;\n if (this._addKey) {\n if (this._isTextHighlightOn) {\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex, key);\n this._textHasChanged();\n this._cursorOffset = this._textWrapper.length - (this._startHighlightIndex + 1);\n this._isTextHighlightOn = false;\n this._blinkIsEven = false;\n this._markAsDirty();\n }\n else if (this._cursorOffset === 0) {\n this.text += key;\n } else {\n let insertPosition = this._textWrapper.length - this._cursorOffset;\n this._textWrapper.removePart(insertPosition, insertPosition, key);\n this._textHasChanged();\n }\n }\n }\n }\n\n /** @hidden */\n private _updateValueFromCursorIndex(offset: number) {\n //update the cursor\n this._blinkIsEven = false;\n\n if (this._cursorIndex === -1) {\n this._cursorIndex = offset;\n } else {\n if (this._cursorIndex < this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\n }\n else if (this._cursorIndex > this._cursorOffset) {\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\n }\n else {\n this._isTextHighlightOn = false;\n this._markAsDirty();\n return;\n }\n }\n this._isTextHighlightOn = true;\n this._markAsDirty();\n }\n /** @hidden */\n private _processDblClick(evt: PointerInfo) {\n //pre-find the start and end index of the word under cursor, speeds up the rendering\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\n this._endHighlightIndex = this._startHighlightIndex;\n let moveLeft, moveRight;\n do {\n moveRight = this._endHighlightIndex < this._textWrapper.length && this._textWrapper.isWord(this._endHighlightIndex) ? ++this._endHighlightIndex : 0;\n moveLeft = this._startHighlightIndex > 0 && this._textWrapper.isWord(this._startHighlightIndex - 1) ? --this._startHighlightIndex : 0;\n } while (moveLeft || moveRight);\n\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\n this.onTextHighlightObservable.notifyObservers(this);\n\n this._isTextHighlightOn = true;\n this._clickedCoordinate = null;\n this._blinkIsEven = true;\n this._cursorIndex = -1;\n this._markAsDirty();\n }\n /** @hidden */\n private _selectAllText() {\n this._blinkIsEven = true;\n this._isTextHighlightOn = true;\n\n this._startHighlightIndex = 0;\n this._endHighlightIndex = this._textWrapper.length;\n this._cursorOffset = this._textWrapper.length;\n this._cursorIndex = -1;\n this._markAsDirty();\n }\n\n /**\n * Handles the keyboard event\n * @param evt Defines the KeyboardEvent\n */\n public processKeyboard(evt: IKeyboardEvent): void {\n // process pressed key\n this.processKey(evt.keyCode, evt.key, evt);\n\n this.onKeyboardEventProcessedObservable.notifyObservers(evt);\n }\n\n /** @hidden */\n private _onCopyText(ev: ClipboardEvent): void {\n this._isTextHighlightOn = false;\n //when write permission to clipbaord data is denied\n try {\n ev.clipboardData && ev.clipboardData.setData(\"text/plain\", this._highlightedText);\n }\n catch { } //pass\n this._host.clipboardData = this._highlightedText;\n }\n /** @hidden */\n private _onCutText(ev: ClipboardEvent): void {\n if (!this._highlightedText) {\n return;\n }\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\n this._textHasChanged();\n this._isTextHighlightOn = false;\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\n //when write permission to clipbaord data is denied\n try {\n ev.clipboardData && ev.clipboardData.setData(\"text/plain\", this._highlightedText);\n }\n catch { } //pass\n\n this._host.clipboardData = this._highlightedText;\n this._highlightedText = \"\";\n }\n /** @hidden */\n private _onPasteText(ev: ClipboardEvent): void {\n let data: string = \"\";\n if (ev.clipboardData && ev.clipboardData.types.indexOf(\"text/plain\") !== -1) {\n data = ev.clipboardData.getData(\"text/plain\");\n }\n else {\n //get the cached data; returns blank string by default\n data = this._host.clipboardData;\n }\n let insertPosition = this._textWrapper.length - this._cursorOffset;\n this._textWrapper.removePart(insertPosition, insertPosition, data);\n this._textHasChanged();\n }\n\n public _draw(context: ICanvasRenderingContext, invalidatedRectangle?: Nullable<Measure>): void {\n context.save();\n\n this._applyStates(context);\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\n context.shadowColor = this.shadowColor;\n context.shadowBlur = this.shadowBlur;\n context.shadowOffsetX = this.shadowOffsetX;\n context.shadowOffsetY = this.shadowOffsetY;\n }\n\n // Background\n if (this._isFocused) {\n if (this._focusedBackground) {\n context.fillStyle = this._isEnabled ? this._focusedBackground : this._disabledColor;\n\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\n }\n } else if (this._background) {\n context.fillStyle = this._isEnabled ? this._background : this._disabledColor;\n\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\n }\n\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\n context.shadowBlur = 0;\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n }\n\n if (!this._fontOffset || this._wasDirty) {\n this._fontOffset = Control._GetFontOffset(context.font);\n }\n\n // Text\n let clipTextLeft = this._currentMeasure.left + this._margin.getValueInPixel(this._host, this._tempParentMeasure.width);\n if (this.color) {\n context.fillStyle = this.color;\n }\n\n let text = this._beforeRenderText(this._textWrapper);\n\n if (!this._isFocused && !this._textWrapper.text && this._placeholderText) {\n text = new TextWrapper();\n text.text = this._placeholderText;\n\n if (this._placeholderColor) {\n context.fillStyle = this._placeholderColor;\n }\n }\n\n this._textWidth = context.measureText(text.text).width;\n let marginWidth = this._margin.getValueInPixel(this._host, this._tempParentMeasure.width) * 2;\n if (this._autoStretchWidth) {\n this.width = Math.min(this._maxWidth.getValueInPixel(this._host, this._tempParentMeasure.width), this._textWidth + marginWidth) + \"px\";\n this._autoStretchWidth = true; // setting the width will have reset _autoStretchWidth to false!\n }\n\n let rootY = this._fontOffset.ascent + (this._currentMeasure.height - this._fontOffset.height) / 2;\n let availableWidth = this._width.getValueInPixel(this._host, this._tempParentMeasure.width) - marginWidth;\n\n context.save();\n context.beginPath();\n context.rect(clipTextLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, availableWidth + 2, this._currentMeasure.height);\n context.clip();\n\n if (this._isFocused && this._textWidth > availableWidth) {\n let textLeft = clipTextLeft - this._textWidth + availableWidth;\n if (!this._scrollLeft) {\n this._scrollLeft = textLeft;\n }\n } else {\n this._scrollLeft = clipTextLeft;\n }\n\n context.fillText(text.text, this._scrollLeft, this._currentMeasure.top + rootY);\n\n // Cursor\n if (this._isFocused) {\n\n // Need to move cursor\n if (this._clickedCoordinate) {\n var rightPosition = this._scrollLeft + this._textWidth;\n var absoluteCursorPosition = rightPosition - this._clickedCoordinate;\n var currentSize = 0;\n this._cursorOffset = 0;\n var previousDist = 0;\n do {\n if (this._cursorOffset) {\n previousDist = Math.abs(absoluteCursorPosition - currentSize);\n }\n this._cursorOffset++;\n currentSize = context.measureText(text.substr(text.length - this._cursorOffset, this._cursorOffset)).width;\n\n } while (currentSize < absoluteCursorPosition && (text.length >= this._cursorOffset));\n\n // Find closest move\n if (Math.abs(absoluteCursorPosition - currentSize) > previousDist) {\n this._cursorOffset--;\n }\n\n this._blinkIsEven = false;\n this._clickedCoordinate = null;\n }\n\n // Render cursor\n if (!this._blinkIsEven) {\n let cursorOffsetText = text.substr(text.length - this._cursorOffset);\n let cursorOffsetWidth = context.measureText(cursorOffsetText).width;\n let cursorLeft = this._scrollLeft + this._textWidth - cursorOffsetWidth;\n\n if (cursorLeft < clipTextLeft) {\n this._scrollLeft += (clipTextLeft - cursorLeft);\n cursorLeft = clipTextLeft;\n this._markAsDirty();\n } else if (cursorLeft > clipTextLeft + availableWidth) {\n this._scrollLeft += (clipTextLeft + availableWidth - cursorLeft);\n cursorLeft = clipTextLeft + availableWidth;\n this._markAsDirty();\n }\n if (!this._isTextHighlightOn) {\n context.fillRect(cursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, 2, this._fontOffset.height);\n }\n }\n\n clearTimeout(this._blinkTimeout);\n this._blinkTimeout = <any>setTimeout(() => {\n this._blinkIsEven = !this._blinkIsEven;\n this._markAsDirty();\n }, 500);\n\n //show the highlighted text\n if (this._isTextHighlightOn) {\n clearTimeout(this._blinkTimeout);\n let highlightCursorOffsetWidth = context.measureText(text.substring(this._startHighlightIndex)).width;\n let highlightCursorLeft = this._scrollLeft + this._textWidth - highlightCursorOffsetWidth;\n this._highlightedText = text.substring(this._startHighlightIndex, this._endHighlightIndex);\n let width = context.measureText(text.substring(this._startHighlightIndex, this._endHighlightIndex)).width;\n if (highlightCursorLeft < clipTextLeft) {\n width = width - (clipTextLeft - highlightCursorLeft);\n if (!width) {\n // when using left arrow on text.length > availableWidth;\n // assigns the width of the first letter after clipTextLeft\n width = context.measureText(text.charAt(text.length - this._cursorOffset)).width;\n }\n highlightCursorLeft = clipTextLeft;\n }\n //for transparancy\n context.globalAlpha = this._highligherOpacity;\n context.fillStyle = this._textHighlightColor;\n context.fillRect(highlightCursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, width, this._fontOffset.height);\n context.globalAlpha = 1.0;\n }\n }\n context.restore();\n\n // Border\n if (this._thickness) {\n if (this._isFocused) {\n if (this.focusedColor) {\n context.strokeStyle = this.focusedColor;\n }\n } else {\n if (this.color) {\n context.strokeStyle = this.color;\n }\n }\n\n context.lineWidth = this._thickness;\n\n context.strokeRect(this._currentMeasure.left + this._thickness / 2, this._currentMeasure.top + this._thickness / 2,\n this._currentMeasure.width - this._thickness, this._currentMeasure.height - this._thickness);\n }\n\n context.restore();\n }\n\n public _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\n return false;\n }\n\n if (this.isReadOnly) {\n return true;\n }\n\n this._clickedCoordinate = coordinates.x;\n this._isTextHighlightOn = false;\n this._highlightedText = \"\";\n this._cursorIndex = -1;\n this._isPointerDown = true;\n this._host._capturingControl[pointerId] = this;\n this._focusedBy = (pi.event as IPointerEvent).pointerType;\n if (this._host.focusedControl === this) {\n // Move cursor\n clearTimeout(this._blinkTimeout);\n this._markAsDirty();\n return true;\n }\n if (!this._isEnabled) {\n return false;\n }\n this._host.focusedControl = this;\n\n return true;\n }\n public _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\n if (this._host.focusedControl === this && this._isPointerDown && !this.isReadOnly) {\n this._clickedCoordinate = coordinates.x;\n this._markAsDirty();\n this._updateValueFromCursorIndex(this._cursorOffset);\n }\n super._onPointerMove(target, coordinates, pointerId, pi);\n }\n\n public _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\n\n this._isPointerDown = false;\n delete this._host._capturingControl[pointerId];\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick);\n }\n\n protected _beforeRenderText(textWrapper: TextWrapper): TextWrapper {\n return textWrapper;\n }\n\n public dispose() {\n super.dispose();\n\n this.onBlurObservable.clear();\n this.onFocusObservable.clear();\n this.onTextChangedObservable.clear();\n this.onTextCopyObservable.clear();\n this.onTextCutObservable.clear();\n this.onTextPasteObservable.clear();\n this.onTextHighlightObservable.clear();\n this.onKeyboardEventProcessedObservable.clear();\n }\n}\nRegisterClass(\"BABYLON.GUI.InputText\", InputText);\n"]}
|
|
@@ -277,7 +277,7 @@ var BaseSlider = /** @class */ (function (_super) {
|
|
|
277
277
|
else {
|
|
278
278
|
value = this._minimum + ((x - this._currentMeasure.left) / this._currentMeasure.width) * (this._maximum - this._minimum);
|
|
279
279
|
}
|
|
280
|
-
this.value = this._step ? (
|
|
280
|
+
this.value = this._step ? Math.round(value / this._step) * this._step : value;
|
|
281
281
|
};
|
|
282
282
|
BaseSlider.prototype._onPointerDown = function (target, coordinates, pointerId, buttonIndex, pi) {
|
|
283
283
|
if (!_super.prototype._onPointerDown.call(this, target, coordinates, pointerId, buttonIndex, pi)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseSlider.js","sourceRoot":"","sources":["../../../../../sourceES6/gui/src/2D/controls/sliders/baseSlider.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"@babylonjs/core/Misc/observable\";\r\nimport { Vector2 } from \"@babylonjs/core/Maths/math.vector\";\r\n\r\nimport { Control } from \"../control\";\r\nimport { ValueAndUnit } from \"../../valueAndUnit\";\r\nimport { PointerInfoBase } from '@babylonjs/core/Events/pointerEvents';\r\nimport { serialize } from \"@babylonjs/core/Misc/decorators\";\r\n\r\n/**\r\n * Class used to create slider controls\r\n */\r\nexport class BaseSlider extends Control {\r\n protected _thumbWidth = new ValueAndUnit(20, ValueAndUnit.UNITMODE_PIXEL, false);\r\n private _minimum = 0;\r\n private _maximum = 100;\r\n private _value = 50;\r\n private _isVertical = false;\r\n protected _barOffset = new ValueAndUnit(5, ValueAndUnit.UNITMODE_PIXEL, false);\r\n private _isThumbClamped = false;\r\n protected _displayThumb = true;\r\n private _step = 0;\r\n\r\n private _lastPointerDownId = -1;\r\n\r\n // Shared rendering info\r\n protected _effectiveBarOffset = 0;\r\n protected _renderLeft: number;\r\n protected _renderTop: number;\r\n protected _renderWidth: number;\r\n protected _renderHeight: number;\r\n protected _backgroundBoxLength: number;\r\n protected _backgroundBoxThickness: number;\r\n protected _effectiveThumbThickness: number;\r\n\r\n /** Observable raised when the sldier value changes */\r\n public onValueChangedObservable = new Observable<number>();\r\n\r\n /** Gets or sets a boolean indicating if the thumb must be rendered */\r\n @serialize()\r\n public get displayThumb(): boolean {\r\n return this._displayThumb;\r\n }\r\n\r\n public set displayThumb(value: boolean) {\r\n if (this._displayThumb === value) {\r\n return;\r\n }\r\n\r\n this._displayThumb = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets a step to apply to values (0 by default) */\r\n @serialize()\r\n public get step(): number {\r\n return this._step;\r\n }\r\n\r\n public set step(value: number) {\r\n if (this._step === value) {\r\n return;\r\n }\r\n\r\n this._step = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets main bar offset (ie. the margin applied to the value bar) */\r\n @serialize()\r\n public get barOffset(): string | number {\r\n return this._barOffset.toString(this._host);\r\n }\r\n\r\n /** Gets main bar offset in pixels*/\r\n public get barOffsetInPixels(): number {\r\n return this._barOffset.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set barOffset(value: string | number) {\r\n if (this._barOffset.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._barOffset.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets thumb width */\r\n @serialize()\r\n public get thumbWidth(): string | number {\r\n return this._thumbWidth.toString(this._host);\r\n }\r\n\r\n /** Gets thumb width in pixels */\r\n public get thumbWidthInPixels(): number {\r\n return this._thumbWidth.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set thumbWidth(value: string | number) {\r\n if (this._thumbWidth.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._thumbWidth.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets minimum value */\r\n @serialize()\r\n public get minimum(): number {\r\n return this._minimum;\r\n }\r\n\r\n public set minimum(value: number) {\r\n if (this._minimum === value) {\r\n return;\r\n }\r\n\r\n this._minimum = value;\r\n this._markAsDirty();\r\n\r\n this.value = Math.max(Math.min(this.value, this._maximum), this._minimum);\r\n }\r\n\r\n /** Gets or sets maximum value */\r\n @serialize()\r\n public get maximum(): number {\r\n return this._maximum;\r\n }\r\n\r\n public set maximum(value: number) {\r\n if (this._maximum === value) {\r\n return;\r\n }\r\n\r\n this._maximum = value;\r\n this._markAsDirty();\r\n\r\n this.value = Math.max(Math.min(this.value, this._maximum), this._minimum);\r\n }\r\n\r\n /** Gets or sets current value */\r\n @serialize()\r\n public get value(): number {\r\n return this._value;\r\n }\r\n\r\n public set value(value: number) {\r\n value = Math.max(Math.min(value, this._maximum), this._minimum);\r\n\r\n if (this._value === value) {\r\n return;\r\n }\r\n\r\n this._value = value;\r\n this._markAsDirty();\r\n this.onValueChangedObservable.notifyObservers(this._value);\r\n }\r\n\r\n /**Gets or sets a boolean indicating if the slider should be vertical or horizontal */\r\n @serialize()\r\n public get isVertical(): boolean {\r\n return this._isVertical;\r\n }\r\n\r\n public set isVertical(value: boolean) {\r\n if (this._isVertical === value) {\r\n return;\r\n }\r\n\r\n this._isVertical = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets a value indicating if the thumb can go over main bar extends */\r\n @serialize()\r\n public get isThumbClamped(): boolean {\r\n return this._isThumbClamped;\r\n }\r\n\r\n public set isThumbClamped(value: boolean) {\r\n if (this._isThumbClamped === value) {\r\n return;\r\n }\r\n\r\n this._isThumbClamped = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Creates a new BaseSlider\r\n * @param name defines the control name\r\n */\r\n constructor(public name?: string) {\r\n super(name);\r\n\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"BaseSlider\";\r\n }\r\n\r\n protected _getThumbPosition() {\r\n if (this.isVertical) {\r\n return ((this.maximum - this.value) / (this.maximum - this.minimum)) * this._backgroundBoxLength;\r\n }\r\n\r\n return ((this.value - this.minimum) / (this.maximum - this.minimum)) * this._backgroundBoxLength;\r\n }\r\n\r\n protected _getThumbThickness(type: string): number {\r\n var thumbThickness = 0;\r\n switch (type) {\r\n case \"circle\":\r\n if (this._thumbWidth.isPixel) {\r\n thumbThickness = Math.max(this._thumbWidth.getValue(this._host), this._backgroundBoxThickness);\r\n }\r\n else {\r\n thumbThickness = this._backgroundBoxThickness * this._thumbWidth.getValue(this._host);\r\n }\r\n break;\r\n case \"rectangle\":\r\n if (this._thumbWidth.isPixel) {\r\n thumbThickness = Math.min(this._thumbWidth.getValue(this._host), this._backgroundBoxThickness);\r\n }\r\n else {\r\n thumbThickness = this._backgroundBoxThickness * this._thumbWidth.getValue(this._host);\r\n }\r\n }\r\n return thumbThickness;\r\n }\r\n\r\n protected _prepareRenderingData(type: string) {\r\n // Main bar\r\n this._effectiveBarOffset = 0;\r\n this._renderLeft = this._currentMeasure.left;\r\n this._renderTop = this._currentMeasure.top;\r\n this._renderWidth = this._currentMeasure.width;\r\n this._renderHeight = this._currentMeasure.height;\r\n\r\n this._backgroundBoxLength = Math.max(this._currentMeasure.width, this._currentMeasure.height);\r\n this._backgroundBoxThickness = Math.min(this._currentMeasure.width, this._currentMeasure.height);\r\n this._effectiveThumbThickness = this._getThumbThickness(type);\r\n\r\n if (this.displayThumb) {\r\n this._backgroundBoxLength -= this._effectiveThumbThickness;\r\n }\r\n //throw error when height is less than width for vertical slider\r\n if ((this.isVertical && this._currentMeasure.height < this._currentMeasure.width)) {\r\n console.error(\"Height should be greater than width\");\r\n return;\r\n }\r\n if (this._barOffset.isPixel) {\r\n this._effectiveBarOffset = Math.min(this._barOffset.getValue(this._host), this._backgroundBoxThickness);\r\n }\r\n else {\r\n this._effectiveBarOffset = this._backgroundBoxThickness * this._barOffset.getValue(this._host);\r\n }\r\n\r\n this._backgroundBoxThickness -= (this._effectiveBarOffset * 2);\r\n\r\n if (this.isVertical) {\r\n this._renderLeft += this._effectiveBarOffset;\r\n if (!this.isThumbClamped && this.displayThumb) {\r\n this._renderTop += (this._effectiveThumbThickness / 2);\r\n }\r\n\r\n this._renderHeight = this._backgroundBoxLength;\r\n this._renderWidth = this._backgroundBoxThickness;\r\n\r\n }\r\n else {\r\n this._renderTop += this._effectiveBarOffset;\r\n if (!this.isThumbClamped && this.displayThumb) {\r\n this._renderLeft += (this._effectiveThumbThickness / 2);\r\n }\r\n this._renderHeight = this._backgroundBoxThickness;\r\n this._renderWidth = this._backgroundBoxLength;\r\n }\r\n }\r\n\r\n // Events\r\n private _pointerIsDown = false;\r\n\r\n /** @hidden */\r\n protected _updateValueFromPointer(x: number, y: number): void {\r\n if (this.rotation != 0) {\r\n this._invertTransformMatrix.transformCoordinates(x, y, this._transformedPosition);\r\n x = this._transformedPosition.x;\r\n y = this._transformedPosition.y;\r\n }\r\n\r\n let value: number;\r\n if (this._isVertical) {\r\n value = this._minimum + (1 - ((y - this._currentMeasure.top) / this._currentMeasure.height)) * (this._maximum - this._minimum);\r\n }\r\n else {\r\n value = this._minimum + ((x - this._currentMeasure.left) / this._currentMeasure.width) * (this._maximum - this._minimum);\r\n }\r\n\r\n this.value = this._step ? ((value / this._step) | 0) * this._step : value;\r\n }\r\n\r\n public _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._pointerIsDown = true;\r\n\r\n this._updateValueFromPointer(coordinates.x, coordinates.y);\r\n this._host._capturingControl[pointerId] = this;\r\n this._lastPointerDownId = pointerId;\r\n return true;\r\n }\r\n\r\n public _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n // Only listen to pointer move events coming from the last pointer to click on the element (To support dual vr controller interaction)\r\n if (pointerId != this._lastPointerDownId) {\r\n return;\r\n }\r\n\r\n if (this._pointerIsDown && !this.isReadOnly) {\r\n this._updateValueFromPointer(coordinates.x, coordinates.y);\r\n }\r\n\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\r\n this._pointerIsDown = false;\r\n\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick);\r\n }\r\n\r\n public _onCanvasBlur(): void {\r\n this._forcePointerUp();\r\n super._onCanvasBlur();\r\n }\r\n\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"baseSlider.js","sourceRoot":"","sources":["../../../../../sourceES6/gui/src/2D/controls/sliders/baseSlider.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"@babylonjs/core/Misc/observable\";\r\nimport { Vector2 } from \"@babylonjs/core/Maths/math.vector\";\r\n\r\nimport { Control } from \"../control\";\r\nimport { ValueAndUnit } from \"../../valueAndUnit\";\r\nimport { PointerInfoBase } from '@babylonjs/core/Events/pointerEvents';\r\nimport { serialize } from \"@babylonjs/core/Misc/decorators\";\r\n\r\n/**\r\n * Class used to create slider controls\r\n */\r\nexport class BaseSlider extends Control {\r\n protected _thumbWidth = new ValueAndUnit(20, ValueAndUnit.UNITMODE_PIXEL, false);\r\n private _minimum = 0;\r\n private _maximum = 100;\r\n private _value = 50;\r\n private _isVertical = false;\r\n protected _barOffset = new ValueAndUnit(5, ValueAndUnit.UNITMODE_PIXEL, false);\r\n private _isThumbClamped = false;\r\n protected _displayThumb = true;\r\n private _step = 0;\r\n\r\n private _lastPointerDownId = -1;\r\n\r\n // Shared rendering info\r\n protected _effectiveBarOffset = 0;\r\n protected _renderLeft: number;\r\n protected _renderTop: number;\r\n protected _renderWidth: number;\r\n protected _renderHeight: number;\r\n protected _backgroundBoxLength: number;\r\n protected _backgroundBoxThickness: number;\r\n protected _effectiveThumbThickness: number;\r\n\r\n /** Observable raised when the sldier value changes */\r\n public onValueChangedObservable = new Observable<number>();\r\n\r\n /** Gets or sets a boolean indicating if the thumb must be rendered */\r\n @serialize()\r\n public get displayThumb(): boolean {\r\n return this._displayThumb;\r\n }\r\n\r\n public set displayThumb(value: boolean) {\r\n if (this._displayThumb === value) {\r\n return;\r\n }\r\n\r\n this._displayThumb = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets a step to apply to values (0 by default) */\r\n @serialize()\r\n public get step(): number {\r\n return this._step;\r\n }\r\n\r\n public set step(value: number) {\r\n if (this._step === value) {\r\n return;\r\n }\r\n\r\n this._step = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets main bar offset (ie. the margin applied to the value bar) */\r\n @serialize()\r\n public get barOffset(): string | number {\r\n return this._barOffset.toString(this._host);\r\n }\r\n\r\n /** Gets main bar offset in pixels*/\r\n public get barOffsetInPixels(): number {\r\n return this._barOffset.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set barOffset(value: string | number) {\r\n if (this._barOffset.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._barOffset.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets thumb width */\r\n @serialize()\r\n public get thumbWidth(): string | number {\r\n return this._thumbWidth.toString(this._host);\r\n }\r\n\r\n /** Gets thumb width in pixels */\r\n public get thumbWidthInPixels(): number {\r\n return this._thumbWidth.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set thumbWidth(value: string | number) {\r\n if (this._thumbWidth.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._thumbWidth.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets minimum value */\r\n @serialize()\r\n public get minimum(): number {\r\n return this._minimum;\r\n }\r\n\r\n public set minimum(value: number) {\r\n if (this._minimum === value) {\r\n return;\r\n }\r\n\r\n this._minimum = value;\r\n this._markAsDirty();\r\n\r\n this.value = Math.max(Math.min(this.value, this._maximum), this._minimum);\r\n }\r\n\r\n /** Gets or sets maximum value */\r\n @serialize()\r\n public get maximum(): number {\r\n return this._maximum;\r\n }\r\n\r\n public set maximum(value: number) {\r\n if (this._maximum === value) {\r\n return;\r\n }\r\n\r\n this._maximum = value;\r\n this._markAsDirty();\r\n\r\n this.value = Math.max(Math.min(this.value, this._maximum), this._minimum);\r\n }\r\n\r\n /** Gets or sets current value */\r\n @serialize()\r\n public get value(): number {\r\n return this._value;\r\n }\r\n\r\n public set value(value: number) {\r\n value = Math.max(Math.min(value, this._maximum), this._minimum);\r\n\r\n if (this._value === value) {\r\n return;\r\n }\r\n\r\n this._value = value;\r\n this._markAsDirty();\r\n this.onValueChangedObservable.notifyObservers(this._value);\r\n }\r\n\r\n /**Gets or sets a boolean indicating if the slider should be vertical or horizontal */\r\n @serialize()\r\n public get isVertical(): boolean {\r\n return this._isVertical;\r\n }\r\n\r\n public set isVertical(value: boolean) {\r\n if (this._isVertical === value) {\r\n return;\r\n }\r\n\r\n this._isVertical = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets a value indicating if the thumb can go over main bar extends */\r\n @serialize()\r\n public get isThumbClamped(): boolean {\r\n return this._isThumbClamped;\r\n }\r\n\r\n public set isThumbClamped(value: boolean) {\r\n if (this._isThumbClamped === value) {\r\n return;\r\n }\r\n\r\n this._isThumbClamped = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Creates a new BaseSlider\r\n * @param name defines the control name\r\n */\r\n constructor(public name?: string) {\r\n super(name);\r\n\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"BaseSlider\";\r\n }\r\n\r\n protected _getThumbPosition() {\r\n if (this.isVertical) {\r\n return ((this.maximum - this.value) / (this.maximum - this.minimum)) * this._backgroundBoxLength;\r\n }\r\n\r\n return ((this.value - this.minimum) / (this.maximum - this.minimum)) * this._backgroundBoxLength;\r\n }\r\n\r\n protected _getThumbThickness(type: string): number {\r\n var thumbThickness = 0;\r\n switch (type) {\r\n case \"circle\":\r\n if (this._thumbWidth.isPixel) {\r\n thumbThickness = Math.max(this._thumbWidth.getValue(this._host), this._backgroundBoxThickness);\r\n }\r\n else {\r\n thumbThickness = this._backgroundBoxThickness * this._thumbWidth.getValue(this._host);\r\n }\r\n break;\r\n case \"rectangle\":\r\n if (this._thumbWidth.isPixel) {\r\n thumbThickness = Math.min(this._thumbWidth.getValue(this._host), this._backgroundBoxThickness);\r\n }\r\n else {\r\n thumbThickness = this._backgroundBoxThickness * this._thumbWidth.getValue(this._host);\r\n }\r\n }\r\n return thumbThickness;\r\n }\r\n\r\n protected _prepareRenderingData(type: string) {\r\n // Main bar\r\n this._effectiveBarOffset = 0;\r\n this._renderLeft = this._currentMeasure.left;\r\n this._renderTop = this._currentMeasure.top;\r\n this._renderWidth = this._currentMeasure.width;\r\n this._renderHeight = this._currentMeasure.height;\r\n\r\n this._backgroundBoxLength = Math.max(this._currentMeasure.width, this._currentMeasure.height);\r\n this._backgroundBoxThickness = Math.min(this._currentMeasure.width, this._currentMeasure.height);\r\n this._effectiveThumbThickness = this._getThumbThickness(type);\r\n\r\n if (this.displayThumb) {\r\n this._backgroundBoxLength -= this._effectiveThumbThickness;\r\n }\r\n //throw error when height is less than width for vertical slider\r\n if ((this.isVertical && this._currentMeasure.height < this._currentMeasure.width)) {\r\n console.error(\"Height should be greater than width\");\r\n return;\r\n }\r\n if (this._barOffset.isPixel) {\r\n this._effectiveBarOffset = Math.min(this._barOffset.getValue(this._host), this._backgroundBoxThickness);\r\n }\r\n else {\r\n this._effectiveBarOffset = this._backgroundBoxThickness * this._barOffset.getValue(this._host);\r\n }\r\n\r\n this._backgroundBoxThickness -= (this._effectiveBarOffset * 2);\r\n\r\n if (this.isVertical) {\r\n this._renderLeft += this._effectiveBarOffset;\r\n if (!this.isThumbClamped && this.displayThumb) {\r\n this._renderTop += (this._effectiveThumbThickness / 2);\r\n }\r\n\r\n this._renderHeight = this._backgroundBoxLength;\r\n this._renderWidth = this._backgroundBoxThickness;\r\n\r\n }\r\n else {\r\n this._renderTop += this._effectiveBarOffset;\r\n if (!this.isThumbClamped && this.displayThumb) {\r\n this._renderLeft += (this._effectiveThumbThickness / 2);\r\n }\r\n this._renderHeight = this._backgroundBoxThickness;\r\n this._renderWidth = this._backgroundBoxLength;\r\n }\r\n }\r\n\r\n // Events\r\n private _pointerIsDown = false;\r\n\r\n /** @hidden */\r\n protected _updateValueFromPointer(x: number, y: number): void {\r\n if (this.rotation != 0) {\r\n this._invertTransformMatrix.transformCoordinates(x, y, this._transformedPosition);\r\n x = this._transformedPosition.x;\r\n y = this._transformedPosition.y;\r\n }\r\n\r\n let value: number;\r\n if (this._isVertical) {\r\n value = this._minimum + (1 - ((y - this._currentMeasure.top) / this._currentMeasure.height)) * (this._maximum - this._minimum);\r\n }\r\n else {\r\n value = this._minimum + ((x - this._currentMeasure.left) / this._currentMeasure.width) * (this._maximum - this._minimum);\r\n }\r\n this.value = this._step ? Math.round(value / this._step) * this._step : value;\r\n }\r\n\r\n public _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._pointerIsDown = true;\r\n\r\n this._updateValueFromPointer(coordinates.x, coordinates.y);\r\n this._host._capturingControl[pointerId] = this;\r\n this._lastPointerDownId = pointerId;\r\n return true;\r\n }\r\n\r\n public _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n // Only listen to pointer move events coming from the last pointer to click on the element (To support dual vr controller interaction)\r\n if (pointerId != this._lastPointerDownId) {\r\n return;\r\n }\r\n\r\n if (this._pointerIsDown && !this.isReadOnly) {\r\n this._updateValueFromPointer(coordinates.x, coordinates.y);\r\n }\r\n\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\r\n this._pointerIsDown = false;\r\n\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick);\r\n }\r\n\r\n public _onCanvasBlur(): void {\r\n this._forcePointerUp();\r\n super._onCanvasBlur();\r\n }\r\n\r\n}\r\n"]}
|
|
@@ -157,6 +157,7 @@ export declare class TextBlock extends Control {
|
|
|
157
157
|
protected _applyStates(context: ICanvasRenderingContext): void;
|
|
158
158
|
protected _breakLines(refWidth: number, refHeight: number, context: ICanvasRenderingContext): object[];
|
|
159
159
|
protected _parseLine(line: string | undefined, context: ICanvasRenderingContext): object;
|
|
160
|
+
private _getCharsToRemove;
|
|
160
161
|
protected _parseLineEllipsis(line: string | undefined, width: number, context: ICanvasRenderingContext): object;
|
|
161
162
|
protected _parseLineWordWrap(line: string | undefined, width: number, context: ICanvasRenderingContext): object[];
|
|
162
163
|
protected _parseLineWordWrapEllipsis(line: string | undefined, width: number, height: number, context: ICanvasRenderingContext): object[];
|
package/2D/controls/textBlock.js
CHANGED
|
@@ -415,30 +415,40 @@ var TextBlock = /** @class */ (function (_super) {
|
|
|
415
415
|
var lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
|
|
416
416
|
return { text: line, width: lineWidth };
|
|
417
417
|
};
|
|
418
|
+
//Calculate how many characters approximately we need to remove
|
|
419
|
+
TextBlock.prototype._getCharsToRemove = function (lineWidth, width, lineLength) {
|
|
420
|
+
var diff = lineWidth > width ? lineWidth - width : 0;
|
|
421
|
+
// This isn't exact unless the font is monospaced
|
|
422
|
+
var charWidth = lineWidth / lineLength;
|
|
423
|
+
var removeChars = Math.max(Math.floor(diff / charWidth), 1);
|
|
424
|
+
return removeChars;
|
|
425
|
+
};
|
|
418
426
|
TextBlock.prototype._parseLineEllipsis = function (line, width, context) {
|
|
419
427
|
if (line === void 0) { line = ""; }
|
|
420
428
|
var textMetrics = context.measureText(line);
|
|
421
429
|
var lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
|
|
422
|
-
|
|
423
|
-
line += "…";
|
|
424
|
-
}
|
|
430
|
+
var removeChars = this._getCharsToRemove(lineWidth, width, line.length);
|
|
425
431
|
// unicode support. split('') does not work with unicode!
|
|
426
432
|
// make sure Array.from is available
|
|
427
433
|
var characters = Array.from && Array.from(line);
|
|
428
434
|
if (!characters) {
|
|
429
435
|
// no array.from, use the old method
|
|
430
436
|
while (line.length > 2 && lineWidth > width) {
|
|
431
|
-
line = line.slice(0, -
|
|
432
|
-
textMetrics = context.measureText(line);
|
|
437
|
+
line = line.slice(0, -removeChars);
|
|
438
|
+
textMetrics = context.measureText(line + "…");
|
|
433
439
|
lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
|
|
440
|
+
removeChars = this._getCharsToRemove(lineWidth, width, line.length);
|
|
434
441
|
}
|
|
442
|
+
// Add on the end
|
|
443
|
+
line += "…";
|
|
435
444
|
}
|
|
436
445
|
else {
|
|
437
446
|
while (characters.length && lineWidth > width) {
|
|
438
|
-
characters.
|
|
439
|
-
line = "".concat(characters.join(""), "
|
|
447
|
+
characters.splice(characters.length - removeChars, removeChars);
|
|
448
|
+
line = "".concat(characters.join(""), "\u2026");
|
|
440
449
|
textMetrics = context.measureText(line);
|
|
441
450
|
lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
|
|
451
|
+
removeChars = this._getCharsToRemove(lineWidth, width, line.length);
|
|
442
452
|
}
|
|
443
453
|
}
|
|
444
454
|
return { text: line, width: lineWidth };
|