@babylonjs/gui 5.0.0-beta.9 → 5.0.0-rc.10

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 (305) hide show
  1. package/2D/adtInstrumentation.d.ts +52 -52
  2. package/2D/adtInstrumentation.js +126 -126
  3. package/2D/adtInstrumentation.js.map +1 -1
  4. package/2D/advancedDynamicTexture.d.ts +449 -412
  5. package/2D/advancedDynamicTexture.js +1318 -1239
  6. package/2D/advancedDynamicTexture.js.map +1 -1
  7. package/2D/controls/button.d.ts +135 -97
  8. package/2D/controls/button.js +276 -238
  9. package/2D/controls/button.js.map +1 -1
  10. package/2D/controls/checkbox.d.ts +59 -51
  11. package/2D/controls/checkbox.js +188 -178
  12. package/2D/controls/checkbox.js.map +1 -1
  13. package/2D/controls/colorpicker.d.ts +103 -90
  14. package/2D/controls/colorpicker.js +1417 -1400
  15. package/2D/controls/colorpicker.js.map +1 -1
  16. package/2D/controls/container.d.ts +175 -130
  17. package/2D/controls/container.js +570 -525
  18. package/2D/controls/container.js.map +1 -1
  19. package/2D/controls/control.d.ts +866 -743
  20. package/2D/controls/control.js +2433 -2308
  21. package/2D/controls/control.js.map +1 -1
  22. package/2D/controls/displayGrid.d.ts +53 -55
  23. package/2D/controls/displayGrid.js +245 -245
  24. package/2D/controls/displayGrid.js.map +1 -1
  25. package/2D/controls/ellipse.d.ts +21 -21
  26. package/2D/controls/ellipse.js +85 -85
  27. package/2D/controls/ellipse.js.map +1 -1
  28. package/2D/controls/focusableButton.d.ts +59 -52
  29. package/2D/controls/focusableButton.js +99 -92
  30. package/2D/controls/focusableButton.js.map +1 -1
  31. package/2D/controls/focusableControl.d.ts +34 -34
  32. package/2D/controls/focusableControl.js +1 -1
  33. package/2D/controls/focusableControl.js.map +1 -1
  34. package/2D/controls/grid.d.ts +139 -135
  35. package/2D/controls/grid.js +529 -525
  36. package/2D/controls/grid.js.map +1 -1
  37. package/2D/controls/image.d.ts +204 -197
  38. package/2D/controls/image.js +887 -879
  39. package/2D/controls/image.js.map +1 -1
  40. package/2D/controls/index.d.ts +29 -29
  41. package/2D/controls/index.js +29 -29
  42. package/2D/controls/index.js.map +1 -1
  43. package/2D/controls/inputPassword.d.ts +9 -8
  44. package/2D/controls/inputPassword.js +28 -25
  45. package/2D/controls/inputPassword.js.map +1 -1
  46. package/2D/controls/inputText.d.ts +201 -180
  47. package/2D/controls/inputText.js +1119 -1095
  48. package/2D/controls/inputText.js.map +1 -1
  49. package/2D/controls/line.d.ts +66 -66
  50. package/2D/controls/line.js +271 -271
  51. package/2D/controls/line.js.map +1 -1
  52. package/2D/controls/multiLine.d.ts +75 -77
  53. package/2D/controls/multiLine.js +262 -262
  54. package/2D/controls/multiLine.js.map +1 -1
  55. package/2D/controls/radioButton.d.ts +49 -49
  56. package/2D/controls/radioButton.js +205 -205
  57. package/2D/controls/radioButton.js.map +1 -1
  58. package/2D/controls/rectangle.d.ts +29 -29
  59. package/2D/controls/rectangle.js +150 -150
  60. package/2D/controls/rectangle.js.map +1 -1
  61. package/2D/controls/scrollViewers/scrollViewer.d.ts +182 -175
  62. package/2D/controls/scrollViewers/scrollViewer.js +677 -676
  63. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  64. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +57 -45
  65. package/2D/controls/scrollViewers/scrollViewerWindow.js +278 -263
  66. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  67. package/2D/controls/selector.d.ts +263 -209
  68. package/2D/controls/selector.js +692 -629
  69. package/2D/controls/selector.js.map +1 -1
  70. package/2D/controls/sliders/baseSlider.d.ts +82 -78
  71. package/2D/controls/sliders/baseSlider.js +347 -343
  72. package/2D/controls/sliders/baseSlider.js.map +1 -1
  73. package/2D/controls/sliders/imageBasedSlider.d.ts +49 -47
  74. package/2D/controls/sliders/imageBasedSlider.js +192 -188
  75. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  76. package/2D/controls/sliders/imageScrollBar.d.ts +65 -61
  77. package/2D/controls/sliders/imageScrollBar.js +263 -256
  78. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  79. package/2D/controls/sliders/scrollBar.d.ts +38 -34
  80. package/2D/controls/sliders/scrollBar.js +143 -136
  81. package/2D/controls/sliders/scrollBar.js.map +1 -1
  82. package/2D/controls/sliders/slider.d.ts +35 -37
  83. package/2D/controls/sliders/slider.js +271 -271
  84. package/2D/controls/sliders/slider.js.map +1 -1
  85. package/2D/controls/stackPanel.d.ts +64 -56
  86. package/2D/controls/stackPanel.js +246 -236
  87. package/2D/controls/stackPanel.js.map +1 -1
  88. package/2D/controls/statics.d.ts +6 -6
  89. package/2D/controls/statics.js +49 -47
  90. package/2D/controls/statics.js.map +1 -1
  91. package/2D/controls/textBlock.d.ts +175 -171
  92. package/2D/controls/textBlock.js +603 -588
  93. package/2D/controls/textBlock.js.map +1 -1
  94. package/2D/controls/textWrapper.d.ts +13 -13
  95. package/2D/controls/textWrapper.js +101 -101
  96. package/2D/controls/textWrapper.js.map +1 -1
  97. package/2D/controls/toggleButton.d.ts +117 -83
  98. package/2D/controls/toggleButton.js +268 -234
  99. package/2D/controls/toggleButton.js.map +1 -1
  100. package/2D/controls/virtualKeyboard.d.ts +96 -96
  101. package/2D/controls/virtualKeyboard.js +256 -256
  102. package/2D/controls/virtualKeyboard.js.map +1 -1
  103. package/2D/index.d.ts +9 -9
  104. package/2D/index.js +10 -9
  105. package/2D/index.js.map +1 -1
  106. package/2D/math2D.d.ts +117 -117
  107. package/2D/math2D.js +221 -221
  108. package/2D/math2D.js.map +1 -1
  109. package/2D/measure.d.ts +77 -77
  110. package/2D/measure.js +139 -149
  111. package/2D/measure.js.map +1 -1
  112. package/2D/multiLinePoint.d.ts +47 -47
  113. package/2D/multiLinePoint.js +127 -127
  114. package/2D/multiLinePoint.js.map +1 -1
  115. package/2D/style.d.ts +46 -46
  116. package/2D/style.js +97 -97
  117. package/2D/style.js.map +1 -1
  118. package/2D/valueAndUnit.d.ts +89 -89
  119. package/2D/valueAndUnit.js +226 -222
  120. package/2D/valueAndUnit.js.map +1 -1
  121. package/2D/xmlLoader.d.ts +60 -60
  122. package/2D/xmlLoader.js +348 -341
  123. package/2D/xmlLoader.js.map +1 -1
  124. package/3D/behaviors/defaultBehavior.d.ts +73 -73
  125. package/3D/behaviors/defaultBehavior.js +121 -121
  126. package/3D/behaviors/defaultBehavior.js.map +1 -1
  127. package/3D/controls/abstractButton3D.d.ts +15 -15
  128. package/3D/controls/abstractButton3D.js +25 -25
  129. package/3D/controls/abstractButton3D.js.map +1 -1
  130. package/3D/controls/button3D.d.ts +30 -30
  131. package/3D/controls/button3D.js +93 -93
  132. package/3D/controls/button3D.js.map +1 -1
  133. package/3D/controls/container3D.d.ts +72 -72
  134. package/3D/controls/container3D.js +139 -140
  135. package/3D/controls/container3D.js.map +1 -1
  136. package/3D/controls/contentDisplay3D.d.ts +30 -30
  137. package/3D/controls/contentDisplay3D.js +79 -78
  138. package/3D/controls/contentDisplay3D.js.map +1 -1
  139. package/3D/controls/control3D.d.ts +201 -165
  140. package/3D/controls/control3D.js +445 -408
  141. package/3D/controls/control3D.js.map +1 -1
  142. package/3D/controls/cylinderPanel.d.ts +17 -17
  143. package/3D/controls/cylinderPanel.js +66 -66
  144. package/3D/controls/cylinderPanel.js.map +1 -1
  145. package/3D/controls/handMenu.d.ts +28 -28
  146. package/3D/controls/handMenu.js +47 -47
  147. package/3D/controls/handMenu.js.map +1 -1
  148. package/3D/controls/holographicBackplate.d.ts +49 -48
  149. package/3D/controls/holographicBackplate.js +120 -120
  150. package/3D/controls/holographicBackplate.js.map +1 -1
  151. package/3D/controls/holographicButton.d.ts +84 -83
  152. package/3D/controls/holographicButton.js +339 -338
  153. package/3D/controls/holographicButton.js.map +1 -1
  154. package/3D/controls/holographicSlate.d.ts +131 -118
  155. package/3D/controls/holographicSlate.js +431 -369
  156. package/3D/controls/holographicSlate.js.map +1 -1
  157. package/3D/controls/index.d.ts +21 -21
  158. package/3D/controls/index.js +21 -21
  159. package/3D/controls/index.js.map +1 -1
  160. package/3D/controls/meshButton3D.d.ts +21 -21
  161. package/3D/controls/meshButton3D.js +62 -61
  162. package/3D/controls/meshButton3D.js.map +1 -1
  163. package/3D/controls/nearMenu.d.ts +44 -44
  164. package/3D/controls/nearMenu.js +114 -112
  165. package/3D/controls/nearMenu.js.map +1 -1
  166. package/3D/controls/planePanel.d.ts +9 -9
  167. package/3D/controls/planePanel.js +36 -36
  168. package/3D/controls/planePanel.js.map +1 -1
  169. package/3D/controls/scatterPanel.d.ts +18 -18
  170. package/3D/controls/scatterPanel.js +108 -108
  171. package/3D/controls/scatterPanel.js.map +1 -1
  172. package/3D/controls/slider3D.d.ts +81 -80
  173. package/3D/controls/slider3D.js +268 -267
  174. package/3D/controls/slider3D.js.map +1 -1
  175. package/3D/controls/spherePanel.d.ts +17 -17
  176. package/3D/controls/spherePanel.js +67 -67
  177. package/3D/controls/spherePanel.js.map +1 -1
  178. package/3D/controls/stackPanel3D.d.ts +22 -22
  179. package/3D/controls/stackPanel3D.js +107 -107
  180. package/3D/controls/stackPanel3D.js.map +1 -1
  181. package/3D/controls/touchButton3D.d.ts +80 -64
  182. package/3D/controls/touchButton3D.js +233 -188
  183. package/3D/controls/touchButton3D.js.map +1 -1
  184. package/3D/controls/touchHolographicButton.d.ts +110 -104
  185. package/3D/controls/touchHolographicButton.js +445 -432
  186. package/3D/controls/touchHolographicButton.js.map +1 -1
  187. package/3D/controls/touchHolographicMenu.d.ts +61 -61
  188. package/3D/controls/touchHolographicMenu.js +149 -148
  189. package/3D/controls/touchHolographicMenu.js.map +1 -1
  190. package/3D/controls/touchMeshButton3D.d.ts +21 -22
  191. package/3D/controls/touchMeshButton3D.js +62 -62
  192. package/3D/controls/touchMeshButton3D.js.map +1 -1
  193. package/3D/controls/volumeBasedPanel.d.ts +53 -52
  194. package/3D/controls/volumeBasedPanel.js +174 -174
  195. package/3D/controls/volumeBasedPanel.js.map +1 -1
  196. package/3D/gizmos/gizmoHandle.d.ts +108 -108
  197. package/3D/gizmos/gizmoHandle.js +209 -209
  198. package/3D/gizmos/gizmoHandle.js.map +1 -1
  199. package/3D/gizmos/index.d.ts +2 -2
  200. package/3D/gizmos/index.js +2 -2
  201. package/3D/gizmos/index.js.map +1 -1
  202. package/3D/gizmos/slateGizmo.d.ts +57 -59
  203. package/3D/gizmos/slateGizmo.js +369 -363
  204. package/3D/gizmos/slateGizmo.js.map +1 -1
  205. package/3D/gui3DManager.d.ts +94 -94
  206. package/3D/gui3DManager.js +257 -257
  207. package/3D/gui3DManager.js.map +1 -1
  208. package/3D/index.d.ts +5 -5
  209. package/3D/index.js +6 -5
  210. package/3D/index.js.map +1 -1
  211. package/3D/materials/fluent/fluentMaterial.d.ts +91 -90
  212. package/3D/materials/fluent/fluentMaterial.js +292 -281
  213. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  214. package/3D/materials/fluent/index.d.ts +1 -1
  215. package/3D/materials/fluent/index.js +1 -1
  216. package/3D/materials/fluent/index.js.map +1 -1
  217. package/3D/materials/fluent/shaders/fluent.fragment.d.ts +5 -5
  218. package/3D/materials/fluent/shaders/fluent.fragment.js +8 -6
  219. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -1
  220. package/3D/materials/fluent/shaders/fluent.vertex.d.ts +5 -5
  221. package/3D/materials/fluent/shaders/fluent.vertex.js +8 -6
  222. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -1
  223. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +155 -154
  224. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +469 -434
  225. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  226. package/3D/materials/fluentBackplate/index.d.ts +1 -1
  227. package/3D/materials/fluentBackplate/index.js +1 -1
  228. package/3D/materials/fluentBackplate/index.js.map +1 -1
  229. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -5
  230. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +8 -6
  231. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -1
  232. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -5
  233. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +8 -6
  234. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -1
  235. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +190 -189
  236. package/3D/materials/fluentButton/fluentButtonMaterial.js +539 -537
  237. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  238. package/3D/materials/fluentButton/index.d.ts +1 -1
  239. package/3D/materials/fluentButton/index.js +1 -1
  240. package/3D/materials/fluentButton/index.js.map +1 -1
  241. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -5
  242. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +8 -6
  243. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -1
  244. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -5
  245. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +8 -6
  246. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -1
  247. package/3D/materials/fluentMaterial.d.ts +4 -4
  248. package/3D/materials/fluentMaterial.js +4 -4
  249. package/3D/materials/fluentMaterial.js.map +1 -1
  250. package/3D/materials/handle/handleMaterial.d.ts +68 -68
  251. package/3D/materials/handle/handleMaterial.js +126 -126
  252. package/3D/materials/handle/handleMaterial.js.map +1 -1
  253. package/3D/materials/handle/index.d.ts +1 -1
  254. package/3D/materials/handle/index.js +1 -1
  255. package/3D/materials/handle/index.js.map +1 -1
  256. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -5
  257. package/3D/materials/handle/shaders/handle.fragment.js +8 -6
  258. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -1
  259. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -5
  260. package/3D/materials/handle/shaders/handle.vertex.js +8 -6
  261. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -1
  262. package/3D/materials/index.d.ts +5 -5
  263. package/3D/materials/index.js +6 -5
  264. package/3D/materials/index.js.map +1 -1
  265. package/3D/materials/mrdl/index.d.ts +3 -3
  266. package/3D/materials/mrdl/index.js +3 -3
  267. package/3D/materials/mrdl/index.js.map +1 -1
  268. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +148 -147
  269. package/3D/materials/mrdl/mrdlBackplateMaterial.js +436 -409
  270. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  271. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +334 -333
  272. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +851 -786
  273. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  274. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +334 -333
  275. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +851 -786
  276. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  277. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -5
  278. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +8 -6
  279. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -1
  280. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -5
  281. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +8 -6
  282. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -1
  283. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -5
  284. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +8 -6
  285. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -1
  286. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -5
  287. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +8 -6
  288. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -1
  289. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -5
  290. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +8 -6
  291. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -1
  292. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -5
  293. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +8 -6
  294. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -1
  295. package/3D/vector3WithInfo.d.ts +16 -16
  296. package/3D/vector3WithInfo.js +23 -23
  297. package/3D/vector3WithInfo.js.map +1 -1
  298. package/index.d.ts +2 -2
  299. package/index.js +3 -2
  300. package/index.js.map +1 -1
  301. package/legacy/legacy.d.ts +1 -1
  302. package/legacy/legacy.js +14 -13
  303. package/legacy/legacy.js.map +1 -1
  304. package/package.json +21 -328
  305. package/readme.md +2 -2
@@ -1,589 +1,604 @@
1
- import { __decorate, __extends } from "tslib";
2
- import { Observable } from "@babylonjs/core/Misc/observable.js";
3
- import { ValueAndUnit } from "../valueAndUnit.js";
4
- import { Control } from "./control.js";
5
- import { RegisterClass } from "@babylonjs/core/Misc/typeStore.js";
6
- import { serialize } from '@babylonjs/core/Misc/decorators.js';
7
- import { EngineStore } from "@babylonjs/core/Engines/engineStore.js";
8
- /**
9
- * Enum that determines the text-wrapping mode to use.
10
- */
11
- export var TextWrapping;
12
- (function (TextWrapping) {
13
- /**
14
- * Clip the text when it's larger than Control.width; this is the default mode.
15
- */
16
- TextWrapping[TextWrapping["Clip"] = 0] = "Clip";
17
- /**
18
- * Wrap the text word-wise, i.e. try to add line-breaks at word boundary to fit within Control.width.
19
- */
20
- TextWrapping[TextWrapping["WordWrap"] = 1] = "WordWrap";
21
- /**
22
- * Ellipsize the text, i.e. shrink with trailing … when text is larger than Control.width.
23
- */
24
- TextWrapping[TextWrapping["Ellipsis"] = 2] = "Ellipsis";
25
- /**
26
- * 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 … .
27
- */
28
- TextWrapping[TextWrapping["WordWrapEllipsis"] = 3] = "WordWrapEllipsis";
29
- })(TextWrapping || (TextWrapping = {}));
30
- /**
31
- * Class used to create text block control
32
- */
33
- var TextBlock = /** @class */ (function (_super) {
34
- __extends(TextBlock, _super);
35
- /**
36
- * Creates a new TextBlock object
37
- * @param name defines the name of the control
38
- * @param text defines the text to display (emptry string by default)
39
- */
40
- function TextBlock(
41
- /**
42
- * Defines the name of the control
43
- */
44
- name, text) {
45
- if (text === void 0) { text = ""; }
46
- var _this = _super.call(this, name) || this;
47
- _this.name = name;
48
- _this._text = "";
49
- _this._textWrapping = TextWrapping.Clip;
50
- _this._textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;
51
- _this._textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;
52
- _this._resizeToFit = false;
53
- _this._lineSpacing = new ValueAndUnit(0);
54
- _this._outlineWidth = 0;
55
- _this._outlineColor = "white";
56
- _this._underline = false;
57
- _this._lineThrough = false;
58
- /**
59
- * An event triggered after the text is changed
60
- */
61
- _this.onTextChangedObservable = new Observable();
62
- /**
63
- * An event triggered after the text was broken up into lines
64
- */
65
- _this.onLinesReadyObservable = new Observable();
66
- _this.text = text;
67
- return _this;
68
- }
69
- Object.defineProperty(TextBlock.prototype, "lines", {
70
- /**
71
- * Return the line list (you may need to use the onLinesReadyObservable to make sure the list is ready)
72
- */
73
- get: function () {
74
- return this._lines;
75
- },
76
- enumerable: false,
77
- configurable: true
78
- });
79
- Object.defineProperty(TextBlock.prototype, "resizeToFit", {
80
- /**
81
- * Gets or sets an boolean indicating that the TextBlock will be resized to fit container
82
- */
83
- get: function () {
84
- return this._resizeToFit;
85
- },
86
- /**
87
- * Gets or sets an boolean indicating that the TextBlock will be resized to fit container
88
- */
89
- set: function (value) {
90
- if (this._resizeToFit === value) {
91
- return;
92
- }
93
- this._resizeToFit = value;
94
- if (this._resizeToFit) {
95
- this._width.ignoreAdaptiveScaling = true;
96
- this._height.ignoreAdaptiveScaling = true;
97
- }
98
- this._markAsDirty();
99
- },
100
- enumerable: false,
101
- configurable: true
102
- });
103
- Object.defineProperty(TextBlock.prototype, "textWrapping", {
104
- /**
105
- * Gets or sets a boolean indicating if text must be wrapped
106
- */
107
- get: function () {
108
- return this._textWrapping;
109
- },
110
- /**
111
- * Gets or sets a boolean indicating if text must be wrapped
112
- */
113
- set: function (value) {
114
- if (this._textWrapping === value) {
115
- return;
116
- }
117
- this._textWrapping = +value;
118
- this._markAsDirty();
119
- },
120
- enumerable: false,
121
- configurable: true
122
- });
123
- Object.defineProperty(TextBlock.prototype, "text", {
124
- /**
125
- * Gets or sets text to display
126
- */
127
- get: function () {
128
- return this._text;
129
- },
130
- /**
131
- * Gets or sets text to display
132
- */
133
- set: function (value) {
134
- if (this._text === value) {
135
- return;
136
- }
137
- this._text = value + ""; // Making sure it is a text
138
- this._markAsDirty();
139
- this.onTextChangedObservable.notifyObservers(this);
140
- },
141
- enumerable: false,
142
- configurable: true
143
- });
144
- Object.defineProperty(TextBlock.prototype, "textHorizontalAlignment", {
145
- /**
146
- * Gets or sets text horizontal alignment (BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER by default)
147
- */
148
- get: function () {
149
- return this._textHorizontalAlignment;
150
- },
151
- /**
152
- * Gets or sets text horizontal alignment (BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER by default)
153
- */
154
- set: function (value) {
155
- if (this._textHorizontalAlignment === value) {
156
- return;
157
- }
158
- this._textHorizontalAlignment = value;
159
- this._markAsDirty();
160
- },
161
- enumerable: false,
162
- configurable: true
163
- });
164
- Object.defineProperty(TextBlock.prototype, "textVerticalAlignment", {
165
- /**
166
- * Gets or sets text vertical alignment (BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER by default)
167
- */
168
- get: function () {
169
- return this._textVerticalAlignment;
170
- },
171
- /**
172
- * Gets or sets text vertical alignment (BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER by default)
173
- */
174
- set: function (value) {
175
- if (this._textVerticalAlignment === value) {
176
- return;
177
- }
178
- this._textVerticalAlignment = value;
179
- this._markAsDirty();
180
- },
181
- enumerable: false,
182
- configurable: true
183
- });
184
- Object.defineProperty(TextBlock.prototype, "lineSpacing", {
185
- /**
186
- * Gets or sets line spacing value
187
- */
188
- get: function () {
189
- return this._lineSpacing.toString(this._host);
190
- },
191
- /**
192
- * Gets or sets line spacing value
193
- */
194
- set: function (value) {
195
- if (this._lineSpacing.fromString(value)) {
196
- this._markAsDirty();
197
- }
198
- },
199
- enumerable: false,
200
- configurable: true
201
- });
202
- Object.defineProperty(TextBlock.prototype, "outlineWidth", {
203
- /**
204
- * Gets or sets outlineWidth of the text to display
205
- */
206
- get: function () {
207
- return this._outlineWidth;
208
- },
209
- /**
210
- * Gets or sets outlineWidth of the text to display
211
- */
212
- set: function (value) {
213
- if (this._outlineWidth === value) {
214
- return;
215
- }
216
- this._outlineWidth = value;
217
- this._markAsDirty();
218
- },
219
- enumerable: false,
220
- configurable: true
221
- });
222
- Object.defineProperty(TextBlock.prototype, "underline", {
223
- /**
224
- * Gets or sets a boolean indicating that text must have underline
225
- */
226
- get: function () {
227
- return this._underline;
228
- },
229
- /**
230
- * Gets or sets a boolean indicating that text must have underline
231
- */
232
- set: function (value) {
233
- if (this._underline === value) {
234
- return;
235
- }
236
- this._underline = value;
237
- this._markAsDirty();
238
- },
239
- enumerable: false,
240
- configurable: true
241
- });
242
- Object.defineProperty(TextBlock.prototype, "lineThrough", {
243
- /**
244
- * Gets or sets an boolean indicating that text must be crossed out
245
- */
246
- get: function () {
247
- return this._lineThrough;
248
- },
249
- /**
250
- * Gets or sets an boolean indicating that text must be crossed out
251
- */
252
- set: function (value) {
253
- if (this._lineThrough === value) {
254
- return;
255
- }
256
- this._lineThrough = value;
257
- this._markAsDirty();
258
- },
259
- enumerable: false,
260
- configurable: true
261
- });
262
- Object.defineProperty(TextBlock.prototype, "outlineColor", {
263
- /**
264
- * Gets or sets outlineColor of the text to display
265
- */
266
- get: function () {
267
- return this._outlineColor;
268
- },
269
- /**
270
- * Gets or sets outlineColor of the text to display
271
- */
272
- set: function (value) {
273
- if (this._outlineColor === value) {
274
- return;
275
- }
276
- this._outlineColor = value;
277
- this._markAsDirty();
278
- },
279
- enumerable: false,
280
- configurable: true
281
- });
282
- TextBlock.prototype._getTypeName = function () {
283
- return "TextBlock";
284
- };
285
- TextBlock.prototype._processMeasures = function (parentMeasure, context) {
286
- if (!this._fontOffset || this.isDirty) {
287
- this._fontOffset = Control._GetFontOffset(context.font);
288
- }
289
- _super.prototype._processMeasures.call(this, parentMeasure, context);
290
- // Prepare lines
291
- this._lines = this._breakLines(this._currentMeasure.width, this._currentMeasure.height, context);
292
- this.onLinesReadyObservable.notifyObservers(this);
293
- var maxLineWidth = 0;
294
- for (var i = 0; i < this._lines.length; i++) {
295
- var line = this._lines[i];
296
- if (line.width > maxLineWidth) {
297
- maxLineWidth = line.width;
298
- }
299
- }
300
- if (this._resizeToFit) {
301
- if (this._textWrapping === TextWrapping.Clip) {
302
- var newWidth = (this._paddingLeftInPixels + this._paddingRightInPixels + maxLineWidth) | 0;
303
- if (newWidth !== this._width.internalValue) {
304
- this._width.updateInPlace(newWidth, ValueAndUnit.UNITMODE_PIXEL);
305
- this._rebuildLayout = true;
306
- }
307
- }
308
- var newHeight = (this._paddingTopInPixels + this._paddingBottomInPixels + this._fontOffset.height * this._lines.length) | 0;
309
- if (this._lines.length > 0 && this._lineSpacing.internalValue !== 0) {
310
- var lineSpacing = 0;
311
- if (this._lineSpacing.isPixel) {
312
- lineSpacing = this._lineSpacing.getValue(this._host);
313
- }
314
- else {
315
- lineSpacing = this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);
316
- }
317
- newHeight += (this._lines.length - 1) * lineSpacing;
318
- }
319
- if (newHeight !== this._height.internalValue) {
320
- this._height.updateInPlace(newHeight, ValueAndUnit.UNITMODE_PIXEL);
321
- this._rebuildLayout = true;
322
- }
323
- }
324
- };
325
- TextBlock.prototype._drawText = function (text, textWidth, y, context) {
326
- var width = this._currentMeasure.width;
327
- var x = 0;
328
- switch (this._textHorizontalAlignment) {
329
- case Control.HORIZONTAL_ALIGNMENT_LEFT:
330
- x = 0;
331
- break;
332
- case Control.HORIZONTAL_ALIGNMENT_RIGHT:
333
- x = width - textWidth;
334
- break;
335
- case Control.HORIZONTAL_ALIGNMENT_CENTER:
336
- x = (width - textWidth) / 2;
337
- break;
338
- }
339
- if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {
340
- context.shadowColor = this.shadowColor;
341
- context.shadowBlur = this.shadowBlur;
342
- context.shadowOffsetX = this.shadowOffsetX;
343
- context.shadowOffsetY = this.shadowOffsetY;
344
- }
345
- if (this.outlineWidth) {
346
- context.strokeText(text, this._currentMeasure.left + x, y);
347
- }
348
- context.fillText(text, this._currentMeasure.left + x, y);
349
- if (this._underline) {
350
- context.beginPath();
351
- context.lineWidth = Math.round(this.fontSizeInPixels * 0.05);
352
- context.moveTo(this._currentMeasure.left + x, y + 3);
353
- context.lineTo(this._currentMeasure.left + x + textWidth, y + 3);
354
- context.stroke();
355
- context.closePath();
356
- }
357
- if (this._lineThrough) {
358
- context.beginPath();
359
- context.lineWidth = Math.round(this.fontSizeInPixels * 0.05);
360
- context.moveTo(this._currentMeasure.left + x, y - this.fontSizeInPixels / 3);
361
- context.lineTo(this._currentMeasure.left + x + textWidth, y - this.fontSizeInPixels / 3);
362
- context.stroke();
363
- context.closePath();
364
- }
365
- };
366
- /** @hidden */
367
- TextBlock.prototype._draw = function (context, invalidatedRectangle) {
368
- context.save();
369
- this._applyStates(context);
370
- // Render lines
371
- this._renderLines(context);
372
- context.restore();
373
- };
374
- TextBlock.prototype._applyStates = function (context) {
375
- _super.prototype._applyStates.call(this, context);
376
- if (this.outlineWidth) {
377
- context.lineWidth = this.outlineWidth;
378
- context.strokeStyle = this.outlineColor;
379
- context.lineJoin = 'miter';
380
- context.miterLimit = 2;
381
- }
382
- };
383
- TextBlock.prototype._breakLines = function (refWidth, refHeight, context) {
384
- var lines = [];
385
- var _lines = this.text.split("\n");
386
- if (this._textWrapping === TextWrapping.Ellipsis) {
387
- for (var _i = 0, _lines_1 = _lines; _i < _lines_1.length; _i++) {
388
- var _line = _lines_1[_i];
389
- lines.push(this._parseLineEllipsis(_line, refWidth, context));
390
- }
391
- }
392
- else if (this._textWrapping === TextWrapping.WordWrap) {
393
- for (var _a = 0, _lines_2 = _lines; _a < _lines_2.length; _a++) {
394
- var _line = _lines_2[_a];
395
- lines.push.apply(lines, this._parseLineWordWrap(_line, refWidth, context));
396
- }
397
- }
398
- else if (this._textWrapping === TextWrapping.WordWrapEllipsis) {
399
- for (var _b = 0, _lines_3 = _lines; _b < _lines_3.length; _b++) {
400
- var _line = _lines_3[_b];
401
- lines.push.apply(lines, this._parseLineWordWrapEllipsis(_line, refWidth, refHeight, context));
402
- }
403
- }
404
- else {
405
- for (var _c = 0, _lines_4 = _lines; _c < _lines_4.length; _c++) {
406
- var _line = _lines_4[_c];
407
- lines.push(this._parseLine(_line, context));
408
- }
409
- }
410
- return lines;
411
- };
412
- TextBlock.prototype._parseLine = function (line, context) {
413
- if (line === void 0) { line = ""; }
414
- var textMetrics = context.measureText(line);
415
- var lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
416
- return { text: line, width: lineWidth };
417
- };
418
- TextBlock.prototype._parseLineEllipsis = function (line, width, context) {
419
- if (line === void 0) { line = ""; }
420
- var textMetrics = context.measureText(line);
421
- var lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
422
- if (lineWidth > width) {
423
- line += "…";
424
- }
425
- // unicode support. split('') does not work with unicode!
426
- // make sure Array.from is available
427
- var characters = Array.from && Array.from(line);
428
- if (!characters) {
429
- // no array.from, use the old method
430
- while (line.length > 2 && lineWidth > width) {
431
- line = line.slice(0, -2) + "…";
432
- textMetrics = context.measureText(line);
433
- lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
434
- }
435
- }
436
- else {
437
- while (characters.length && lineWidth > width) {
438
- characters.pop();
439
- line = "".concat(characters.join(""), "...");
440
- textMetrics = context.measureText(line);
441
- lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
442
- }
443
- }
444
- return { text: line, width: lineWidth };
445
- };
446
- TextBlock.prototype._parseLineWordWrap = function (line, width, context) {
447
- if (line === void 0) { line = ""; }
448
- var lines = [];
449
- var words = this.wordSplittingFunction ? this.wordSplittingFunction(line) : line.split(" ");
450
- var textMetrics = context.measureText(line);
451
- var lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
452
- for (var n = 0; n < words.length; n++) {
453
- var testLine = n > 0 ? line + " " + words[n] : words[0];
454
- var metrics = context.measureText(testLine);
455
- var testWidth = Math.abs(metrics.actualBoundingBoxLeft) + Math.abs(metrics.actualBoundingBoxRight);
456
- if (testWidth > width && n > 0) {
457
- lines.push({ text: line, width: lineWidth });
458
- line = words[n];
459
- textMetrics = context.measureText(line);
460
- lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
461
- }
462
- else {
463
- lineWidth = testWidth;
464
- line = testLine;
465
- }
466
- }
467
- lines.push({ text: line, width: lineWidth });
468
- return lines;
469
- };
470
- TextBlock.prototype._parseLineWordWrapEllipsis = function (line, width, height, context) {
471
- if (line === void 0) { line = ""; }
472
- var lines = this._parseLineWordWrap(line, width, context);
473
- for (var n = 1; n <= lines.length; n++) {
474
- var currentHeight = this._computeHeightForLinesOf(n);
475
- if (currentHeight > height && n > 1) {
476
- var lastLine = lines[n - 2];
477
- var currentLine = lines[n - 1];
478
- lines[n - 2] = this._parseLineEllipsis("".concat(lastLine.text + currentLine.text), width, context);
479
- var linesToRemove = lines.length - n + 1;
480
- for (var i = 0; i < linesToRemove; i++) {
481
- lines.pop();
482
- }
483
- return lines;
484
- }
485
- }
486
- return lines;
487
- };
488
- TextBlock.prototype._renderLines = function (context) {
489
- var height = this._currentMeasure.height;
490
- var rootY = 0;
491
- switch (this._textVerticalAlignment) {
492
- case Control.VERTICAL_ALIGNMENT_TOP:
493
- rootY = this._fontOffset.ascent;
494
- break;
495
- case Control.VERTICAL_ALIGNMENT_BOTTOM:
496
- rootY = height - this._fontOffset.height * (this._lines.length - 1) - this._fontOffset.descent;
497
- break;
498
- case Control.VERTICAL_ALIGNMENT_CENTER:
499
- rootY = this._fontOffset.ascent + (height - this._fontOffset.height * this._lines.length) / 2;
500
- break;
501
- }
502
- rootY += this._currentMeasure.top;
503
- for (var i = 0; i < this._lines.length; i++) {
504
- var line = this._lines[i];
505
- if (i !== 0 && this._lineSpacing.internalValue !== 0) {
506
- if (this._lineSpacing.isPixel) {
507
- rootY += this._lineSpacing.getValue(this._host);
508
- }
509
- else {
510
- rootY = rootY + this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);
511
- }
512
- }
513
- this._drawText(line.text, line.width, rootY, context);
514
- rootY += this._fontOffset.height;
515
- }
516
- };
517
- TextBlock.prototype._computeHeightForLinesOf = function (lineCount) {
518
- var newHeight = this._paddingTopInPixels + this._paddingBottomInPixels + this._fontOffset.height * lineCount;
519
- if (lineCount > 0 && this._lineSpacing.internalValue !== 0) {
520
- var lineSpacing = 0;
521
- if (this._lineSpacing.isPixel) {
522
- lineSpacing = this._lineSpacing.getValue(this._host);
523
- }
524
- else {
525
- lineSpacing = this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);
526
- }
527
- newHeight += (lineCount - 1) * lineSpacing;
528
- }
529
- return newHeight;
530
- };
531
- /**
532
- * Given a width constraint applied on the text block, find the expected height
533
- * @returns expected height
534
- */
535
- TextBlock.prototype.computeExpectedHeight = function () {
536
- var _a;
537
- if (this.text && this.widthInPixels) {
538
- // Should abstract platform instead of using LastCreatedEngine
539
- var context_1 = (_a = EngineStore.LastCreatedEngine) === null || _a === void 0 ? void 0 : _a.createCanvas(0, 0).getContext("2d");
540
- if (context_1) {
541
- this._applyStates(context_1);
542
- if (!this._fontOffset) {
543
- this._fontOffset = Control._GetFontOffset(context_1.font);
544
- }
545
- var lines = this._lines ? this._lines : this._breakLines(this.widthInPixels - this._paddingLeftInPixels - this._paddingRightInPixels, this.heightInPixels - this._paddingTopInPixels - this._paddingBottomInPixels, context_1);
546
- return this._computeHeightForLinesOf(lines.length);
547
- }
548
- }
549
- return 0;
550
- };
551
- TextBlock.prototype.dispose = function () {
552
- _super.prototype.dispose.call(this);
553
- this.onTextChangedObservable.clear();
554
- };
555
- __decorate([
556
- serialize()
557
- ], TextBlock.prototype, "resizeToFit", null);
558
- __decorate([
559
- serialize()
560
- ], TextBlock.prototype, "textWrapping", null);
561
- __decorate([
562
- serialize()
563
- ], TextBlock.prototype, "text", null);
564
- __decorate([
565
- serialize()
566
- ], TextBlock.prototype, "textHorizontalAlignment", null);
567
- __decorate([
568
- serialize()
569
- ], TextBlock.prototype, "textVerticalAlignment", null);
570
- __decorate([
571
- serialize()
572
- ], TextBlock.prototype, "lineSpacing", null);
573
- __decorate([
574
- serialize()
575
- ], TextBlock.prototype, "outlineWidth", null);
576
- __decorate([
577
- serialize()
578
- ], TextBlock.prototype, "underline", null);
579
- __decorate([
580
- serialize()
581
- ], TextBlock.prototype, "lineThrough", null);
582
- __decorate([
583
- serialize()
584
- ], TextBlock.prototype, "outlineColor", null);
585
- return TextBlock;
586
- }(Control));
587
- export { TextBlock };
588
- RegisterClass("BABYLON.GUI.TextBlock", TextBlock);
1
+ import { __decorate, __extends } from "tslib";
2
+ import { Observable } from "@babylonjs/core/Misc/observable.js";
3
+ import { ValueAndUnit } from "../valueAndUnit";
4
+ import { Control } from "./control";
5
+ import { RegisterClass } from "@babylonjs/core/Misc/typeStore.js";
6
+ import { serialize } from "@babylonjs/core/Misc/decorators.js";
7
+ import { EngineStore } from "@babylonjs/core/Engines/engineStore.js";
8
+ /**
9
+ * Enum that determines the text-wrapping mode to use.
10
+ */
11
+ export var TextWrapping;
12
+ (function (TextWrapping) {
13
+ /**
14
+ * Clip the text when it's larger than Control.width; this is the default mode.
15
+ */
16
+ TextWrapping[TextWrapping["Clip"] = 0] = "Clip";
17
+ /**
18
+ * Wrap the text word-wise, i.e. try to add line-breaks at word boundary to fit within Control.width.
19
+ */
20
+ TextWrapping[TextWrapping["WordWrap"] = 1] = "WordWrap";
21
+ /**
22
+ * Ellipsize the text, i.e. shrink with trailing … when text is larger than Control.width.
23
+ */
24
+ TextWrapping[TextWrapping["Ellipsis"] = 2] = "Ellipsis";
25
+ /**
26
+ * 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 … .
27
+ */
28
+ TextWrapping[TextWrapping["WordWrapEllipsis"] = 3] = "WordWrapEllipsis";
29
+ })(TextWrapping || (TextWrapping = {}));
30
+ /**
31
+ * Class used to create text block control
32
+ */
33
+ var TextBlock = /** @class */ (function (_super) {
34
+ __extends(TextBlock, _super);
35
+ /**
36
+ * Creates a new TextBlock object
37
+ * @param name defines the name of the control
38
+ * @param text defines the text to display (empty string by default)
39
+ */
40
+ function TextBlock(
41
+ /**
42
+ * Defines the name of the control
43
+ */
44
+ name, text) {
45
+ if (text === void 0) { text = ""; }
46
+ var _this = _super.call(this, name) || this;
47
+ _this.name = name;
48
+ _this._text = "";
49
+ _this._textWrapping = TextWrapping.Clip;
50
+ _this._textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;
51
+ _this._textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;
52
+ _this._resizeToFit = false;
53
+ _this._lineSpacing = new ValueAndUnit(0);
54
+ _this._outlineWidth = 0;
55
+ _this._outlineColor = "white";
56
+ _this._underline = false;
57
+ _this._lineThrough = false;
58
+ /**
59
+ * An event triggered after the text is changed
60
+ */
61
+ _this.onTextChangedObservable = new Observable();
62
+ /**
63
+ * An event triggered after the text was broken up into lines
64
+ */
65
+ _this.onLinesReadyObservable = new Observable();
66
+ _this.text = text;
67
+ return _this;
68
+ }
69
+ Object.defineProperty(TextBlock.prototype, "lines", {
70
+ /**
71
+ * Return the line list (you may need to use the onLinesReadyObservable to make sure the list is ready)
72
+ */
73
+ get: function () {
74
+ return this._lines;
75
+ },
76
+ enumerable: false,
77
+ configurable: true
78
+ });
79
+ Object.defineProperty(TextBlock.prototype, "resizeToFit", {
80
+ /**
81
+ * Gets or sets an boolean indicating that the TextBlock will be resized to fit container
82
+ */
83
+ get: function () {
84
+ return this._resizeToFit;
85
+ },
86
+ /**
87
+ * Gets or sets an boolean indicating that the TextBlock will be resized to fit container
88
+ */
89
+ set: function (value) {
90
+ if (this._resizeToFit === value) {
91
+ return;
92
+ }
93
+ this._resizeToFit = value;
94
+ if (this._resizeToFit) {
95
+ this._width.ignoreAdaptiveScaling = true;
96
+ this._height.ignoreAdaptiveScaling = true;
97
+ }
98
+ this._markAsDirty();
99
+ },
100
+ enumerable: false,
101
+ configurable: true
102
+ });
103
+ Object.defineProperty(TextBlock.prototype, "textWrapping", {
104
+ /**
105
+ * Gets or sets a boolean indicating if text must be wrapped
106
+ */
107
+ get: function () {
108
+ return this._textWrapping;
109
+ },
110
+ /**
111
+ * Gets or sets a boolean indicating if text must be wrapped
112
+ */
113
+ set: function (value) {
114
+ if (this._textWrapping === value) {
115
+ return;
116
+ }
117
+ this._textWrapping = +value;
118
+ this._markAsDirty();
119
+ },
120
+ enumerable: false,
121
+ configurable: true
122
+ });
123
+ Object.defineProperty(TextBlock.prototype, "text", {
124
+ /**
125
+ * Gets or sets text to display
126
+ */
127
+ get: function () {
128
+ return this._text;
129
+ },
130
+ /**
131
+ * Gets or sets text to display
132
+ */
133
+ set: function (value) {
134
+ if (this._text === value) {
135
+ return;
136
+ }
137
+ this._text = value + ""; // Making sure it is a text
138
+ this._markAsDirty();
139
+ this.onTextChangedObservable.notifyObservers(this);
140
+ },
141
+ enumerable: false,
142
+ configurable: true
143
+ });
144
+ Object.defineProperty(TextBlock.prototype, "textHorizontalAlignment", {
145
+ /**
146
+ * Gets or sets text horizontal alignment (BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER by default)
147
+ */
148
+ get: function () {
149
+ return this._textHorizontalAlignment;
150
+ },
151
+ /**
152
+ * Gets or sets text horizontal alignment (BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER by default)
153
+ */
154
+ set: function (value) {
155
+ if (this._textHorizontalAlignment === value) {
156
+ return;
157
+ }
158
+ this._textHorizontalAlignment = value;
159
+ this._markAsDirty();
160
+ },
161
+ enumerable: false,
162
+ configurable: true
163
+ });
164
+ Object.defineProperty(TextBlock.prototype, "textVerticalAlignment", {
165
+ /**
166
+ * Gets or sets text vertical alignment (BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER by default)
167
+ */
168
+ get: function () {
169
+ return this._textVerticalAlignment;
170
+ },
171
+ /**
172
+ * Gets or sets text vertical alignment (BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER by default)
173
+ */
174
+ set: function (value) {
175
+ if (this._textVerticalAlignment === value) {
176
+ return;
177
+ }
178
+ this._textVerticalAlignment = value;
179
+ this._markAsDirty();
180
+ },
181
+ enumerable: false,
182
+ configurable: true
183
+ });
184
+ Object.defineProperty(TextBlock.prototype, "lineSpacing", {
185
+ /**
186
+ * Gets or sets line spacing value
187
+ */
188
+ get: function () {
189
+ return this._lineSpacing.toString(this._host);
190
+ },
191
+ /**
192
+ * Gets or sets line spacing value
193
+ */
194
+ set: function (value) {
195
+ if (this._lineSpacing.fromString(value)) {
196
+ this._markAsDirty();
197
+ }
198
+ },
199
+ enumerable: false,
200
+ configurable: true
201
+ });
202
+ Object.defineProperty(TextBlock.prototype, "outlineWidth", {
203
+ /**
204
+ * Gets or sets outlineWidth of the text to display
205
+ */
206
+ get: function () {
207
+ return this._outlineWidth;
208
+ },
209
+ /**
210
+ * Gets or sets outlineWidth of the text to display
211
+ */
212
+ set: function (value) {
213
+ if (this._outlineWidth === value) {
214
+ return;
215
+ }
216
+ this._outlineWidth = value;
217
+ this._markAsDirty();
218
+ },
219
+ enumerable: false,
220
+ configurable: true
221
+ });
222
+ Object.defineProperty(TextBlock.prototype, "underline", {
223
+ /**
224
+ * Gets or sets a boolean indicating that text must have underline
225
+ */
226
+ get: function () {
227
+ return this._underline;
228
+ },
229
+ /**
230
+ * Gets or sets a boolean indicating that text must have underline
231
+ */
232
+ set: function (value) {
233
+ if (this._underline === value) {
234
+ return;
235
+ }
236
+ this._underline = value;
237
+ this._markAsDirty();
238
+ },
239
+ enumerable: false,
240
+ configurable: true
241
+ });
242
+ Object.defineProperty(TextBlock.prototype, "lineThrough", {
243
+ /**
244
+ * Gets or sets an boolean indicating that text must be crossed out
245
+ */
246
+ get: function () {
247
+ return this._lineThrough;
248
+ },
249
+ /**
250
+ * Gets or sets an boolean indicating that text must be crossed out
251
+ */
252
+ set: function (value) {
253
+ if (this._lineThrough === value) {
254
+ return;
255
+ }
256
+ this._lineThrough = value;
257
+ this._markAsDirty();
258
+ },
259
+ enumerable: false,
260
+ configurable: true
261
+ });
262
+ Object.defineProperty(TextBlock.prototype, "outlineColor", {
263
+ /**
264
+ * Gets or sets outlineColor of the text to display
265
+ */
266
+ get: function () {
267
+ return this._outlineColor;
268
+ },
269
+ /**
270
+ * Gets or sets outlineColor of the text to display
271
+ */
272
+ set: function (value) {
273
+ if (this._outlineColor === value) {
274
+ return;
275
+ }
276
+ this._outlineColor = value;
277
+ this._markAsDirty();
278
+ },
279
+ enumerable: false,
280
+ configurable: true
281
+ });
282
+ TextBlock.prototype._getTypeName = function () {
283
+ return "TextBlock";
284
+ };
285
+ TextBlock.prototype._processMeasures = function (parentMeasure, context) {
286
+ if (!this._fontOffset || this.isDirty) {
287
+ this._fontOffset = Control._GetFontOffset(context.font);
288
+ }
289
+ _super.prototype._processMeasures.call(this, parentMeasure, context);
290
+ // Prepare lines
291
+ this._lines = this._breakLines(this._currentMeasure.width, this._currentMeasure.height, context);
292
+ this.onLinesReadyObservable.notifyObservers(this);
293
+ var maxLineWidth = 0;
294
+ for (var i = 0; i < this._lines.length; i++) {
295
+ var line = this._lines[i];
296
+ if (line.width > maxLineWidth) {
297
+ maxLineWidth = line.width;
298
+ }
299
+ }
300
+ if (this._resizeToFit) {
301
+ if (this._textWrapping === TextWrapping.Clip) {
302
+ var newWidth = (this._paddingLeftInPixels + this._paddingRightInPixels + maxLineWidth) | 0;
303
+ if (newWidth !== this._width.internalValue) {
304
+ this._width.updateInPlace(newWidth, ValueAndUnit.UNITMODE_PIXEL);
305
+ this._rebuildLayout = true;
306
+ }
307
+ }
308
+ var newHeight = (this._paddingTopInPixels + this._paddingBottomInPixels + this._fontOffset.height * this._lines.length) | 0;
309
+ if (this._lines.length > 0 && this._lineSpacing.internalValue !== 0) {
310
+ var lineSpacing = 0;
311
+ if (this._lineSpacing.isPixel) {
312
+ lineSpacing = this._lineSpacing.getValue(this._host);
313
+ }
314
+ else {
315
+ lineSpacing = this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);
316
+ }
317
+ newHeight += (this._lines.length - 1) * lineSpacing;
318
+ }
319
+ if (newHeight !== this._height.internalValue) {
320
+ this._height.updateInPlace(newHeight, ValueAndUnit.UNITMODE_PIXEL);
321
+ this._rebuildLayout = true;
322
+ }
323
+ }
324
+ };
325
+ TextBlock.prototype._drawText = function (text, textWidth, y, context) {
326
+ var width = this._currentMeasure.width;
327
+ var x = 0;
328
+ switch (this._textHorizontalAlignment) {
329
+ case Control.HORIZONTAL_ALIGNMENT_LEFT:
330
+ x = 0;
331
+ break;
332
+ case Control.HORIZONTAL_ALIGNMENT_RIGHT:
333
+ x = width - textWidth;
334
+ break;
335
+ case Control.HORIZONTAL_ALIGNMENT_CENTER:
336
+ x = (width - textWidth) / 2;
337
+ break;
338
+ }
339
+ if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {
340
+ context.shadowColor = this.shadowColor;
341
+ context.shadowBlur = this.shadowBlur;
342
+ context.shadowOffsetX = this.shadowOffsetX;
343
+ context.shadowOffsetY = this.shadowOffsetY;
344
+ }
345
+ if (this.outlineWidth) {
346
+ context.strokeText(text, this._currentMeasure.left + x, y);
347
+ }
348
+ context.fillText(text, this._currentMeasure.left + x, y);
349
+ if (this._underline) {
350
+ context.beginPath();
351
+ context.lineWidth = Math.round(this.fontSizeInPixels * 0.05);
352
+ context.moveTo(this._currentMeasure.left + x, y + 3);
353
+ context.lineTo(this._currentMeasure.left + x + textWidth, y + 3);
354
+ context.stroke();
355
+ context.closePath();
356
+ }
357
+ if (this._lineThrough) {
358
+ context.beginPath();
359
+ context.lineWidth = Math.round(this.fontSizeInPixels * 0.05);
360
+ context.moveTo(this._currentMeasure.left + x, y - this.fontSizeInPixels / 3);
361
+ context.lineTo(this._currentMeasure.left + x + textWidth, y - this.fontSizeInPixels / 3);
362
+ context.stroke();
363
+ context.closePath();
364
+ }
365
+ };
366
+ /**
367
+ * @param context
368
+ * @hidden
369
+ */
370
+ TextBlock.prototype._draw = function (context) {
371
+ context.save();
372
+ this._applyStates(context);
373
+ // Render lines
374
+ this._renderLines(context);
375
+ context.restore();
376
+ };
377
+ TextBlock.prototype._applyStates = function (context) {
378
+ _super.prototype._applyStates.call(this, context);
379
+ if (this.outlineWidth) {
380
+ context.lineWidth = this.outlineWidth;
381
+ context.strokeStyle = this.outlineColor;
382
+ context.lineJoin = "miter";
383
+ context.miterLimit = 2;
384
+ }
385
+ };
386
+ TextBlock.prototype._breakLines = function (refWidth, refHeight, context) {
387
+ var lines = [];
388
+ var _lines = this.text.split("\n");
389
+ if (this._textWrapping === TextWrapping.Ellipsis) {
390
+ for (var _i = 0, _lines_1 = _lines; _i < _lines_1.length; _i++) {
391
+ var _line = _lines_1[_i];
392
+ lines.push(this._parseLineEllipsis(_line, refWidth, context));
393
+ }
394
+ }
395
+ else if (this._textWrapping === TextWrapping.WordWrap) {
396
+ for (var _a = 0, _lines_2 = _lines; _a < _lines_2.length; _a++) {
397
+ var _line = _lines_2[_a];
398
+ lines.push.apply(lines, this._parseLineWordWrap(_line, refWidth, context));
399
+ }
400
+ }
401
+ else if (this._textWrapping === TextWrapping.WordWrapEllipsis) {
402
+ for (var _b = 0, _lines_3 = _lines; _b < _lines_3.length; _b++) {
403
+ var _line = _lines_3[_b];
404
+ lines.push.apply(lines, this._parseLineWordWrapEllipsis(_line, refWidth, refHeight, context));
405
+ }
406
+ }
407
+ else {
408
+ for (var _c = 0, _lines_4 = _lines; _c < _lines_4.length; _c++) {
409
+ var _line = _lines_4[_c];
410
+ lines.push(this._parseLine(_line, context));
411
+ }
412
+ }
413
+ return lines;
414
+ };
415
+ TextBlock.prototype._parseLine = function (line, context) {
416
+ if (line === void 0) { line = ""; }
417
+ var textMetrics = context.measureText(line);
418
+ var lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
419
+ return { text: line, width: lineWidth };
420
+ };
421
+ //Calculate how many characters approximately we need to remove
422
+ TextBlock.prototype._getCharsToRemove = function (lineWidth, width, lineLength) {
423
+ var diff = lineWidth > width ? lineWidth - width : 0;
424
+ // This isn't exact unless the font is monospaced
425
+ var charWidth = lineWidth / lineLength;
426
+ var removeChars = Math.max(Math.floor(diff / charWidth), 1);
427
+ return removeChars;
428
+ };
429
+ TextBlock.prototype._parseLineEllipsis = function (line, width, context) {
430
+ if (line === void 0) { line = ""; }
431
+ var textMetrics = context.measureText(line);
432
+ var lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
433
+ var removeChars = this._getCharsToRemove(lineWidth, width, line.length);
434
+ // unicode support. split('') does not work with unicode!
435
+ // make sure Array.from is available
436
+ var characters = Array.from && Array.from(line);
437
+ if (!characters) {
438
+ // no array.from, use the old method
439
+ while (line.length > 2 && lineWidth > width) {
440
+ line = line.slice(0, -removeChars);
441
+ textMetrics = context.measureText(line + "…");
442
+ lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
443
+ removeChars = this._getCharsToRemove(lineWidth, width, line.length);
444
+ }
445
+ // Add on the end
446
+ line += "…";
447
+ }
448
+ else {
449
+ while (characters.length && lineWidth > width) {
450
+ characters.splice(characters.length - removeChars, removeChars);
451
+ line = "".concat(characters.join(""), "\u2026");
452
+ textMetrics = context.measureText(line);
453
+ lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
454
+ removeChars = this._getCharsToRemove(lineWidth, width, line.length);
455
+ }
456
+ }
457
+ return { text: line, width: lineWidth };
458
+ };
459
+ TextBlock.prototype._parseLineWordWrap = function (line, width, context) {
460
+ if (line === void 0) { line = ""; }
461
+ var lines = [];
462
+ var words = this.wordSplittingFunction ? this.wordSplittingFunction(line) : line.split(" ");
463
+ var textMetrics = context.measureText(line);
464
+ var lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
465
+ for (var n = 0; n < words.length; n++) {
466
+ var testLine = n > 0 ? line + " " + words[n] : words[0];
467
+ var metrics = context.measureText(testLine);
468
+ var testWidth = Math.abs(metrics.actualBoundingBoxLeft) + Math.abs(metrics.actualBoundingBoxRight);
469
+ if (testWidth > width && n > 0) {
470
+ lines.push({ text: line, width: lineWidth });
471
+ line = words[n];
472
+ textMetrics = context.measureText(line);
473
+ lineWidth = Math.abs(textMetrics.actualBoundingBoxLeft) + Math.abs(textMetrics.actualBoundingBoxRight);
474
+ }
475
+ else {
476
+ lineWidth = testWidth;
477
+ line = testLine;
478
+ }
479
+ }
480
+ lines.push({ text: line, width: lineWidth });
481
+ return lines;
482
+ };
483
+ TextBlock.prototype._parseLineWordWrapEllipsis = function (line, width, height, context) {
484
+ if (line === void 0) { line = ""; }
485
+ var lines = this._parseLineWordWrap(line, width, context);
486
+ for (var n = 1; n <= lines.length; n++) {
487
+ var currentHeight = this._computeHeightForLinesOf(n);
488
+ if (currentHeight > height && n > 1) {
489
+ var lastLine = lines[n - 2];
490
+ var currentLine = lines[n - 1];
491
+ lines[n - 2] = this._parseLineEllipsis("".concat(lastLine.text + currentLine.text), width, context);
492
+ var linesToRemove = lines.length - n + 1;
493
+ for (var i = 0; i < linesToRemove; i++) {
494
+ lines.pop();
495
+ }
496
+ return lines;
497
+ }
498
+ }
499
+ return lines;
500
+ };
501
+ TextBlock.prototype._renderLines = function (context) {
502
+ var height = this._currentMeasure.height;
503
+ var rootY = 0;
504
+ switch (this._textVerticalAlignment) {
505
+ case Control.VERTICAL_ALIGNMENT_TOP:
506
+ rootY = this._fontOffset.ascent;
507
+ break;
508
+ case Control.VERTICAL_ALIGNMENT_BOTTOM:
509
+ rootY = height - this._fontOffset.height * (this._lines.length - 1) - this._fontOffset.descent;
510
+ break;
511
+ case Control.VERTICAL_ALIGNMENT_CENTER:
512
+ rootY = this._fontOffset.ascent + (height - this._fontOffset.height * this._lines.length) / 2;
513
+ break;
514
+ }
515
+ rootY += this._currentMeasure.top;
516
+ for (var i = 0; i < this._lines.length; i++) {
517
+ var line = this._lines[i];
518
+ if (i !== 0 && this._lineSpacing.internalValue !== 0) {
519
+ if (this._lineSpacing.isPixel) {
520
+ rootY += this._lineSpacing.getValue(this._host);
521
+ }
522
+ else {
523
+ rootY = rootY + this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);
524
+ }
525
+ }
526
+ this._drawText(line.text, line.width, rootY, context);
527
+ rootY += this._fontOffset.height;
528
+ }
529
+ };
530
+ TextBlock.prototype._computeHeightForLinesOf = function (lineCount) {
531
+ var newHeight = this._paddingTopInPixels + this._paddingBottomInPixels + this._fontOffset.height * lineCount;
532
+ if (lineCount > 0 && this._lineSpacing.internalValue !== 0) {
533
+ var lineSpacing = 0;
534
+ if (this._lineSpacing.isPixel) {
535
+ lineSpacing = this._lineSpacing.getValue(this._host);
536
+ }
537
+ else {
538
+ lineSpacing = this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);
539
+ }
540
+ newHeight += (lineCount - 1) * lineSpacing;
541
+ }
542
+ return newHeight;
543
+ };
544
+ /**
545
+ * Given a width constraint applied on the text block, find the expected height
546
+ * @returns expected height
547
+ */
548
+ TextBlock.prototype.computeExpectedHeight = function () {
549
+ var _a;
550
+ if (this.text && this.widthInPixels) {
551
+ // Should abstract platform instead of using LastCreatedEngine
552
+ var context_1 = (_a = EngineStore.LastCreatedEngine) === null || _a === void 0 ? void 0 : _a.createCanvas(0, 0).getContext("2d");
553
+ if (context_1) {
554
+ this._applyStates(context_1);
555
+ if (!this._fontOffset) {
556
+ this._fontOffset = Control._GetFontOffset(context_1.font);
557
+ }
558
+ var lines = this._lines
559
+ ? this._lines
560
+ : this._breakLines(this.widthInPixels - this._paddingLeftInPixels - this._paddingRightInPixels, this.heightInPixels - this._paddingTopInPixels - this._paddingBottomInPixels, context_1);
561
+ return this._computeHeightForLinesOf(lines.length);
562
+ }
563
+ }
564
+ return 0;
565
+ };
566
+ TextBlock.prototype.dispose = function () {
567
+ _super.prototype.dispose.call(this);
568
+ this.onTextChangedObservable.clear();
569
+ };
570
+ __decorate([
571
+ serialize()
572
+ ], TextBlock.prototype, "resizeToFit", null);
573
+ __decorate([
574
+ serialize()
575
+ ], TextBlock.prototype, "textWrapping", null);
576
+ __decorate([
577
+ serialize()
578
+ ], TextBlock.prototype, "text", null);
579
+ __decorate([
580
+ serialize()
581
+ ], TextBlock.prototype, "textHorizontalAlignment", null);
582
+ __decorate([
583
+ serialize()
584
+ ], TextBlock.prototype, "textVerticalAlignment", null);
585
+ __decorate([
586
+ serialize()
587
+ ], TextBlock.prototype, "lineSpacing", null);
588
+ __decorate([
589
+ serialize()
590
+ ], TextBlock.prototype, "outlineWidth", null);
591
+ __decorate([
592
+ serialize()
593
+ ], TextBlock.prototype, "underline", null);
594
+ __decorate([
595
+ serialize()
596
+ ], TextBlock.prototype, "lineThrough", null);
597
+ __decorate([
598
+ serialize()
599
+ ], TextBlock.prototype, "outlineColor", null);
600
+ return TextBlock;
601
+ }(Control));
602
+ export { TextBlock };
603
+ RegisterClass("BABYLON.GUI.TextBlock", TextBlock);
589
604
  //# sourceMappingURL=textBlock.js.map