@babylonjs/gui 5.0.0-rc.6 → 5.0.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 (277) 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 -448
  5. package/2D/advancedDynamicTexture.js +1318 -1318
  6. package/2D/advancedDynamicTexture.js.map +1 -1
  7. package/2D/controls/button.d.ts +135 -135
  8. package/2D/controls/button.js +276 -276
  9. package/2D/controls/button.js.map +1 -1
  10. package/2D/controls/checkbox.d.ts +59 -59
  11. package/2D/controls/checkbox.js +188 -188
  12. package/2D/controls/checkbox.js.map +1 -1
  13. package/2D/controls/colorpicker.d.ts +103 -103
  14. package/2D/controls/colorpicker.js +1417 -1417
  15. package/2D/controls/colorpicker.js.map +1 -1
  16. package/2D/controls/container.d.ts +175 -175
  17. package/2D/controls/container.js +570 -570
  18. package/2D/controls/container.js.map +1 -1
  19. package/2D/controls/control.d.ts +866 -866
  20. package/2D/controls/control.js +2433 -2433
  21. package/2D/controls/control.js.map +1 -1
  22. package/2D/controls/displayGrid.d.ts +53 -53
  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 -59
  29. package/2D/controls/focusableButton.js +99 -99
  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 -139
  35. package/2D/controls/grid.js +529 -529
  36. package/2D/controls/grid.js.map +1 -1
  37. package/2D/controls/image.d.ts +204 -204
  38. package/2D/controls/image.js +887 -887
  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/inputPassword.d.ts +9 -8
  43. package/2D/controls/inputPassword.js +28 -25
  44. package/2D/controls/inputPassword.js.map +1 -1
  45. package/2D/controls/inputText.d.ts +201 -201
  46. package/2D/controls/inputText.js +1119 -1119
  47. package/2D/controls/inputText.js.map +1 -1
  48. package/2D/controls/line.d.ts +66 -66
  49. package/2D/controls/line.js +271 -271
  50. package/2D/controls/line.js.map +1 -1
  51. package/2D/controls/multiLine.d.ts +75 -75
  52. package/2D/controls/multiLine.js +262 -262
  53. package/2D/controls/multiLine.js.map +1 -1
  54. package/2D/controls/radioButton.d.ts +49 -49
  55. package/2D/controls/radioButton.js +205 -205
  56. package/2D/controls/radioButton.js.map +1 -1
  57. package/2D/controls/rectangle.d.ts +29 -29
  58. package/2D/controls/rectangle.js +150 -150
  59. package/2D/controls/rectangle.js.map +1 -1
  60. package/2D/controls/scrollViewers/scrollViewer.d.ts +182 -182
  61. package/2D/controls/scrollViewers/scrollViewer.js +677 -677
  62. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  63. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +57 -57
  64. package/2D/controls/scrollViewers/scrollViewerWindow.js +278 -278
  65. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  66. package/2D/controls/selector.d.ts +263 -263
  67. package/2D/controls/selector.js +692 -692
  68. package/2D/controls/sliders/baseSlider.d.ts +82 -82
  69. package/2D/controls/sliders/baseSlider.js +347 -347
  70. package/2D/controls/sliders/baseSlider.js.map +1 -1
  71. package/2D/controls/sliders/imageBasedSlider.d.ts +49 -49
  72. package/2D/controls/sliders/imageBasedSlider.js +192 -192
  73. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  74. package/2D/controls/sliders/imageScrollBar.d.ts +65 -65
  75. package/2D/controls/sliders/imageScrollBar.js +263 -263
  76. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  77. package/2D/controls/sliders/scrollBar.d.ts +38 -38
  78. package/2D/controls/sliders/scrollBar.js +143 -143
  79. package/2D/controls/sliders/scrollBar.js.map +1 -1
  80. package/2D/controls/sliders/slider.d.ts +35 -35
  81. package/2D/controls/sliders/slider.js +271 -271
  82. package/2D/controls/sliders/slider.js.map +1 -1
  83. package/2D/controls/stackPanel.d.ts +64 -64
  84. package/2D/controls/stackPanel.js +246 -246
  85. package/2D/controls/stackPanel.js.map +1 -1
  86. package/2D/controls/statics.d.ts +6 -6
  87. package/2D/controls/statics.js +49 -49
  88. package/2D/controls/textBlock.d.ts +175 -175
  89. package/2D/controls/textBlock.js +603 -603
  90. package/2D/controls/textBlock.js.map +1 -1
  91. package/2D/controls/textWrapper.d.ts +13 -13
  92. package/2D/controls/textWrapper.js +101 -101
  93. package/2D/controls/toggleButton.d.ts +117 -117
  94. package/2D/controls/toggleButton.js +268 -268
  95. package/2D/controls/toggleButton.js.map +1 -1
  96. package/2D/controls/virtualKeyboard.d.ts +96 -96
  97. package/2D/controls/virtualKeyboard.js +256 -256
  98. package/2D/controls/virtualKeyboard.js.map +1 -1
  99. package/2D/index.d.ts +9 -9
  100. package/2D/index.js +10 -9
  101. package/2D/index.js.map +1 -1
  102. package/2D/math2D.d.ts +117 -117
  103. package/2D/math2D.js +221 -221
  104. package/2D/math2D.js.map +1 -1
  105. package/2D/measure.d.ts +77 -77
  106. package/2D/measure.js +139 -139
  107. package/2D/measure.js.map +1 -1
  108. package/2D/multiLinePoint.d.ts +47 -47
  109. package/2D/multiLinePoint.js +127 -127
  110. package/2D/multiLinePoint.js.map +1 -1
  111. package/2D/style.d.ts +46 -46
  112. package/2D/style.js +97 -97
  113. package/2D/style.js.map +1 -1
  114. package/2D/valueAndUnit.d.ts +89 -89
  115. package/2D/valueAndUnit.js +226 -226
  116. package/2D/valueAndUnit.js.map +1 -1
  117. package/2D/xmlLoader.d.ts +60 -60
  118. package/2D/xmlLoader.js +348 -348
  119. package/2D/xmlLoader.js.map +1 -1
  120. package/3D/behaviors/defaultBehavior.d.ts +73 -73
  121. package/3D/behaviors/defaultBehavior.js +121 -121
  122. package/3D/behaviors/defaultBehavior.js.map +1 -1
  123. package/3D/controls/abstractButton3D.d.ts +15 -15
  124. package/3D/controls/abstractButton3D.js +25 -25
  125. package/3D/controls/abstractButton3D.js.map +1 -1
  126. package/3D/controls/button3D.d.ts +30 -30
  127. package/3D/controls/button3D.js +93 -93
  128. package/3D/controls/button3D.js.map +1 -1
  129. package/3D/controls/container3D.d.ts +72 -72
  130. package/3D/controls/container3D.js +139 -139
  131. package/3D/controls/container3D.js.map +1 -1
  132. package/3D/controls/contentDisplay3D.d.ts +30 -30
  133. package/3D/controls/contentDisplay3D.js +79 -79
  134. package/3D/controls/contentDisplay3D.js.map +1 -1
  135. package/3D/controls/control3D.d.ts +201 -201
  136. package/3D/controls/control3D.js +445 -445
  137. package/3D/controls/control3D.js.map +1 -1
  138. package/3D/controls/cylinderPanel.d.ts +17 -17
  139. package/3D/controls/cylinderPanel.js +66 -66
  140. package/3D/controls/cylinderPanel.js.map +1 -1
  141. package/3D/controls/handMenu.d.ts +28 -28
  142. package/3D/controls/handMenu.js +47 -47
  143. package/3D/controls/handMenu.js.map +1 -1
  144. package/3D/controls/holographicBackplate.d.ts +49 -49
  145. package/3D/controls/holographicBackplate.js +120 -120
  146. package/3D/controls/holographicBackplate.js.map +1 -1
  147. package/3D/controls/holographicButton.d.ts +84 -84
  148. package/3D/controls/holographicButton.js +339 -339
  149. package/3D/controls/holographicButton.js.map +1 -1
  150. package/3D/controls/holographicSlate.d.ts +131 -131
  151. package/3D/controls/holographicSlate.js +431 -431
  152. package/3D/controls/holographicSlate.js.map +1 -1
  153. package/3D/controls/index.d.ts +21 -21
  154. package/3D/controls/index.js +21 -21
  155. package/3D/controls/meshButton3D.d.ts +21 -21
  156. package/3D/controls/meshButton3D.js +62 -62
  157. package/3D/controls/meshButton3D.js.map +1 -1
  158. package/3D/controls/nearMenu.d.ts +44 -44
  159. package/3D/controls/nearMenu.js +114 -114
  160. package/3D/controls/nearMenu.js.map +1 -1
  161. package/3D/controls/planePanel.d.ts +9 -9
  162. package/3D/controls/planePanel.js +36 -36
  163. package/3D/controls/planePanel.js.map +1 -1
  164. package/3D/controls/scatterPanel.d.ts +18 -18
  165. package/3D/controls/scatterPanel.js +108 -108
  166. package/3D/controls/scatterPanel.js.map +1 -1
  167. package/3D/controls/slider3D.d.ts +81 -81
  168. package/3D/controls/slider3D.js +268 -268
  169. package/3D/controls/slider3D.js.map +1 -1
  170. package/3D/controls/spherePanel.d.ts +17 -17
  171. package/3D/controls/spherePanel.js +67 -67
  172. package/3D/controls/spherePanel.js.map +1 -1
  173. package/3D/controls/stackPanel3D.d.ts +22 -22
  174. package/3D/controls/stackPanel3D.js +107 -107
  175. package/3D/controls/touchButton3D.d.ts +80 -80
  176. package/3D/controls/touchButton3D.js +233 -233
  177. package/3D/controls/touchButton3D.js.map +1 -1
  178. package/3D/controls/touchHolographicButton.d.ts +110 -110
  179. package/3D/controls/touchHolographicButton.js +445 -445
  180. package/3D/controls/touchHolographicButton.js.map +1 -1
  181. package/3D/controls/touchHolographicMenu.d.ts +61 -61
  182. package/3D/controls/touchHolographicMenu.js +149 -149
  183. package/3D/controls/touchHolographicMenu.js.map +1 -1
  184. package/3D/controls/touchMeshButton3D.d.ts +21 -21
  185. package/3D/controls/touchMeshButton3D.js +62 -62
  186. package/3D/controls/touchMeshButton3D.js.map +1 -1
  187. package/3D/controls/volumeBasedPanel.d.ts +53 -53
  188. package/3D/controls/volumeBasedPanel.js +174 -174
  189. package/3D/controls/volumeBasedPanel.js.map +1 -1
  190. package/3D/gizmos/gizmoHandle.d.ts +108 -108
  191. package/3D/gizmos/gizmoHandle.js +209 -209
  192. package/3D/gizmos/gizmoHandle.js.map +1 -1
  193. package/3D/gizmos/index.d.ts +2 -2
  194. package/3D/gizmos/index.js +2 -2
  195. package/3D/gizmos/slateGizmo.d.ts +57 -57
  196. package/3D/gizmos/slateGizmo.js +369 -369
  197. package/3D/gizmos/slateGizmo.js.map +1 -1
  198. package/3D/gui3DManager.d.ts +94 -94
  199. package/3D/gui3DManager.js +257 -257
  200. package/3D/gui3DManager.js.map +1 -1
  201. package/3D/index.d.ts +5 -5
  202. package/3D/index.js +6 -5
  203. package/3D/index.js.map +1 -1
  204. package/3D/materials/fluent/fluentMaterial.d.ts +91 -90
  205. package/3D/materials/fluent/fluentMaterial.js +292 -292
  206. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  207. package/3D/materials/fluent/index.d.ts +1 -1
  208. package/3D/materials/fluent/index.js +1 -1
  209. package/3D/materials/fluent/shaders/fluent.fragment.d.ts +5 -5
  210. package/3D/materials/fluent/shaders/fluent.fragment.js +8 -8
  211. package/3D/materials/fluent/shaders/fluent.vertex.d.ts +5 -5
  212. package/3D/materials/fluent/shaders/fluent.vertex.js +8 -8
  213. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +155 -154
  214. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +469 -469
  215. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  216. package/3D/materials/fluentBackplate/index.d.ts +1 -1
  217. package/3D/materials/fluentBackplate/index.js +1 -1
  218. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -5
  219. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +8 -8
  220. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -5
  221. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +8 -8
  222. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +190 -189
  223. package/3D/materials/fluentButton/fluentButtonMaterial.js +539 -539
  224. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  225. package/3D/materials/fluentButton/index.d.ts +1 -1
  226. package/3D/materials/fluentButton/index.js +1 -1
  227. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -5
  228. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +8 -8
  229. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -5
  230. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +8 -8
  231. package/3D/materials/fluentMaterial.d.ts +4 -4
  232. package/3D/materials/fluentMaterial.js +4 -4
  233. package/3D/materials/handle/handleMaterial.d.ts +68 -68
  234. package/3D/materials/handle/handleMaterial.js +126 -126
  235. package/3D/materials/handle/handleMaterial.js.map +1 -1
  236. package/3D/materials/handle/index.d.ts +1 -1
  237. package/3D/materials/handle/index.js +1 -1
  238. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -5
  239. package/3D/materials/handle/shaders/handle.fragment.js +8 -8
  240. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -5
  241. package/3D/materials/handle/shaders/handle.vertex.js +8 -8
  242. package/3D/materials/index.d.ts +5 -5
  243. package/3D/materials/index.js +6 -5
  244. package/3D/materials/index.js.map +1 -1
  245. package/3D/materials/mrdl/index.d.ts +3 -3
  246. package/3D/materials/mrdl/index.js +3 -3
  247. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +148 -147
  248. package/3D/materials/mrdl/mrdlBackplateMaterial.js +436 -436
  249. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  250. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +334 -333
  251. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +851 -851
  252. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  253. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +334 -333
  254. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +851 -851
  255. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  256. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -5
  257. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +8 -8
  258. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -5
  259. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +8 -8
  260. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -5
  261. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +8 -8
  262. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -5
  263. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +8 -8
  264. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -5
  265. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +8 -8
  266. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -5
  267. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +8 -8
  268. package/3D/vector3WithInfo.d.ts +16 -16
  269. package/3D/vector3WithInfo.js +23 -23
  270. package/index.d.ts +2 -2
  271. package/index.js +3 -2
  272. package/index.js.map +1 -1
  273. package/legacy/legacy.d.ts +1 -1
  274. package/legacy/legacy.js +14 -13
  275. package/legacy/legacy.js.map +1 -1
  276. package/license.md +71 -0
  277. package/package.json +24 -5
@@ -1,604 +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 (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);
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 (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);
604
604
  //# sourceMappingURL=textBlock.js.map