@babylonjs/gui 5.19.0 → 5.22.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.
Files changed (180) hide show
  1. package/2D/adtInstrumentation.js +70 -90
  2. package/2D/adtInstrumentation.js.map +1 -1
  3. package/2D/advancedDynamicTexture.d.ts +8 -0
  4. package/2D/advancedDynamicTexture.js +559 -620
  5. package/2D/advancedDynamicTexture.js.map +1 -1
  6. package/2D/controls/button.js +76 -90
  7. package/2D/controls/button.js.map +1 -1
  8. package/2D/controls/checkbox.js +86 -106
  9. package/2D/controls/checkbox.js.map +1 -1
  10. package/2D/controls/colorpicker.js +395 -415
  11. package/2D/controls/colorpicker.js.map +1 -1
  12. package/2D/controls/container.js +187 -230
  13. package/2D/controls/container.js.map +1 -1
  14. package/2D/controls/control.js +1073 -1353
  15. package/2D/controls/control.js.map +1 -1
  16. package/2D/controls/displayGrid.js +152 -196
  17. package/2D/controls/displayGrid.js.map +1 -1
  18. package/2D/controls/ellipse.js +32 -40
  19. package/2D/controls/ellipse.js.map +1 -1
  20. package/2D/controls/focusableButton.js +30 -35
  21. package/2D/controls/focusableButton.js.map +1 -1
  22. package/2D/controls/grid.js +172 -212
  23. package/2D/controls/grid.js.map +1 -1
  24. package/2D/controls/image.js +489 -592
  25. package/2D/controls/image.js.map +1 -1
  26. package/2D/controls/inputPassword.js +9 -16
  27. package/2D/controls/inputPassword.js.map +1 -1
  28. package/2D/controls/inputText.js +380 -467
  29. package/2D/controls/inputText.js.map +1 -1
  30. package/2D/controls/inputTextArea.js +234 -273
  31. package/2D/controls/inputTextArea.js.map +1 -1
  32. package/2D/controls/line.js +147 -198
  33. package/2D/controls/line.js.map +1 -1
  34. package/2D/controls/multiLine.js +87 -113
  35. package/2D/controls/multiLine.js.map +1 -1
  36. package/2D/controls/radioButton.js +106 -127
  37. package/2D/controls/radioButton.js.map +1 -1
  38. package/2D/controls/rectangle.js +64 -76
  39. package/2D/controls/rectangle.js.map +1 -1
  40. package/2D/controls/scrollViewers/scrollViewer.js +439 -543
  41. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  42. package/2D/controls/scrollViewers/scrollViewerWindow.js +99 -118
  43. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  44. package/2D/controls/selector.js +241 -329
  45. package/2D/controls/selector.js.map +1 -1
  46. package/2D/controls/sliders/baseSlider.js +182 -230
  47. package/2D/controls/sliders/baseSlider.js.map +1 -1
  48. package/2D/controls/sliders/imageBasedSlider.js +86 -109
  49. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  50. package/2D/controls/sliders/imageScrollBar.d.ts +4 -0
  51. package/2D/controls/sliders/imageScrollBar.js +149 -163
  52. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  53. package/2D/controls/sliders/scrollBar.d.ts +4 -0
  54. package/2D/controls/sliders/scrollBar.js +65 -65
  55. package/2D/controls/sliders/scrollBar.js.map +1 -1
  56. package/2D/controls/sliders/slider.js +91 -115
  57. package/2D/controls/sliders/slider.js.map +1 -1
  58. package/2D/controls/stackPanel.js +114 -135
  59. package/2D/controls/stackPanel.js.map +1 -1
  60. package/2D/controls/statics.js +5 -5
  61. package/2D/controls/statics.js.map +1 -1
  62. package/2D/controls/textBlock.js +322 -384
  63. package/2D/controls/textBlock.js.map +1 -1
  64. package/2D/controls/textWrapper.js +27 -41
  65. package/2D/controls/textWrapper.js.map +1 -1
  66. package/2D/controls/toggleButton.js +105 -121
  67. package/2D/controls/toggleButton.js.map +1 -1
  68. package/2D/controls/virtualKeyboard.js +101 -123
  69. package/2D/controls/virtualKeyboard.js.map +1 -1
  70. package/2D/math2D.js +62 -70
  71. package/2D/math2D.js.map +1 -1
  72. package/2D/measure.js +30 -32
  73. package/2D/measure.js.map +1 -1
  74. package/2D/multiLinePoint.js +71 -89
  75. package/2D/multiLinePoint.js.map +1 -1
  76. package/2D/style.js +55 -73
  77. package/2D/style.js.map +1 -1
  78. package/2D/valueAndUnit.js +71 -104
  79. package/2D/valueAndUnit.js.map +1 -1
  80. package/2D/xmlLoader.js +70 -84
  81. package/2D/xmlLoader.js.map +1 -1
  82. package/3D/behaviors/defaultBehavior.js +40 -59
  83. package/3D/behaviors/defaultBehavior.js.map +1 -1
  84. package/3D/controls/abstractButton3D.js +8 -12
  85. package/3D/controls/abstractButton3D.js.map +1 -1
  86. package/3D/controls/button3D.js +30 -35
  87. package/3D/controls/button3D.js.map +1 -1
  88. package/3D/controls/container3D.js +57 -71
  89. package/3D/controls/container3D.js.map +1 -1
  90. package/3D/controls/contentDisplay3D.js +47 -60
  91. package/3D/controls/contentDisplay3D.js.map +1 -1
  92. package/3D/controls/control3D.js +123 -158
  93. package/3D/controls/control3D.js.map +1 -1
  94. package/3D/controls/cylinderPanel.js +28 -38
  95. package/3D/controls/cylinderPanel.js.map +1 -1
  96. package/3D/controls/handMenu.js +20 -29
  97. package/3D/controls/handMenu.js.map +1 -1
  98. package/3D/controls/holographicBackplate.js +52 -72
  99. package/3D/controls/holographicBackplate.js.map +1 -1
  100. package/3D/controls/holographicButton.js +160 -200
  101. package/3D/controls/holographicButton.js.map +1 -1
  102. package/3D/controls/holographicSlate.js +176 -206
  103. package/3D/controls/holographicSlate.js.map +1 -1
  104. package/3D/controls/meshButton3D.js +24 -30
  105. package/3D/controls/meshButton3D.js.map +1 -1
  106. package/3D/controls/nearMenu.js +57 -71
  107. package/3D/controls/nearMenu.js.map +1 -1
  108. package/3D/controls/planePanel.js +6 -13
  109. package/3D/controls/planePanel.js.map +1 -1
  110. package/3D/controls/scatterPanel.js +43 -54
  111. package/3D/controls/scatterPanel.js.map +1 -1
  112. package/3D/controls/slider3D.js +168 -222
  113. package/3D/controls/slider3D.js.map +1 -1
  114. package/3D/controls/spherePanel.js +29 -39
  115. package/3D/controls/spherePanel.js.map +1 -1
  116. package/3D/controls/stackPanel3D.js +36 -49
  117. package/3D/controls/stackPanel3D.js.map +1 -1
  118. package/3D/controls/touchButton3D.js +126 -154
  119. package/3D/controls/touchButton3D.js.map +1 -1
  120. package/3D/controls/touchHolographicButton.js +223 -272
  121. package/3D/controls/touchHolographicButton.js.map +1 -1
  122. package/3D/controls/touchHolographicMenu.js +55 -66
  123. package/3D/controls/touchHolographicMenu.js.map +1 -1
  124. package/3D/controls/touchMeshButton3D.js +24 -30
  125. package/3D/controls/touchMeshButton3D.js.map +1 -1
  126. package/3D/controls/volumeBasedPanel.js +85 -107
  127. package/3D/controls/volumeBasedPanel.js.map +1 -1
  128. package/3D/gizmos/gizmoHandle.js +68 -103
  129. package/3D/gizmos/gizmoHandle.js.map +1 -1
  130. package/3D/gizmos/slateGizmo.js +165 -182
  131. package/3D/gizmos/slateGizmo.js.map +1 -1
  132. package/3D/gui3DManager.js +76 -101
  133. package/3D/gui3DManager.js.map +1 -1
  134. package/3D/materials/fluent/fluentMaterial.js +110 -119
  135. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  136. package/3D/materials/fluent/shaders/fluent.fragment.js +20 -3
  137. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -1
  138. package/3D/materials/fluent/shaders/fluent.vertex.js +11 -3
  139. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -1
  140. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +168 -177
  141. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  142. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +9 -3
  143. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -1
  144. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +15 -3
  145. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -1
  146. package/3D/materials/fluentButton/fluentButtonMaterial.js +205 -213
  147. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  148. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +6 -3
  149. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -1
  150. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +6 -3
  151. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -1
  152. package/3D/materials/handle/handleMaterial.js +56 -69
  153. package/3D/materials/handle/handleMaterial.js.map +1 -1
  154. package/3D/materials/handle/shaders/handle.fragment.js +3 -3
  155. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -1
  156. package/3D/materials/handle/shaders/handle.vertex.js +3 -3
  157. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -1
  158. package/3D/materials/mrdl/mrdlBackplateMaterial.js +158 -166
  159. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  160. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +322 -330
  161. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  162. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +322 -330
  163. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  164. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +9 -3
  165. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -1
  166. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +6 -3
  167. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -1
  168. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +24 -3
  169. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -1
  170. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +12 -3
  171. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -1
  172. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +24 -3
  173. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -1
  174. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +12 -3
  175. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -1
  176. package/3D/vector3WithInfo.js +6 -12
  177. package/3D/vector3WithInfo.js.map +1 -1
  178. package/legacy/legacy.js +1 -1
  179. package/legacy/legacy.js.map +1 -1
  180. package/package.json +2 -5
@@ -1 +1 @@
1
- {"version":3,"file":"textBlock.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/2D/controls/textBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport type { Measure } from \"../measure\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport { Control } from \"./control\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { ICanvasRenderingContext, ITextMetrics } from \"core/Engines/ICanvas\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\n\r\n/**\r\n * Enum that determines the text-wrapping mode to use.\r\n */\r\nexport enum TextWrapping {\r\n /**\r\n * Clip the text when it's larger than Control.width; this is the default mode.\r\n */\r\n Clip = 0,\r\n\r\n /**\r\n * Wrap the text word-wise, i.e. try to add line-breaks at word boundary to fit within Control.width.\r\n */\r\n WordWrap = 1,\r\n\r\n /**\r\n * Ellipsize the text, i.e. shrink with trailing … when text is larger than Control.width.\r\n */\r\n Ellipsis = 2,\r\n\r\n /**\r\n * Wrap the text word-wise and clip the text when the text's height is larger than the Control.height, and shrink the last line with trailing … .\r\n */\r\n WordWrapEllipsis,\r\n}\r\n\r\n/**\r\n * Class used to create text block control\r\n */\r\nexport class TextBlock extends Control {\r\n private _text = \"\";\r\n private _textWrapping = TextWrapping.Clip;\r\n private _textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n private _textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n\r\n private _lines: any[];\r\n private _resizeToFit: boolean = false;\r\n private _lineSpacing: ValueAndUnit = new ValueAndUnit(0);\r\n private _outlineWidth: number = 0;\r\n private _outlineColor: string = \"white\";\r\n private _underline: boolean = false;\r\n private _lineThrough: boolean = false;\r\n private _wordDivider: string = \" \";\r\n /**\r\n * An event triggered after the text is changed\r\n */\r\n public onTextChangedObservable = new Observable<TextBlock>();\r\n\r\n /**\r\n * An event triggered after the text was broken up into lines\r\n */\r\n public onLinesReadyObservable = new Observable<TextBlock>();\r\n\r\n /**\r\n * Function used to split a string into words. By default, a string is split at each space character found\r\n */\r\n public wordSplittingFunction: Nullable<(line: string) => string[]>;\r\n\r\n /**\r\n * Return the line list (you may need to use the onLinesReadyObservable to make sure the list is ready)\r\n */\r\n public get lines(): any[] {\r\n return this._lines;\r\n }\r\n\r\n /**\r\n * Gets or sets an boolean indicating that the TextBlock will be resized to fit container\r\n */\r\n @serialize()\r\n public get resizeToFit(): boolean {\r\n return this._resizeToFit;\r\n }\r\n\r\n /**\r\n * Gets or sets an boolean indicating that the TextBlock will be resized to fit container\r\n */\r\n public set resizeToFit(value: boolean) {\r\n if (this._resizeToFit === value) {\r\n return;\r\n }\r\n this._resizeToFit = value;\r\n\r\n if (this._resizeToFit) {\r\n this._width.ignoreAdaptiveScaling = true;\r\n this._height.ignoreAdaptiveScaling = true;\r\n }\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if text must be wrapped\r\n */\r\n @serialize()\r\n public get textWrapping(): TextWrapping | boolean {\r\n return this._textWrapping;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if text must be wrapped\r\n */\r\n public set textWrapping(value: TextWrapping | boolean) {\r\n if (this._textWrapping === value) {\r\n return;\r\n }\r\n this._textWrapping = +value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets text to display\r\n */\r\n @serialize()\r\n public get text(): string {\r\n return this._text;\r\n }\r\n\r\n /**\r\n * Gets or sets text to display\r\n */\r\n public set text(value: string) {\r\n if (this._text === value) {\r\n return;\r\n }\r\n this._text = value + \"\"; // Making sure it is a text\r\n this._markAsDirty();\r\n\r\n this.onTextChangedObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets or sets text horizontal alignment (BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER by default)\r\n */\r\n @serialize()\r\n public get textHorizontalAlignment(): number {\r\n return this._textHorizontalAlignment;\r\n }\r\n\r\n /**\r\n * Gets or sets text horizontal alignment (BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER by default)\r\n */\r\n public set textHorizontalAlignment(value: number) {\r\n if (this._textHorizontalAlignment === value) {\r\n return;\r\n }\r\n\r\n this._textHorizontalAlignment = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets text vertical alignment (BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER by default)\r\n */\r\n @serialize()\r\n public get textVerticalAlignment(): number {\r\n return this._textVerticalAlignment;\r\n }\r\n\r\n /**\r\n * Gets or sets text vertical alignment (BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER by default)\r\n */\r\n public set textVerticalAlignment(value: number) {\r\n if (this._textVerticalAlignment === value) {\r\n return;\r\n }\r\n\r\n this._textVerticalAlignment = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets line spacing value\r\n */\r\n @serialize()\r\n public set lineSpacing(value: string | number) {\r\n if (this._lineSpacing.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets line spacing value\r\n */\r\n public get lineSpacing(): string | number {\r\n return this._lineSpacing.toString(this._host);\r\n }\r\n\r\n /**\r\n * Gets or sets outlineWidth of the text to display\r\n */\r\n @serialize()\r\n public get outlineWidth(): number {\r\n return this._outlineWidth;\r\n }\r\n\r\n /**\r\n * Gets or sets outlineWidth of the text to display\r\n */\r\n public set outlineWidth(value: number) {\r\n if (this._outlineWidth === value) {\r\n return;\r\n }\r\n this._outlineWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that text must have underline\r\n */\r\n @serialize()\r\n public get underline(): boolean {\r\n return this._underline;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that text must have underline\r\n */\r\n public set underline(value: boolean) {\r\n if (this._underline === value) {\r\n return;\r\n }\r\n this._underline = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets an boolean indicating that text must be crossed out\r\n */\r\n @serialize()\r\n public get lineThrough(): boolean {\r\n return this._lineThrough;\r\n }\r\n\r\n /**\r\n * Gets or sets an boolean indicating that text must be crossed out\r\n */\r\n public set lineThrough(value: boolean) {\r\n if (this._lineThrough === value) {\r\n return;\r\n }\r\n this._lineThrough = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets outlineColor of the text to display\r\n */\r\n @serialize()\r\n public get outlineColor(): string {\r\n return this._outlineColor;\r\n }\r\n\r\n /**\r\n * Gets or sets outlineColor of the text to display\r\n */\r\n public set outlineColor(value: string) {\r\n if (this._outlineColor === value) {\r\n return;\r\n }\r\n this._outlineColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets word divider\r\n */\r\n @serialize()\r\n public get wordDivider(): string {\r\n return this._wordDivider;\r\n }\r\n\r\n /**\r\n * Gets or sets word divider\r\n */\r\n public set wordDivider(value: string) {\r\n if (this._wordDivider === value) {\r\n return;\r\n }\r\n this._wordDivider = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Creates a new TextBlock object\r\n * @param name defines the name of the control\r\n * @param text defines the text to display (empty string by default)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the control\r\n */\r\n public name?: string,\r\n text: string = \"\"\r\n ) {\r\n super(name);\r\n\r\n this.text = text;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"TextBlock\";\r\n }\r\n\r\n protected _processMeasures(parentMeasure: Measure, context: ICanvasRenderingContext): void {\r\n if (!this._fontOffset || this.isDirty) {\r\n this._fontOffset = Control._GetFontOffset(context.font);\r\n }\r\n super._processMeasures(parentMeasure, context);\r\n\r\n // Prepare lines\r\n this._lines = this._breakLines(this._currentMeasure.width, this._currentMeasure.height, context);\r\n this.onLinesReadyObservable.notifyObservers(this);\r\n\r\n let maxLineWidth: number = 0;\r\n\r\n for (let i = 0; i < this._lines.length; i++) {\r\n const line = this._lines[i];\r\n\r\n if (line.width > maxLineWidth) {\r\n maxLineWidth = line.width;\r\n }\r\n }\r\n\r\n if (this._resizeToFit) {\r\n if (this._textWrapping === TextWrapping.Clip) {\r\n const newWidth = (this._paddingLeftInPixels + this._paddingRightInPixels + maxLineWidth) | 0;\r\n if (newWidth !== this._width.internalValue) {\r\n this._width.updateInPlace(newWidth, ValueAndUnit.UNITMODE_PIXEL);\r\n this._rebuildLayout = true;\r\n }\r\n }\r\n let newHeight = (this._paddingTopInPixels + this._paddingBottomInPixels + this._fontOffset.height * this._lines.length) | 0;\r\n\r\n if (this._lines.length > 0 && this._lineSpacing.internalValue !== 0) {\r\n let lineSpacing = 0;\r\n if (this._lineSpacing.isPixel) {\r\n lineSpacing = this._lineSpacing.getValue(this._host);\r\n } else {\r\n lineSpacing = this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);\r\n }\r\n\r\n newHeight += (this._lines.length - 1) * lineSpacing;\r\n }\r\n\r\n if (newHeight !== this._height.internalValue) {\r\n this._height.updateInPlace(newHeight, ValueAndUnit.UNITMODE_PIXEL);\r\n this._rebuildLayout = true;\r\n }\r\n }\r\n }\r\n\r\n private _drawText(text: string, textWidth: number, y: number, context: ICanvasRenderingContext): void {\r\n const width = this._currentMeasure.width;\r\n let x = 0;\r\n switch (this._textHorizontalAlignment) {\r\n case Control.HORIZONTAL_ALIGNMENT_LEFT:\r\n x = 0;\r\n break;\r\n case Control.HORIZONTAL_ALIGNMENT_RIGHT:\r\n x = width - textWidth;\r\n break;\r\n case Control.HORIZONTAL_ALIGNMENT_CENTER:\r\n x = (width - textWidth) / 2;\r\n break;\r\n }\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX;\r\n context.shadowOffsetY = this.shadowOffsetY;\r\n }\r\n\r\n if (this.outlineWidth) {\r\n context.strokeText(text, this._currentMeasure.left + x, y);\r\n }\r\n context.fillText(text, this._currentMeasure.left + x, y);\r\n\r\n if (this._underline) {\r\n context.beginPath();\r\n context.lineWidth = Math.round(this.fontSizeInPixels * 0.05);\r\n context.moveTo(this._currentMeasure.left + x, y + 3);\r\n context.lineTo(this._currentMeasure.left + x + textWidth, y + 3);\r\n context.stroke();\r\n context.closePath();\r\n }\r\n\r\n if (this._lineThrough) {\r\n context.beginPath();\r\n context.lineWidth = Math.round(this.fontSizeInPixels * 0.05);\r\n context.moveTo(this._currentMeasure.left + x, y - this.fontSizeInPixels / 3);\r\n context.lineTo(this._currentMeasure.left + x + textWidth, y - this.fontSizeInPixels / 3);\r\n context.stroke();\r\n context.closePath();\r\n }\r\n }\r\n\r\n /**\r\n * @param context\r\n * @hidden\r\n */\r\n public _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\r\n\r\n // Render lines\r\n this._renderLines(context);\r\n\r\n context.restore();\r\n }\r\n\r\n protected _applyStates(context: ICanvasRenderingContext): void {\r\n super._applyStates(context);\r\n if (this.outlineWidth) {\r\n context.lineWidth = this.outlineWidth;\r\n context.strokeStyle = this.outlineColor;\r\n context.lineJoin = \"miter\";\r\n context.miterLimit = 2;\r\n }\r\n }\r\n\r\n protected _breakLines(refWidth: number, refHeight: number, context: ICanvasRenderingContext): object[] {\r\n const lines = [];\r\n const _lines = this.text.split(\"\\n\");\r\n\r\n if (this._textWrapping === TextWrapping.Ellipsis) {\r\n for (const _line of _lines) {\r\n lines.push(this._parseLineEllipsis(_line, refWidth, context));\r\n }\r\n } else if (this._textWrapping === TextWrapping.WordWrap) {\r\n for (const _line of _lines) {\r\n lines.push(...this._parseLineWordWrap(_line, refWidth, context));\r\n }\r\n } else if (this._textWrapping === TextWrapping.WordWrapEllipsis) {\r\n for (const _line of _lines) {\r\n lines.push(...this._parseLineWordWrapEllipsis(_line, refWidth, refHeight!, context));\r\n }\r\n } else {\r\n for (const _line of _lines) {\r\n lines.push(this._parseLine(_line, context));\r\n }\r\n }\r\n\r\n return lines;\r\n }\r\n\r\n protected _parseLine(line: string = \"\", context: ICanvasRenderingContext): object {\r\n return { text: line, width: this._getTextMetricsWidth(context.measureText(line)) };\r\n }\r\n\r\n //Calculate how many characters approximately we need to remove\r\n private _getCharsToRemove(lineWidth: number, width: number, lineLength: number) {\r\n const diff = lineWidth > width ? lineWidth - width : 0;\r\n // This isn't exact unless the font is monospaced\r\n const charWidth = lineWidth / lineLength;\r\n const removeChars = Math.max(Math.floor(diff / charWidth), 1);\r\n return removeChars;\r\n }\r\n\r\n protected _parseLineEllipsis(line: string = \"\", width: number, context: ICanvasRenderingContext): object {\r\n let lineWidth = this._getTextMetricsWidth(context.measureText(line));\r\n\r\n let removeChars = this._getCharsToRemove(lineWidth, width, line.length);\r\n\r\n // unicode support. split('') does not work with unicode!\r\n // make sure Array.from is available\r\n const characters = Array.from && Array.from(line);\r\n if (!characters) {\r\n // no array.from, use the old method\r\n while (line.length > 2 && lineWidth > width) {\r\n line = line.slice(0, -removeChars);\r\n lineWidth = this._getTextMetricsWidth(context.measureText(line + \"…\"));\r\n\r\n removeChars = this._getCharsToRemove(lineWidth, width, line.length);\r\n }\r\n // Add on the end\r\n line += \"…\";\r\n } else {\r\n while (characters.length && lineWidth > width) {\r\n characters.splice(characters.length - removeChars, removeChars);\r\n line = `${characters.join(\"\")}…`;\r\n lineWidth = this._getTextMetricsWidth(context.measureText(line));\r\n\r\n removeChars = this._getCharsToRemove(lineWidth, width, line.length);\r\n }\r\n }\r\n\r\n return { text: line, width: lineWidth };\r\n }\r\n\r\n private _getTextMetricsWidth(textMetrics: ITextMetrics) {\r\n if (textMetrics.actualBoundingBoxLeft !== undefined) {\r\n return Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);\r\n }\r\n return textMetrics.width;\r\n }\r\n\r\n protected _parseLineWordWrap(line: string = \"\", width: number, context: ICanvasRenderingContext): object[] {\r\n const lines = [];\r\n const words = this.wordSplittingFunction ? this.wordSplittingFunction(line) : line.split(this._wordDivider);\r\n let lineWidth = this._getTextMetricsWidth(context.measureText(line));\r\n\r\n for (let n = 0; n < words.length; n++) {\r\n const testLine = n > 0 ? line + this._wordDivider + words[n] : words[0];\r\n const testWidth = this._getTextMetricsWidth(context.measureText(testLine));\r\n if (testWidth > width && n > 0) {\r\n lines.push({ text: line, width: lineWidth });\r\n line = words[n];\r\n lineWidth = this._getTextMetricsWidth(context.measureText(line));\r\n } else {\r\n lineWidth = testWidth;\r\n line = testLine;\r\n }\r\n }\r\n lines.push({ text: line, width: lineWidth });\r\n\r\n return lines;\r\n }\r\n\r\n protected _parseLineWordWrapEllipsis(line: string = \"\", width: number, height: number, context: ICanvasRenderingContext): object[] {\r\n const lines = this._parseLineWordWrap(line, width, context);\r\n for (let n = 1; n <= lines.length; n++) {\r\n const currentHeight = this._computeHeightForLinesOf(n);\r\n if (currentHeight > height && n > 1) {\r\n const lastLine = lines[n - 2] as { text: string; width: number };\r\n const currentLine = lines[n - 1] as { text: string; width: number };\r\n lines[n - 2] = this._parseLineEllipsis(`${lastLine.text + currentLine.text}`, width, context);\r\n const linesToRemove = lines.length - n + 1;\r\n for (let i = 0; i < linesToRemove; i++) {\r\n lines.pop();\r\n }\r\n return lines;\r\n }\r\n }\r\n\r\n return lines;\r\n }\r\n\r\n protected _renderLines(context: ICanvasRenderingContext): void {\r\n if (!this._fontOffset || !this._lines) {\r\n return;\r\n }\r\n const height = this._currentMeasure.height;\r\n let rootY = 0;\r\n switch (this._textVerticalAlignment) {\r\n case Control.VERTICAL_ALIGNMENT_TOP:\r\n rootY = this._fontOffset.ascent;\r\n break;\r\n case Control.VERTICAL_ALIGNMENT_BOTTOM:\r\n rootY = height - this._fontOffset.height * (this._lines.length - 1) - this._fontOffset.descent;\r\n break;\r\n case Control.VERTICAL_ALIGNMENT_CENTER:\r\n rootY = this._fontOffset.ascent + (height - this._fontOffset.height * this._lines.length) / 2;\r\n break;\r\n }\r\n\r\n rootY += this._currentMeasure.top;\r\n\r\n for (let i = 0; i < this._lines.length; i++) {\r\n const line = this._lines[i];\r\n\r\n if (i !== 0 && this._lineSpacing.internalValue !== 0) {\r\n if (this._lineSpacing.isPixel) {\r\n rootY += this._lineSpacing.getValue(this._host);\r\n } else {\r\n rootY = rootY + this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);\r\n }\r\n }\r\n\r\n this._drawText(line.text, line.width, rootY, context);\r\n rootY += this._fontOffset.height;\r\n }\r\n }\r\n\r\n private _computeHeightForLinesOf(lineCount: number): number {\r\n let newHeight = this._paddingTopInPixels + this._paddingBottomInPixels + this._fontOffset.height * lineCount;\r\n\r\n if (lineCount > 0 && this._lineSpacing.internalValue !== 0) {\r\n let lineSpacing = 0;\r\n if (this._lineSpacing.isPixel) {\r\n lineSpacing = this._lineSpacing.getValue(this._host);\r\n } else {\r\n lineSpacing = this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);\r\n }\r\n\r\n newHeight += (lineCount - 1) * lineSpacing;\r\n }\r\n\r\n return newHeight;\r\n }\r\n\r\n /**\r\n * Given a width constraint applied on the text block, find the expected height\r\n * @returns expected height\r\n */\r\n public computeExpectedHeight(): number {\r\n if (this.text && this.widthInPixels) {\r\n // Should abstract platform instead of using LastCreatedEngine\r\n const context = EngineStore.LastCreatedEngine?.createCanvas(0, 0).getContext(\"2d\");\r\n if (context) {\r\n this._applyStates(context);\r\n if (!this._fontOffset) {\r\n this._fontOffset = Control._GetFontOffset(context.font);\r\n }\r\n const lines = this._lines\r\n ? this._lines\r\n : this._breakLines(\r\n this.widthInPixels - this._paddingLeftInPixels - this._paddingRightInPixels,\r\n this.heightInPixels - this._paddingTopInPixels - this._paddingBottomInPixels,\r\n context\r\n );\r\n return this._computeHeightForLinesOf(lines.length);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n dispose(): void {\r\n super.dispose();\r\n\r\n this.onTextChangedObservable.clear();\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.TextBlock\", TextBlock);\r\n"]}
1
+ {"version":3,"file":"textBlock.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/2D/controls/textBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport type { Measure } from \"../measure\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport { Control } from \"./control\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { ICanvasRenderingContext, ITextMetrics } from \"core/Engines/ICanvas\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\n\r\n/**\r\n * Enum that determines the text-wrapping mode to use.\r\n */\r\nexport enum TextWrapping {\r\n /**\r\n * Clip the text when it's larger than Control.width; this is the default mode.\r\n */\r\n Clip = 0,\r\n\r\n /**\r\n * Wrap the text word-wise, i.e. try to add line-breaks at word boundary to fit within Control.width.\r\n */\r\n WordWrap = 1,\r\n\r\n /**\r\n * Ellipsize the text, i.e. shrink with trailing … when text is larger than Control.width.\r\n */\r\n Ellipsis = 2,\r\n\r\n /**\r\n * Wrap the text word-wise and clip the text when the text's height is larger than the Control.height, and shrink the last line with trailing … .\r\n */\r\n WordWrapEllipsis,\r\n}\r\n\r\n/**\r\n * Class used to create text block control\r\n */\r\nexport class TextBlock extends Control {\r\n private _text = \"\";\r\n private _textWrapping = TextWrapping.Clip;\r\n private _textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n private _textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n\r\n private _lines: any[];\r\n private _resizeToFit: boolean = false;\r\n private _lineSpacing: ValueAndUnit = new ValueAndUnit(0);\r\n private _outlineWidth: number = 0;\r\n private _outlineColor: string = \"white\";\r\n private _underline: boolean = false;\r\n private _lineThrough: boolean = false;\r\n private _wordDivider: string = \" \";\r\n /**\r\n * An event triggered after the text is changed\r\n */\r\n public onTextChangedObservable = new Observable<TextBlock>();\r\n\r\n /**\r\n * An event triggered after the text was broken up into lines\r\n */\r\n public onLinesReadyObservable = new Observable<TextBlock>();\r\n\r\n /**\r\n * Function used to split a string into words. By default, a string is split at each space character found\r\n */\r\n public wordSplittingFunction: Nullable<(line: string) => string[]>;\r\n\r\n /**\r\n * Return the line list (you may need to use the onLinesReadyObservable to make sure the list is ready)\r\n */\r\n public get lines(): any[] {\r\n return this._lines;\r\n }\r\n\r\n /**\r\n * Gets or sets an boolean indicating that the TextBlock will be resized to fit container\r\n */\r\n @serialize()\r\n public get resizeToFit(): boolean {\r\n return this._resizeToFit;\r\n }\r\n\r\n /**\r\n * Gets or sets an boolean indicating that the TextBlock will be resized to fit container\r\n */\r\n public set resizeToFit(value: boolean) {\r\n if (this._resizeToFit === value) {\r\n return;\r\n }\r\n this._resizeToFit = value;\r\n\r\n if (this._resizeToFit) {\r\n this._width.ignoreAdaptiveScaling = true;\r\n this._height.ignoreAdaptiveScaling = true;\r\n }\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if text must be wrapped\r\n */\r\n @serialize()\r\n public get textWrapping(): TextWrapping | boolean {\r\n return this._textWrapping;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if text must be wrapped\r\n */\r\n public set textWrapping(value: TextWrapping | boolean) {\r\n if (this._textWrapping === value) {\r\n return;\r\n }\r\n this._textWrapping = +value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets text to display\r\n */\r\n @serialize()\r\n public get text(): string {\r\n return this._text;\r\n }\r\n\r\n /**\r\n * Gets or sets text to display\r\n */\r\n public set text(value: string) {\r\n if (this._text === value) {\r\n return;\r\n }\r\n this._text = value + \"\"; // Making sure it is a text\r\n this._markAsDirty();\r\n\r\n this.onTextChangedObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets or sets text horizontal alignment (BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER by default)\r\n */\r\n @serialize()\r\n public get textHorizontalAlignment(): number {\r\n return this._textHorizontalAlignment;\r\n }\r\n\r\n /**\r\n * Gets or sets text horizontal alignment (BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER by default)\r\n */\r\n public set textHorizontalAlignment(value: number) {\r\n if (this._textHorizontalAlignment === value) {\r\n return;\r\n }\r\n\r\n this._textHorizontalAlignment = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets text vertical alignment (BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER by default)\r\n */\r\n @serialize()\r\n public get textVerticalAlignment(): number {\r\n return this._textVerticalAlignment;\r\n }\r\n\r\n /**\r\n * Gets or sets text vertical alignment (BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER by default)\r\n */\r\n public set textVerticalAlignment(value: number) {\r\n if (this._textVerticalAlignment === value) {\r\n return;\r\n }\r\n\r\n this._textVerticalAlignment = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets line spacing value\r\n */\r\n @serialize()\r\n public set lineSpacing(value: string | number) {\r\n if (this._lineSpacing.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets line spacing value\r\n */\r\n public get lineSpacing(): string | number {\r\n return this._lineSpacing.toString(this._host);\r\n }\r\n\r\n /**\r\n * Gets or sets outlineWidth of the text to display\r\n */\r\n @serialize()\r\n public get outlineWidth(): number {\r\n return this._outlineWidth;\r\n }\r\n\r\n /**\r\n * Gets or sets outlineWidth of the text to display\r\n */\r\n public set outlineWidth(value: number) {\r\n if (this._outlineWidth === value) {\r\n return;\r\n }\r\n this._outlineWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that text must have underline\r\n */\r\n @serialize()\r\n public get underline(): boolean {\r\n return this._underline;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that text must have underline\r\n */\r\n public set underline(value: boolean) {\r\n if (this._underline === value) {\r\n return;\r\n }\r\n this._underline = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets an boolean indicating that text must be crossed out\r\n */\r\n @serialize()\r\n public get lineThrough(): boolean {\r\n return this._lineThrough;\r\n }\r\n\r\n /**\r\n * Gets or sets an boolean indicating that text must be crossed out\r\n */\r\n public set lineThrough(value: boolean) {\r\n if (this._lineThrough === value) {\r\n return;\r\n }\r\n this._lineThrough = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets outlineColor of the text to display\r\n */\r\n @serialize()\r\n public get outlineColor(): string {\r\n return this._outlineColor;\r\n }\r\n\r\n /**\r\n * Gets or sets outlineColor of the text to display\r\n */\r\n public set outlineColor(value: string) {\r\n if (this._outlineColor === value) {\r\n return;\r\n }\r\n this._outlineColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets or sets word divider\r\n */\r\n @serialize()\r\n public get wordDivider(): string {\r\n return this._wordDivider;\r\n }\r\n\r\n /**\r\n * Gets or sets word divider\r\n */\r\n public set wordDivider(value: string) {\r\n if (this._wordDivider === value) {\r\n return;\r\n }\r\n this._wordDivider = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Creates a new TextBlock object\r\n * @param name defines the name of the control\r\n * @param text defines the text to display (empty string by default)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the control\r\n */\r\n public name?: string,\r\n text: string = \"\"\r\n ) {\r\n super(name);\r\n\r\n this.text = text;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"TextBlock\";\r\n }\r\n\r\n protected _processMeasures(parentMeasure: Measure, context: ICanvasRenderingContext): void {\r\n if (!this._fontOffset || this.isDirty) {\r\n this._fontOffset = Control._GetFontOffset(context.font);\r\n }\r\n super._processMeasures(parentMeasure, context);\r\n\r\n // Prepare lines\r\n this._lines = this._breakLines(this._currentMeasure.width, this._currentMeasure.height, context);\r\n this.onLinesReadyObservable.notifyObservers(this);\r\n\r\n let maxLineWidth: number = 0;\r\n\r\n for (let i = 0; i < this._lines.length; i++) {\r\n const line = this._lines[i];\r\n\r\n if (line.width > maxLineWidth) {\r\n maxLineWidth = line.width;\r\n }\r\n }\r\n\r\n if (this._resizeToFit) {\r\n if (this._textWrapping === TextWrapping.Clip) {\r\n const newWidth = (this._paddingLeftInPixels + this._paddingRightInPixels + maxLineWidth) | 0;\r\n if (newWidth !== this._width.internalValue) {\r\n this._width.updateInPlace(newWidth, ValueAndUnit.UNITMODE_PIXEL);\r\n this._rebuildLayout = true;\r\n }\r\n }\r\n let newHeight = (this._paddingTopInPixels + this._paddingBottomInPixels + this._fontOffset.height * this._lines.length) | 0;\r\n\r\n if (this._lines.length > 0 && this._lineSpacing.internalValue !== 0) {\r\n let lineSpacing = 0;\r\n if (this._lineSpacing.isPixel) {\r\n lineSpacing = this._lineSpacing.getValue(this._host);\r\n } else {\r\n lineSpacing = this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);\r\n }\r\n\r\n newHeight += (this._lines.length - 1) * lineSpacing;\r\n }\r\n\r\n if (newHeight !== this._height.internalValue) {\r\n this._height.updateInPlace(newHeight, ValueAndUnit.UNITMODE_PIXEL);\r\n this._rebuildLayout = true;\r\n }\r\n }\r\n }\r\n\r\n private _drawText(text: string, textWidth: number, y: number, context: ICanvasRenderingContext): void {\r\n const width = this._currentMeasure.width;\r\n let x = 0;\r\n switch (this._textHorizontalAlignment) {\r\n case Control.HORIZONTAL_ALIGNMENT_LEFT:\r\n x = 0;\r\n break;\r\n case Control.HORIZONTAL_ALIGNMENT_RIGHT:\r\n x = width - textWidth;\r\n break;\r\n case Control.HORIZONTAL_ALIGNMENT_CENTER:\r\n x = (width - textWidth) / 2;\r\n break;\r\n }\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX;\r\n context.shadowOffsetY = this.shadowOffsetY;\r\n }\r\n\r\n if (this.outlineWidth) {\r\n context.strokeText(text, this._currentMeasure.left + x, y);\r\n }\r\n context.fillText(text, this._currentMeasure.left + x, y);\r\n\r\n if (this._underline) {\r\n context.beginPath();\r\n context.lineWidth = Math.round(this.fontSizeInPixels * 0.05);\r\n context.moveTo(this._currentMeasure.left + x, y + 3);\r\n context.lineTo(this._currentMeasure.left + x + textWidth, y + 3);\r\n context.stroke();\r\n context.closePath();\r\n }\r\n\r\n if (this._lineThrough) {\r\n context.beginPath();\r\n context.lineWidth = Math.round(this.fontSizeInPixels * 0.05);\r\n context.moveTo(this._currentMeasure.left + x, y - this.fontSizeInPixels / 3);\r\n context.lineTo(this._currentMeasure.left + x + textWidth, y - this.fontSizeInPixels / 3);\r\n context.stroke();\r\n context.closePath();\r\n }\r\n }\r\n\r\n /**\r\n * @param context\r\n * @hidden\r\n */\r\n public _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\r\n\r\n // Render lines\r\n this._renderLines(context);\r\n\r\n context.restore();\r\n }\r\n\r\n protected _applyStates(context: ICanvasRenderingContext): void {\r\n super._applyStates(context);\r\n if (this.outlineWidth) {\r\n context.lineWidth = this.outlineWidth;\r\n context.strokeStyle = this.outlineColor;\r\n context.lineJoin = \"miter\";\r\n context.miterLimit = 2;\r\n }\r\n }\r\n\r\n protected _breakLines(refWidth: number, refHeight: number, context: ICanvasRenderingContext): object[] {\r\n const lines = [];\r\n const _lines = this.text.split(\"\\n\");\r\n\r\n if (this._textWrapping === TextWrapping.Ellipsis) {\r\n for (const _line of _lines) {\r\n lines.push(this._parseLineEllipsis(_line, refWidth, context));\r\n }\r\n } else if (this._textWrapping === TextWrapping.WordWrap) {\r\n for (const _line of _lines) {\r\n lines.push(...this._parseLineWordWrap(_line, refWidth, context));\r\n }\r\n } else if (this._textWrapping === TextWrapping.WordWrapEllipsis) {\r\n for (const _line of _lines) {\r\n lines.push(...this._parseLineWordWrapEllipsis(_line, refWidth, refHeight!, context));\r\n }\r\n } else {\r\n for (const _line of _lines) {\r\n lines.push(this._parseLine(_line, context));\r\n }\r\n }\r\n\r\n return lines;\r\n }\r\n\r\n protected _parseLine(line: string = \"\", context: ICanvasRenderingContext): object {\r\n return { text: line, width: this._getTextMetricsWidth(context.measureText(line)) };\r\n }\r\n\r\n //Calculate how many characters approximately we need to remove\r\n private _getCharsToRemove(lineWidth: number, width: number, lineLength: number) {\r\n const diff = lineWidth > width ? lineWidth - width : 0;\r\n // This isn't exact unless the font is monospaced\r\n const charWidth = lineWidth / lineLength;\r\n const removeChars = Math.max(Math.floor(diff / charWidth), 1);\r\n return removeChars;\r\n }\r\n\r\n protected _parseLineEllipsis(line: string = \"\", width: number, context: ICanvasRenderingContext): object {\r\n let lineWidth = this._getTextMetricsWidth(context.measureText(line));\r\n\r\n let removeChars = this._getCharsToRemove(lineWidth, width, line.length);\r\n\r\n // unicode support. split('') does not work with unicode!\r\n // make sure Array.from is available\r\n const characters = Array.from && Array.from(line);\r\n if (!characters) {\r\n // no array.from, use the old method\r\n while (line.length > 2 && lineWidth > width) {\r\n line = line.slice(0, -removeChars);\r\n lineWidth = this._getTextMetricsWidth(context.measureText(line + \"…\"));\r\n\r\n removeChars = this._getCharsToRemove(lineWidth, width, line.length);\r\n }\r\n // Add on the end\r\n line += \"…\";\r\n } else {\r\n while (characters.length && lineWidth > width) {\r\n characters.splice(characters.length - removeChars, removeChars);\r\n line = `${characters.join(\"\")}…`;\r\n lineWidth = this._getTextMetricsWidth(context.measureText(line));\r\n\r\n removeChars = this._getCharsToRemove(lineWidth, width, line.length);\r\n }\r\n }\r\n\r\n return { text: line, width: lineWidth };\r\n }\r\n\r\n private _getTextMetricsWidth(textMetrics: ITextMetrics) {\r\n if (textMetrics.actualBoundingBoxLeft !== undefined) {\r\n return Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);\r\n }\r\n return textMetrics.width;\r\n }\r\n\r\n protected _parseLineWordWrap(line: string = \"\", width: number, context: ICanvasRenderingContext): object[] {\r\n const lines = [];\r\n const words = this.wordSplittingFunction ? this.wordSplittingFunction(line) : line.split(this._wordDivider);\r\n let lineWidth = this._getTextMetricsWidth(context.measureText(line));\r\n\r\n for (let n = 0; n < words.length; n++) {\r\n const testLine = n > 0 ? line + this._wordDivider + words[n] : words[0];\r\n const testWidth = this._getTextMetricsWidth(context.measureText(testLine));\r\n if (testWidth > width && n > 0) {\r\n lines.push({ text: line, width: lineWidth });\r\n line = words[n];\r\n lineWidth = this._getTextMetricsWidth(context.measureText(line));\r\n } else {\r\n lineWidth = testWidth;\r\n line = testLine;\r\n }\r\n }\r\n lines.push({ text: line, width: lineWidth });\r\n\r\n return lines;\r\n }\r\n\r\n protected _parseLineWordWrapEllipsis(line: string = \"\", width: number, height: number, context: ICanvasRenderingContext): object[] {\r\n const lines = this._parseLineWordWrap(line, width, context);\r\n for (let n = 1; n <= lines.length; n++) {\r\n const currentHeight = this._computeHeightForLinesOf(n);\r\n if (currentHeight > height && n > 1) {\r\n const lastLine = lines[n - 2] as { text: string; width: number };\r\n const currentLine = lines[n - 1] as { text: string; width: number };\r\n lines[n - 2] = this._parseLineEllipsis(`${lastLine.text + currentLine.text}`, width, context);\r\n const linesToRemove = lines.length - n + 1;\r\n for (let i = 0; i < linesToRemove; i++) {\r\n lines.pop();\r\n }\r\n return lines;\r\n }\r\n }\r\n\r\n return lines;\r\n }\r\n\r\n protected _renderLines(context: ICanvasRenderingContext): void {\r\n if (!this._fontOffset || !this._lines) {\r\n return;\r\n }\r\n const height = this._currentMeasure.height;\r\n let rootY = 0;\r\n switch (this._textVerticalAlignment) {\r\n case Control.VERTICAL_ALIGNMENT_TOP:\r\n rootY = this._fontOffset.ascent;\r\n break;\r\n case Control.VERTICAL_ALIGNMENT_BOTTOM:\r\n rootY = height - this._fontOffset.height * (this._lines.length - 1) - this._fontOffset.descent;\r\n break;\r\n case Control.VERTICAL_ALIGNMENT_CENTER:\r\n rootY = this._fontOffset.ascent + (height - this._fontOffset.height * this._lines.length) / 2;\r\n break;\r\n }\r\n\r\n rootY += this._currentMeasure.top;\r\n\r\n for (let i = 0; i < this._lines.length; i++) {\r\n const line = this._lines[i];\r\n\r\n if (i !== 0 && this._lineSpacing.internalValue !== 0) {\r\n if (this._lineSpacing.isPixel) {\r\n rootY += this._lineSpacing.getValue(this._host);\r\n } else {\r\n rootY = rootY + this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);\r\n }\r\n }\r\n\r\n this._drawText(line.text, line.width, rootY, context);\r\n rootY += this._fontOffset.height;\r\n }\r\n }\r\n\r\n private _computeHeightForLinesOf(lineCount: number): number {\r\n let newHeight = this._paddingTopInPixels + this._paddingBottomInPixels + this._fontOffset.height * lineCount;\r\n\r\n if (lineCount > 0 && this._lineSpacing.internalValue !== 0) {\r\n let lineSpacing = 0;\r\n if (this._lineSpacing.isPixel) {\r\n lineSpacing = this._lineSpacing.getValue(this._host);\r\n } else {\r\n lineSpacing = this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);\r\n }\r\n\r\n newHeight += (lineCount - 1) * lineSpacing;\r\n }\r\n\r\n return newHeight;\r\n }\r\n\r\n /**\r\n * Given a width constraint applied on the text block, find the expected height\r\n * @returns expected height\r\n */\r\n public computeExpectedHeight(): number {\r\n if (this.text && this.widthInPixels) {\r\n // Should abstract platform instead of using LastCreatedEngine\r\n const context = EngineStore.LastCreatedEngine?.createCanvas(0, 0).getContext(\"2d\");\r\n if (context) {\r\n this._applyStates(context);\r\n if (!this._fontOffset) {\r\n this._fontOffset = Control._GetFontOffset(context.font);\r\n }\r\n const lines = this._lines\r\n ? this._lines\r\n : this._breakLines(\r\n this.widthInPixels - this._paddingLeftInPixels - this._paddingRightInPixels,\r\n this.heightInPixels - this._paddingTopInPixels - this._paddingBottomInPixels,\r\n context\r\n );\r\n return this._computeHeightForLinesOf(lines.length);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n dispose(): void {\r\n super.dispose();\r\n\r\n this.onTextChangedObservable.clear();\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.TextBlock\", TextBlock);\r\n"]}
@@ -1,38 +1,26 @@
1
- import { __spreadArray } from "tslib";
2
1
  /** @hidden */
3
- var TextWrapper = /** @class */ (function () {
4
- function TextWrapper() {
2
+ export class TextWrapper {
3
+ get text() {
4
+ return this._characters ? this._characters.join("") : this._text;
5
5
  }
6
- Object.defineProperty(TextWrapper.prototype, "text", {
7
- get: function () {
8
- return this._characters ? this._characters.join("") : this._text;
9
- },
10
- set: function (txt) {
11
- this._text = txt;
12
- this._characters = Array.from && Array.from(txt);
13
- },
14
- enumerable: false,
15
- configurable: true
16
- });
17
- Object.defineProperty(TextWrapper.prototype, "length", {
18
- get: function () {
19
- return this._characters ? this._characters.length : this._text.length;
20
- },
21
- enumerable: false,
22
- configurable: true
23
- });
24
- TextWrapper.prototype.removePart = function (idxStart, idxEnd, insertTxt) {
25
- var _a;
6
+ set text(txt) {
7
+ this._text = txt;
8
+ this._characters = Array.from && Array.from(txt);
9
+ }
10
+ get length() {
11
+ return this._characters ? this._characters.length : this._text.length;
12
+ }
13
+ removePart(idxStart, idxEnd, insertTxt) {
26
14
  this._text = this._text.slice(0, idxStart) + (insertTxt ? insertTxt : "") + this._text.slice(idxEnd);
27
15
  if (this._characters) {
28
- var newCharacters = insertTxt ? Array.from(insertTxt) : [];
29
- (_a = this._characters).splice.apply(_a, __spreadArray([idxStart, idxEnd - idxStart], newCharacters, false));
16
+ const newCharacters = insertTxt ? Array.from(insertTxt) : [];
17
+ this._characters.splice(idxStart, idxEnd - idxStart, ...newCharacters);
30
18
  }
31
- };
32
- TextWrapper.prototype.charAt = function (idx) {
19
+ }
20
+ charAt(idx) {
33
21
  return this._characters ? this._characters[idx] : this._text.charAt(idx);
34
- };
35
- TextWrapper.prototype.substr = function (from, length) {
22
+ }
23
+ substr(from, length) {
36
24
  if (this._characters) {
37
25
  if (isNaN(from)) {
38
26
  from = 0;
@@ -52,15 +40,15 @@ var TextWrapper = /** @class */ (function () {
52
40
  else if (length < 0) {
53
41
  length = 0;
54
42
  }
55
- var temp = [];
43
+ const temp = [];
56
44
  while (--length >= 0) {
57
45
  temp[length] = this._characters[from + length];
58
46
  }
59
47
  return temp.join("");
60
48
  }
61
49
  return this._text.substr(from, length);
62
- };
63
- TextWrapper.prototype.substring = function (from, to) {
50
+ }
51
+ substring(from, to) {
64
52
  if (this._characters) {
65
53
  if (isNaN(from)) {
66
54
  from = 0;
@@ -83,20 +71,18 @@ var TextWrapper = /** @class */ (function () {
83
71
  else if (to < 0) {
84
72
  to = 0;
85
73
  }
86
- var temp = [];
87
- var idx = 0;
74
+ const temp = [];
75
+ let idx = 0;
88
76
  while (from < to) {
89
77
  temp[idx++] = this._characters[from++];
90
78
  }
91
79
  return temp.join("");
92
80
  }
93
81
  return this._text.substring(from, to);
94
- };
95
- TextWrapper.prototype.isWord = function (index) {
96
- var rWord = /\w/g;
82
+ }
83
+ isWord(index) {
84
+ const rWord = /\w/g;
97
85
  return this._characters ? this._characters[index].search(rWord) !== -1 : this._text.search(rWord) !== -1;
98
- };
99
- return TextWrapper;
100
- }());
101
- export { TextWrapper };
86
+ }
87
+ }
102
88
  //# sourceMappingURL=textWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textWrapper.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/2D/controls/textWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["/** @hidden */\r\nexport class TextWrapper {\r\n private _text: string;\r\n private _characters: string[] | undefined;\r\n\r\n public get text(): string {\r\n return this._characters ? this._characters.join(\"\") : this._text;\r\n }\r\n\r\n public set text(txt: string) {\r\n this._text = txt;\r\n this._characters = Array.from && Array.from(txt);\r\n }\r\n\r\n public get length(): number {\r\n return this._characters ? this._characters.length : this._text.length;\r\n }\r\n\r\n public removePart(idxStart: number, idxEnd: number, insertTxt?: string): void {\r\n this._text = this._text.slice(0, idxStart) + (insertTxt ? insertTxt : \"\") + this._text.slice(idxEnd);\r\n if (this._characters) {\r\n const newCharacters = insertTxt ? Array.from(insertTxt) : [];\r\n this._characters.splice(idxStart, idxEnd - idxStart, ...newCharacters);\r\n }\r\n }\r\n\r\n public charAt(idx: number): string {\r\n return this._characters ? this._characters[idx] : this._text.charAt(idx);\r\n }\r\n\r\n public substr(from: number, length?: number): string {\r\n if (this._characters) {\r\n if (isNaN(from)) {\r\n from = 0;\r\n } else if (from >= 0) {\r\n from = Math.min(from, this._characters.length);\r\n } else {\r\n from = this._characters.length + Math.max(from, -this._characters.length);\r\n }\r\n if (length === undefined) {\r\n length = this._characters.length - from;\r\n } else if (isNaN(length)) {\r\n length = 0;\r\n } else if (length < 0) {\r\n length = 0;\r\n }\r\n const temp = [];\r\n while (--length >= 0) {\r\n temp[length] = this._characters[from + length];\r\n }\r\n return temp.join(\"\");\r\n }\r\n\r\n return this._text.substr(from, length);\r\n }\r\n\r\n public substring(from: number, to?: number): string {\r\n if (this._characters) {\r\n if (isNaN(from)) {\r\n from = 0;\r\n } else if (from > this._characters.length) {\r\n from = this._characters.length;\r\n } else if (from < 0) {\r\n from = 0;\r\n }\r\n if (to === undefined) {\r\n to = this._characters.length;\r\n } else if (isNaN(to)) {\r\n to = 0;\r\n } else if (to > this._characters.length) {\r\n to = this._characters.length;\r\n } else if (to < 0) {\r\n to = 0;\r\n }\r\n const temp = [];\r\n let idx = 0;\r\n while (from < to) {\r\n temp[idx++] = this._characters[from++];\r\n }\r\n return temp.join(\"\");\r\n }\r\n\r\n return this._text.substring(from, to);\r\n }\r\n\r\n public isWord(index: number): boolean {\r\n const rWord = /\\w/g;\r\n return this._characters ? this._characters[index].search(rWord) !== -1 : this._text.search(rWord) !== -1;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"textWrapper.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/2D/controls/textWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["/** @hidden */\r\nexport class TextWrapper {\r\n private _text: string;\r\n private _characters: string[] | undefined;\r\n\r\n public get text(): string {\r\n return this._characters ? this._characters.join(\"\") : this._text;\r\n }\r\n\r\n public set text(txt: string) {\r\n this._text = txt;\r\n this._characters = Array.from && Array.from(txt);\r\n }\r\n\r\n public get length(): number {\r\n return this._characters ? this._characters.length : this._text.length;\r\n }\r\n\r\n public removePart(idxStart: number, idxEnd: number, insertTxt?: string): void {\r\n this._text = this._text.slice(0, idxStart) + (insertTxt ? insertTxt : \"\") + this._text.slice(idxEnd);\r\n if (this._characters) {\r\n const newCharacters = insertTxt ? Array.from(insertTxt) : [];\r\n this._characters.splice(idxStart, idxEnd - idxStart, ...newCharacters);\r\n }\r\n }\r\n\r\n public charAt(idx: number): string {\r\n return this._characters ? this._characters[idx] : this._text.charAt(idx);\r\n }\r\n\r\n public substr(from: number, length?: number): string {\r\n if (this._characters) {\r\n if (isNaN(from)) {\r\n from = 0;\r\n } else if (from >= 0) {\r\n from = Math.min(from, this._characters.length);\r\n } else {\r\n from = this._characters.length + Math.max(from, -this._characters.length);\r\n }\r\n if (length === undefined) {\r\n length = this._characters.length - from;\r\n } else if (isNaN(length)) {\r\n length = 0;\r\n } else if (length < 0) {\r\n length = 0;\r\n }\r\n const temp = [];\r\n while (--length >= 0) {\r\n temp[length] = this._characters[from + length];\r\n }\r\n return temp.join(\"\");\r\n }\r\n\r\n return this._text.substr(from, length);\r\n }\r\n\r\n public substring(from: number, to?: number): string {\r\n if (this._characters) {\r\n if (isNaN(from)) {\r\n from = 0;\r\n } else if (from > this._characters.length) {\r\n from = this._characters.length;\r\n } else if (from < 0) {\r\n from = 0;\r\n }\r\n if (to === undefined) {\r\n to = this._characters.length;\r\n } else if (isNaN(to)) {\r\n to = 0;\r\n } else if (to > this._characters.length) {\r\n to = this._characters.length;\r\n } else if (to < 0) {\r\n to = 0;\r\n }\r\n const temp = [];\r\n let idx = 0;\r\n while (from < to) {\r\n temp[idx++] = this._characters[from++];\r\n }\r\n return temp.join(\"\");\r\n }\r\n\r\n return this._text.substring(from, to);\r\n }\r\n\r\n public isWord(index: number): boolean {\r\n const rWord = /\\w/g;\r\n return this._characters ? this._characters[index].search(rWord) !== -1 : this._text.search(rWord) !== -1;\r\n }\r\n}\r\n"]}