@babylonjs/gui 5.0.0-alpha.6 → 5.0.0-alpha.63

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 (275) hide show
  1. package/2D/adtInstrumentation.js +1 -1
  2. package/2D/advancedDynamicTexture.d.ts +165 -125
  3. package/2D/advancedDynamicTexture.js +342 -181
  4. package/2D/advancedDynamicTexture.js.map +1 -1
  5. package/2D/controls/button.js +10 -10
  6. package/2D/controls/button.js.map +1 -1
  7. package/2D/controls/checkbox.d.ts +2 -1
  8. package/2D/controls/checkbox.js +10 -8
  9. package/2D/controls/checkbox.js.map +1 -1
  10. package/2D/controls/colorpicker.d.ts +4 -3
  11. package/2D/controls/colorpicker.js +40 -23
  12. package/2D/controls/colorpicker.js.map +1 -1
  13. package/2D/controls/container.d.ts +16 -5
  14. package/2D/controls/container.js +93 -15
  15. package/2D/controls/container.js.map +1 -1
  16. package/2D/controls/control.d.ts +99 -44
  17. package/2D/controls/control.js +267 -129
  18. package/2D/controls/control.js.map +1 -1
  19. package/2D/controls/displayGrid.d.ts +2 -1
  20. package/2D/controls/displayGrid.js +6 -6
  21. package/2D/controls/displayGrid.js.map +1 -1
  22. package/2D/controls/ellipse.d.ts +5 -3
  23. package/2D/controls/ellipse.js +9 -5
  24. package/2D/controls/ellipse.js.map +1 -1
  25. package/2D/controls/focusableButton.d.ts +4 -2
  26. package/2D/controls/focusableButton.js +9 -6
  27. package/2D/controls/focusableButton.js.map +1 -1
  28. package/2D/controls/focusableControl.d.ts +2 -1
  29. package/2D/controls/focusableControl.js.map +1 -1
  30. package/2D/controls/grid.d.ts +13 -2
  31. package/2D/controls/grid.js +108 -24
  32. package/2D/controls/grid.js.map +1 -1
  33. package/2D/controls/image.d.ts +20 -12
  34. package/2D/controls/image.js +154 -111
  35. package/2D/controls/image.js.map +1 -1
  36. package/2D/controls/index.js +29 -29
  37. package/2D/controls/inputPassword.js +4 -4
  38. package/2D/controls/inputPassword.js.map +1 -1
  39. package/2D/controls/inputText.d.ts +6 -4
  40. package/2D/controls/inputText.js +40 -14
  41. package/2D/controls/inputText.js.map +1 -1
  42. package/2D/controls/line.d.ts +3 -2
  43. package/2D/controls/line.js +8 -8
  44. package/2D/controls/line.js.map +1 -1
  45. package/2D/controls/multiLine.d.ts +4 -3
  46. package/2D/controls/multiLine.js +6 -6
  47. package/2D/controls/multiLine.js.map +1 -1
  48. package/2D/controls/radioButton.d.ts +2 -1
  49. package/2D/controls/radioButton.js +10 -7
  50. package/2D/controls/radioButton.js.map +1 -1
  51. package/2D/controls/rectangle.d.ts +8 -3
  52. package/2D/controls/rectangle.js +21 -5
  53. package/2D/controls/rectangle.js.map +1 -1
  54. package/2D/controls/scrollViewers/scrollViewer.d.ts +3 -2
  55. package/2D/controls/scrollViewers/scrollViewer.js +9 -9
  56. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  57. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +4 -3
  58. package/2D/controls/scrollViewers/scrollViewerWindow.js +4 -4
  59. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  60. package/2D/controls/selector.js +8 -8
  61. package/2D/controls/selector.js.map +1 -1
  62. package/2D/controls/sliders/baseSlider.d.ts +1 -1
  63. package/2D/controls/sliders/baseSlider.js +12 -10
  64. package/2D/controls/sliders/baseSlider.js.map +1 -1
  65. package/2D/controls/sliders/imageBasedSlider.d.ts +10 -1
  66. package/2D/controls/sliders/imageBasedSlider.js +29 -5
  67. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  68. package/2D/controls/sliders/imageScrollBar.d.ts +2 -1
  69. package/2D/controls/sliders/imageScrollBar.js +3 -3
  70. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  71. package/2D/controls/sliders/scrollBar.d.ts +2 -1
  72. package/2D/controls/sliders/scrollBar.js +3 -3
  73. package/2D/controls/sliders/scrollBar.js.map +1 -1
  74. package/2D/controls/sliders/slider.d.ts +2 -1
  75. package/2D/controls/sliders/slider.js +4 -4
  76. package/2D/controls/sliders/slider.js.map +1 -1
  77. package/2D/controls/stackPanel.d.ts +10 -3
  78. package/2D/controls/stackPanel.js +35 -13
  79. package/2D/controls/stackPanel.js.map +1 -1
  80. package/2D/controls/statics.js +3 -3
  81. package/2D/controls/statics.js.map +1 -1
  82. package/2D/controls/textBlock.d.ts +9 -8
  83. package/2D/controls/textBlock.js +30 -20
  84. package/2D/controls/textBlock.js.map +1 -1
  85. package/2D/controls/textWrapper.js +2 -2
  86. package/2D/controls/textWrapper.js.map +1 -1
  87. package/2D/controls/toggleButton.d.ts +1 -13
  88. package/2D/controls/toggleButton.js +29 -38
  89. package/2D/controls/toggleButton.js.map +1 -1
  90. package/2D/controls/virtualKeyboard.js +5 -5
  91. package/2D/controls/virtualKeyboard.js.map +1 -1
  92. package/2D/index.d.ts +1 -1
  93. package/2D/index.js +9 -9
  94. package/2D/index.js.map +1 -1
  95. package/2D/math2D.js +2 -2
  96. package/2D/measure.js +1 -1
  97. package/2D/measure.js.map +1 -1
  98. package/2D/multiLinePoint.js +3 -3
  99. package/2D/style.js +2 -2
  100. package/2D/valueAndUnit.d.ts +21 -6
  101. package/2D/valueAndUnit.js +57 -13
  102. package/2D/valueAndUnit.js.map +1 -1
  103. package/2D/xmlLoader.d.ts +17 -3
  104. package/2D/xmlLoader.js +54 -15
  105. package/2D/xmlLoader.js.map +1 -1
  106. package/3D/behaviors/defaultBehavior.d.ts +73 -0
  107. package/3D/behaviors/defaultBehavior.js +122 -0
  108. package/3D/behaviors/defaultBehavior.js.map +1 -0
  109. package/3D/controls/abstractButton3D.d.ts +2 -2
  110. package/3D/controls/abstractButton3D.js +3 -3
  111. package/3D/controls/abstractButton3D.js.map +1 -1
  112. package/3D/controls/button3D.d.ts +0 -24
  113. package/3D/controls/button3D.js +7 -83
  114. package/3D/controls/button3D.js.map +1 -1
  115. package/3D/controls/container3D.js +2 -2
  116. package/3D/controls/contentDisplay3D.d.ts +30 -0
  117. package/3D/controls/contentDisplay3D.js +79 -0
  118. package/3D/controls/contentDisplay3D.js.map +1 -0
  119. package/3D/controls/control3D.d.ts +10 -7
  120. package/3D/controls/control3D.js +42 -28
  121. package/3D/controls/control3D.js.map +1 -1
  122. package/3D/controls/cylinderPanel.js +5 -5
  123. package/3D/controls/handMenu.d.ts +28 -0
  124. package/3D/controls/handMenu.js +48 -0
  125. package/3D/controls/handMenu.js.map +1 -0
  126. package/3D/controls/holographicBackplate.d.ts +48 -0
  127. package/3D/controls/holographicBackplate.js +121 -0
  128. package/3D/controls/holographicBackplate.js.map +1 -0
  129. package/3D/controls/holographicButton.d.ts +1 -1
  130. package/3D/controls/holographicButton.js +27 -24
  131. package/3D/controls/holographicButton.js.map +1 -1
  132. package/3D/controls/holographicSlate.d.ts +118 -0
  133. package/3D/controls/holographicSlate.js +360 -0
  134. package/3D/controls/holographicSlate.js.map +1 -0
  135. package/3D/controls/index.d.ts +10 -0
  136. package/3D/controls/index.js +22 -12
  137. package/3D/controls/index.js.map +1 -1
  138. package/3D/controls/meshButton3D.js +2 -2
  139. package/3D/controls/meshButton3D.js.map +1 -1
  140. package/3D/controls/nearMenu.d.ts +45 -0
  141. package/3D/controls/nearMenu.js +111 -0
  142. package/3D/controls/nearMenu.js.map +1 -0
  143. package/3D/controls/planePanel.js +3 -3
  144. package/3D/controls/scatterPanel.js +4 -4
  145. package/3D/controls/slider3D.d.ts +80 -0
  146. package/3D/controls/slider3D.js +268 -0
  147. package/3D/controls/slider3D.js.map +1 -0
  148. package/3D/controls/spherePanel.js +5 -5
  149. package/3D/controls/stackPanel3D.js +3 -3
  150. package/3D/controls/touchButton3D.d.ts +43 -0
  151. package/3D/controls/touchButton3D.js +133 -0
  152. package/3D/controls/touchButton3D.js.map +1 -0
  153. package/3D/controls/touchHolographicButton.d.ts +100 -0
  154. package/3D/controls/touchHolographicButton.js +408 -0
  155. package/3D/controls/touchHolographicButton.js.map +1 -0
  156. package/3D/controls/touchHolographicMenu.d.ts +61 -0
  157. package/3D/controls/touchHolographicMenu.js +149 -0
  158. package/3D/controls/touchHolographicMenu.js.map +1 -0
  159. package/3D/controls/touchMeshButton3D.d.ts +22 -0
  160. package/3D/controls/touchMeshButton3D.js +63 -0
  161. package/3D/controls/touchMeshButton3D.js.map +1 -0
  162. package/3D/controls/touchToggleButton3D.d.ts +35 -0
  163. package/3D/controls/touchToggleButton3D.js +60 -0
  164. package/3D/controls/touchToggleButton3D.js.map +1 -0
  165. package/3D/controls/volumeBasedPanel.d.ts +1 -1
  166. package/3D/controls/volumeBasedPanel.js +5 -5
  167. package/3D/controls/volumeBasedPanel.js.map +1 -1
  168. package/3D/gizmos/gizmoHandle.d.ts +108 -0
  169. package/3D/gizmos/gizmoHandle.js +210 -0
  170. package/3D/gizmos/gizmoHandle.js.map +1 -0
  171. package/3D/gizmos/index.d.ts +2 -0
  172. package/3D/gizmos/index.js +3 -0
  173. package/3D/gizmos/index.js.map +1 -0
  174. package/3D/gizmos/slateGizmo.d.ts +59 -0
  175. package/3D/gizmos/slateGizmo.js +364 -0
  176. package/3D/gizmos/slateGizmo.js.map +1 -0
  177. package/3D/gui3DManager.d.ts +19 -0
  178. package/3D/gui3DManager.js +73 -13
  179. package/3D/gui3DManager.js.map +1 -1
  180. package/3D/index.d.ts +3 -2
  181. package/3D/index.js +5 -4
  182. package/3D/index.js.map +1 -1
  183. package/3D/materials/fluent/fluentMaterial.d.ts +90 -0
  184. package/3D/materials/fluent/fluentMaterial.js +282 -0
  185. package/3D/materials/fluent/fluentMaterial.js.map +1 -0
  186. package/3D/materials/fluent/index.d.ts +1 -0
  187. package/3D/materials/fluent/index.js +2 -0
  188. package/3D/materials/fluent/index.js.map +1 -0
  189. package/3D/materials/{shaders → fluent/shaders}/fluent.fragment.d.ts +0 -0
  190. package/3D/materials/fluent/shaders/fluent.fragment.js +7 -0
  191. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -0
  192. package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.d.ts +0 -0
  193. package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.js +2 -2
  194. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -0
  195. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +154 -0
  196. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +435 -0
  197. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -0
  198. package/3D/materials/fluentBackplate/index.d.ts +1 -0
  199. package/3D/materials/fluentBackplate/index.js +2 -0
  200. package/3D/materials/fluentBackplate/index.js.map +1 -0
  201. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -0
  202. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +7 -0
  203. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -0
  204. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -0
  205. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +7 -0
  206. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -0
  207. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +189 -0
  208. package/3D/materials/fluentButton/fluentButtonMaterial.js +538 -0
  209. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -0
  210. package/3D/materials/fluentButton/index.d.ts +1 -0
  211. package/3D/materials/fluentButton/index.js +2 -0
  212. package/3D/materials/fluentButton/index.js.map +1 -0
  213. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -0
  214. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +7 -0
  215. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -0
  216. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -0
  217. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +7 -0
  218. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -0
  219. package/3D/materials/fluentMaterial.d.ts +2 -88
  220. package/3D/materials/fluentMaterial.js +2 -277
  221. package/3D/materials/fluentMaterial.js.map +1 -1
  222. package/3D/materials/handle/handleMaterial.d.ts +68 -0
  223. package/3D/materials/handle/handleMaterial.js +127 -0
  224. package/3D/materials/handle/handleMaterial.js.map +1 -0
  225. package/3D/materials/handle/index.d.ts +1 -0
  226. package/3D/materials/handle/index.js +2 -0
  227. package/3D/materials/handle/index.js.map +1 -0
  228. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -0
  229. package/3D/materials/handle/shaders/handle.fragment.js +7 -0
  230. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -0
  231. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -0
  232. package/3D/materials/handle/shaders/handle.vertex.js +7 -0
  233. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -0
  234. package/3D/materials/index.d.ts +5 -1
  235. package/3D/materials/index.js +5 -1
  236. package/3D/materials/index.js.map +1 -1
  237. package/3D/materials/mrdl/index.d.ts +3 -0
  238. package/3D/materials/mrdl/index.js +4 -0
  239. package/3D/materials/mrdl/index.js.map +1 -0
  240. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +147 -0
  241. package/3D/materials/mrdl/mrdlBackplateMaterial.js +410 -0
  242. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -0
  243. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +333 -0
  244. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +787 -0
  245. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -0
  246. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +333 -0
  247. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +787 -0
  248. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -0
  249. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -0
  250. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +7 -0
  251. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -0
  252. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -0
  253. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +7 -0
  254. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -0
  255. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -0
  256. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +7 -0
  257. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -0
  258. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -0
  259. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +7 -0
  260. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -0
  261. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -0
  262. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +7 -0
  263. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -0
  264. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -0
  265. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +7 -0
  266. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -0
  267. package/3D/vector3WithInfo.js +1 -1
  268. package/index.d.ts +2 -2
  269. package/index.js +2 -2
  270. package/index.js.map +1 -1
  271. package/legacy/legacy.js +2 -2
  272. package/package.json +126 -9
  273. package/3D/materials/shaders/fluent.fragment.js +0 -7
  274. package/3D/materials/shaders/fluent.fragment.js.map +0 -1
  275. package/3D/materials/shaders/fluent.vertex.js.map +0 -1
package/2D/xmlLoader.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Nullable } from '@babylonjs/core/types';
1
2
  /**
2
3
  * Class used to load GUI via XML.
3
4
  */
@@ -6,12 +7,13 @@ export declare class XmlLoader {
6
7
  private _nodeTypes;
7
8
  private _isLoaded;
8
9
  private _objectAttributes;
10
+ private _rootNode;
9
11
  private _parentClass;
10
12
  /**
11
13
  * Create a new xml loader
12
14
  * @param parentClass Sets the class context. Used when the loader is instanced inside a class and not in a global context
13
15
  */
14
- constructor(parentClass?: null);
16
+ constructor(parentClass?: any);
15
17
  private _getChainElement;
16
18
  private _getClassAttribute;
17
19
  private _createGuiElement;
@@ -36,11 +38,23 @@ export declare class XmlLoader {
36
38
  * @returns Array of controls
37
39
  */
38
40
  getNodes(): any;
41
+ /**
42
+ * Disposes the loaded layout
43
+ */
44
+ dispose(): void;
39
45
  /**
40
46
  * Initiates the xml layout loading
41
47
  * @param xmlFile defines the xml layout to load
42
48
  * @param rootNode defines the node / control to use as a parent for the loaded layout controls.
43
- * @param callback defines the callback called on layout load.
49
+ * @param onSuccess defines the callback called on layout load successfully.
50
+ * @param onError defines the callback called on layout load failure.
51
+ */
52
+ loadLayout(xmlFile: any, rootNode: any, onSuccess?: Nullable<() => void>, onError?: Nullable<(error: string) => void>): void;
53
+ /**
54
+ * Initiates the xml layout loading asynchronously
55
+ * @param xmlFile defines the xml layout to load
56
+ * @param rootNode defines the node / control to use as a parent for the loaded layout controls.
57
+ * @returns Promise
44
58
  */
45
- loadLayout(xmlFile: any, rootNode: any, callback: any): void;
59
+ loadLayoutAsync(xmlFile: any, rootNode: any): Promise<any>;
46
60
  }
package/2D/xmlLoader.js CHANGED
@@ -1,4 +1,5 @@
1
- import { _TypeStore } from '@babylonjs/core/Misc/typeStore';
1
+ import { __awaiter, __generator } from "tslib";
2
+ import { GetClass } from '@babylonjs/core/Misc/typeStore.js';
2
3
  /**
3
4
  * Class used to load GUI via XML.
4
5
  */
@@ -41,13 +42,13 @@ var XmlLoader = /** @class */ (function () {
41
42
  };
42
43
  XmlLoader.prototype._getClassAttribute = function (attributeName) {
43
44
  var attribute = attributeName.split(".");
44
- var className = _TypeStore.GetClass("BABYLON.GUI." + attribute[0]);
45
+ var className = GetClass("BABYLON.GUI." + attribute[0]);
45
46
  return className[attribute[1]];
46
47
  };
47
48
  XmlLoader.prototype._createGuiElement = function (node, parent, linkParent) {
48
49
  if (linkParent === void 0) { linkParent = true; }
49
50
  try {
50
- var className = _TypeStore.GetClass("BABYLON.GUI." + node.nodeName);
51
+ var className = GetClass("BABYLON.GUI." + node.nodeName);
51
52
  var guiNode = new className();
52
53
  if (parent && linkParent) {
53
54
  parent.addControl(guiNode);
@@ -101,8 +102,8 @@ var XmlLoader = /** @class */ (function () {
101
102
  }
102
103
  return guiNode;
103
104
  }
104
- catch (e) {
105
- throw "XmlLoader Exception : Error parsing Control " + node.nodeName + "," + e + ".";
105
+ catch (exception) {
106
+ throw "XmlLoader Exception : Error parsing Control " + node.nodeName + "," + exception + ".";
106
107
  }
107
108
  };
108
109
  XmlLoader.prototype._parseGrid = function (node, guiNode, parent) {
@@ -199,7 +200,7 @@ var XmlLoader = /** @class */ (function () {
199
200
  var isArray = true;
200
201
  var splittedSource = dataSource.split(" in ");
201
202
  if (splittedSource.length < 2) {
202
- throw "XmlLoader Exception : Malformed XML, Data Source must an iterator and a source";
203
+ throw "XmlLoader Exception : Malformed XML, Data Source must have an iterator and a source";
203
204
  }
204
205
  var source = splittedSource[1];
205
206
  if (source.startsWith("{") && source.endsWith("}")) {
@@ -241,6 +242,9 @@ var XmlLoader = /** @class */ (function () {
241
242
  node.setAttribute("id", parent.id + (parent._children.length + 1));
242
243
  }
243
244
  var guiNode = this._createGuiElement(node, parent);
245
+ if (!this._rootNode) {
246
+ this._rootNode = guiNode;
247
+ }
244
248
  if (node.nodeName == "Grid") {
245
249
  this._parseGrid(node, guiNode, parent);
246
250
  }
@@ -273,30 +277,65 @@ var XmlLoader = /** @class */ (function () {
273
277
  XmlLoader.prototype.getNodes = function () {
274
278
  return this._nodes;
275
279
  };
280
+ /**
281
+ * Disposes the loaded layout
282
+ */
283
+ XmlLoader.prototype.dispose = function () {
284
+ if (this._rootNode) {
285
+ this._rootNode.dispose();
286
+ this._rootNode = null;
287
+ this._nodes = {};
288
+ }
289
+ };
276
290
  /**
277
291
  * Initiates the xml layout loading
278
292
  * @param xmlFile defines the xml layout to load
279
293
  * @param rootNode defines the node / control to use as a parent for the loaded layout controls.
280
- * @param callback defines the callback called on layout load.
294
+ * @param onSuccess defines the callback called on layout load successfully.
295
+ * @param onError defines the callback called on layout load failure.
281
296
  */
282
- XmlLoader.prototype.loadLayout = function (xmlFile, rootNode, callback) {
297
+ XmlLoader.prototype.loadLayout = function (xmlFile, rootNode, onSuccess, onError) {
298
+ var _this = this;
299
+ if (onSuccess === void 0) { onSuccess = null; }
300
+ if (onError === void 0) { onError = null; }
283
301
  var xhttp = new XMLHttpRequest();
284
- xhttp.onreadystatechange = function () {
285
- if (xhttp.readyState == 4 && xhttp.status == 200) {
302
+ xhttp.onload = function () {
303
+ if (xhttp.readyState === 4 && xhttp.status === 200) {
286
304
  if (!xhttp.responseXML) {
287
305
  throw "XmlLoader Exception : XML file is malformed or corrupted.";
288
306
  }
289
307
  var xmlDoc = xhttp.responseXML.documentElement;
290
- this._parseXml(xmlDoc.firstChild, rootNode);
291
- this._isLoaded = true;
292
- if (callback) {
293
- callback();
308
+ _this._parseXml(xmlDoc.firstChild, rootNode);
309
+ _this._isLoaded = true;
310
+ if (onSuccess) {
311
+ onSuccess();
294
312
  }
295
313
  }
296
- }.bind(this);
314
+ };
315
+ xhttp.onerror = function () {
316
+ if (onError) {
317
+ onError("an error occurred during loading the layout");
318
+ }
319
+ };
297
320
  xhttp.open("GET", xmlFile, true);
298
321
  xhttp.send();
299
322
  };
323
+ /**
324
+ * Initiates the xml layout loading asynchronously
325
+ * @param xmlFile defines the xml layout to load
326
+ * @param rootNode defines the node / control to use as a parent for the loaded layout controls.
327
+ * @returns Promise
328
+ */
329
+ XmlLoader.prototype.loadLayoutAsync = function (xmlFile, rootNode) {
330
+ return __awaiter(this, void 0, void 0, function () {
331
+ var _this = this;
332
+ return __generator(this, function (_a) {
333
+ return [2 /*return*/, new Promise(function (resolve, reject) {
334
+ _this.loadLayout(xmlFile, rootNode, resolve, reject);
335
+ })];
336
+ });
337
+ });
338
+ };
300
339
  return XmlLoader;
301
340
  }());
302
341
  export { XmlLoader };
@@ -1 +1 @@
1
- {"version":3,"file":"xmlLoader.js","sourceRoot":"","sources":["../../../sourceES6/gui/src/2D/xmlLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { _TypeStore } from '@babylonjs/core/Misc/typeStore';\r\n\r\n/**\r\n* Class used to load GUI via XML.\r\n*/\r\nexport class XmlLoader {\r\n private _nodes: any = {};\r\n\r\n private _nodeTypes: any = {\r\n element: 1,\r\n attribute: 2,\r\n text: 3\r\n };\r\n\r\n private _isLoaded: boolean = false;\r\n\r\n private _objectAttributes: any = {\r\n \"textHorizontalAlignment\": 1,\r\n \"textVerticalAlignment\": 2,\r\n \"horizontalAlignment\": 3,\r\n \"verticalAlignment\": 4,\r\n \"stretch\": 5,\r\n };\r\n\r\n private _parentClass: any;\r\n\r\n /**\r\n * Create a new xml loader\r\n * @param parentClass Sets the class context. Used when the loader is instanced inside a class and not in a global context\r\n */\r\n constructor(parentClass = null) {\r\n if (parentClass) {\r\n this._parentClass = parentClass;\r\n }\r\n }\r\n\r\n private _getChainElement(attributeValue: any): any {\r\n let element: any = window;\r\n\r\n if (this._parentClass) {\r\n element = this._parentClass;\r\n }\r\n let value = attributeValue;\r\n value = value.split(\".\");\r\n\r\n for (let i = 0; i < value.length; i++) {\r\n element = element[value[i]];\r\n }\r\n return element;\r\n\r\n }\r\n\r\n private _getClassAttribute(attributeName: string): any {\r\n const attribute = attributeName.split(\".\");\r\n const className = _TypeStore.GetClass(\"BABYLON.GUI.\" + attribute[0]);\r\n return className[attribute[1]];\r\n }\r\n\r\n private _createGuiElement(node: any, parent: any, linkParent: boolean = true): void {\r\n try {\r\n let className = _TypeStore.GetClass(\"BABYLON.GUI.\" + node.nodeName);\r\n let guiNode = new className();\r\n\r\n if (parent && linkParent) {\r\n parent.addControl(guiNode);\r\n }\r\n\r\n for (let i = 0; i < node.attributes.length; i++) {\r\n\r\n if (node.attributes[i].name.toLowerCase().includes(\"datasource\")) {\r\n continue;\r\n }\r\n\r\n if (node.attributes[i].name.toLowerCase().includes(\"observable\")) {\r\n\r\n let element = this._getChainElement(node.attributes[i].value);\r\n guiNode[node.attributes[i].name].add(element);\r\n\r\n continue;\r\n } else if (node.attributes[i].name == \"linkWithMesh\") {\r\n if (this._parentClass) {\r\n guiNode.linkWithMesh(this._parentClass[node.attributes[i].value]);\r\n } else {\r\n guiNode.linkWithMesh(window[node.attributes[i].value]);\r\n }\r\n } else if (node.attributes[i].value.startsWith(\"{{\") && node.attributes[i].value.endsWith(\"}}\")) {\r\n let element = this._getChainElement(node.attributes[i].value.substring(2, node.attributes[i].value.length - 2));\r\n guiNode[node.attributes[i].name] = element;\r\n } else if (!this._objectAttributes[node.attributes[i].name]) {\r\n if (node.attributes[i].value == \"true\" || node.attributes[i].value == \"false\") {\r\n guiNode[node.attributes[i].name] = (node.attributes[i].value == 'true');\r\n } else {\r\n guiNode[node.attributes[i].name] = !isNaN(Number(node.attributes[i].value)) ? Number(node.attributes[i].value) : node.attributes[i].value;\r\n }\r\n } else {\r\n guiNode[node.attributes[i].name] = this._getClassAttribute(node.attributes[i].value);\r\n }\r\n }\r\n\r\n if (!node.attributes.getNamedItem(\"id\")) {\r\n this._nodes[node.nodeName + Object.keys(this._nodes).length + \"_gen\"] = guiNode;\r\n return guiNode;\r\n }\r\n\r\n let id = node.attributes.getNamedItem(\"id\").value;\r\n if (id.startsWith(\"{{\") && id.endsWith(\"}}\")) {\r\n id = this._getChainElement(id.substring(2, id.length - 2));\r\n }\r\n\r\n if (!this._nodes[id]) {\r\n this._nodes[id] = guiNode;\r\n } else {\r\n throw \"XmlLoader Exception : Duplicate ID, every element should have an unique ID attribute\";\r\n }\r\n return guiNode;\r\n\r\n } catch (e) {\r\n throw \"XmlLoader Exception : Error parsing Control \" + node.nodeName + \",\" + e + \".\";\r\n }\r\n }\r\n\r\n private _parseGrid(node: any, guiNode: any, parent: any): void {\r\n let width;\r\n let height;\r\n let columns;\r\n let rows = node.children;\r\n let cells;\r\n let isPixel = false;\r\n let cellNode;\r\n let rowNumber = -1;\r\n let columnNumber = -1;\r\n let totalColumnsNumber = 0;\r\n\r\n for (let i = 0; i < rows.length; i++) {\r\n if (rows[i].nodeType != this._nodeTypes.element) {\r\n continue;\r\n }\r\n if (rows[i].nodeName != \"Row\") {\r\n throw \"XmlLoader Exception : Expecting Row node, received \" + rows[i].nodeName;\r\n }\r\n rowNumber += 1;\r\n columns = rows[i].children;\r\n\r\n if (!rows[i].attributes.getNamedItem(\"height\")) {\r\n throw \"XmlLoader Exception : Height must be defined for grid rows\";\r\n }\r\n height = Number(rows[i].attributes.getNamedItem(\"height\").nodeValue);\r\n isPixel = rows[i].attributes.getNamedItem(\"isPixel\") ? JSON.parse(rows[i].attributes.getNamedItem(\"isPixel\").nodeValue) : false;\r\n guiNode.addRowDefinition(height, isPixel);\r\n\r\n for (let j = 0; j < columns.length; j++) {\r\n if (columns[j].nodeType != this._nodeTypes.element) {\r\n continue;\r\n }\r\n if (columns[j].nodeName != \"Column\") {\r\n throw \"XmlLoader Exception : Expecting Column node, received \" + columns[j].nodeName;\r\n }\r\n columnNumber += 1;\r\n if (rowNumber > 0 && columnNumber > totalColumnsNumber) {\r\n throw \"XmlLoader Exception : In the Grid element, the number of columns is defined in the first row, do not add more columns in the subsequent rows.\";\r\n }\r\n\r\n if (rowNumber == 0) {\r\n if (!columns[j].attributes.getNamedItem(\"width\")) {\r\n throw \"XmlLoader Exception : Width must be defined for all the grid columns in the first row\";\r\n }\r\n width = Number(columns[j].attributes.getNamedItem(\"width\").nodeValue);\r\n isPixel = columns[j].attributes.getNamedItem(\"isPixel\") ? JSON.parse(columns[j].attributes.getNamedItem(\"isPixel\").nodeValue) : false;\r\n guiNode.addColumnDefinition(width, isPixel);\r\n }\r\n\r\n cells = columns[j].children;\r\n\r\n for (let k = 0; k < cells.length; k++) {\r\n if (cells[k].nodeType != this._nodeTypes.element) {\r\n continue;\r\n }\r\n cellNode = this._createGuiElement(cells[k], guiNode, false);\r\n guiNode.addControl(cellNode, rowNumber, columnNumber);\r\n if (cells[k].firstChild) {\r\n this._parseXml(cells[k].firstChild, cellNode);\r\n }\r\n }\r\n }\r\n if (rowNumber == 0) {\r\n totalColumnsNumber = columnNumber;\r\n }\r\n columnNumber = -1;\r\n }\r\n\r\n if (node.nextSibling) {\r\n this._parseXml(node.nextSibling, parent);\r\n }\r\n }\r\n\r\n private _parseElement(node: any, guiNode: any, parent: any): void {\r\n\r\n if (node.firstChild) {\r\n this._parseXml(node.firstChild, guiNode);\r\n }\r\n\r\n if (node.nextSibling) {\r\n this._parseXml(node.nextSibling, parent);\r\n }\r\n }\r\n\r\n private _prepareSourceElement(node: any, guiNode: any, variable: any, source: any, iterator: any): void {\r\n if (this._parentClass) {\r\n this._parentClass[variable] = source[iterator];\r\n } else {\r\n window[variable] = source[iterator];\r\n }\r\n\r\n if (node.firstChild) {\r\n this._parseXml(node.firstChild, guiNode, true);\r\n }\r\n }\r\n\r\n private _parseElementsFromSource(node: any, guiNode: any, parent: any): void {\r\n let dataSource = node.attributes.getNamedItem(\"dataSource\").value;\r\n if (!dataSource.includes(\" in \")) {\r\n throw \"XmlLoader Exception : Malformed XML, Data Source must include an in\";\r\n } else {\r\n let isArray = true;\r\n let splittedSource = dataSource.split(\" in \");\r\n if (splittedSource.length < 2) {\r\n throw \"XmlLoader Exception : Malformed XML, Data Source must an iterator and a source\";\r\n }\r\n let source = splittedSource[1];\r\n if (source.startsWith(\"{\") && source.endsWith(\"}\")) {\r\n isArray = false;\r\n }\r\n\r\n if (!isArray || (source.startsWith(\"[\") && source.endsWith(\"]\"))) {\r\n source = source.substring(1, source.length - 1);\r\n }\r\n\r\n if (this._parentClass) {\r\n source = this._parentClass[source];\r\n } else {\r\n source = window[source];\r\n }\r\n\r\n if (isArray) {\r\n for (let i = 0; i < source.length; i++) {\r\n this._prepareSourceElement(node, guiNode, splittedSource[0], source, i);\r\n }\r\n } else {\r\n for (let i in source) {\r\n this._prepareSourceElement(node, guiNode, splittedSource[0], source, i);\r\n }\r\n }\r\n\r\n if (node.nextSibling) {\r\n this._parseXml(node.nextSibling, parent);\r\n }\r\n }\r\n }\r\n\r\n private _parseXml(node: any, parent: any, generated: boolean = false): void {\r\n\r\n if (node.nodeType != this._nodeTypes.element) {\r\n if (node.nextSibling) {\r\n this._parseXml(node.nextSibling, parent, generated);\r\n }\r\n return;\r\n }\r\n\r\n if (generated) {\r\n node.setAttribute(\"id\", parent.id + (parent._children.length + 1));\r\n }\r\n\r\n let guiNode = this._createGuiElement(node, parent);\r\n\r\n if (node.nodeName == \"Grid\") {\r\n this._parseGrid(node, guiNode, parent);\r\n } else if (!node.attributes.getNamedItem(\"dataSource\")) {\r\n this._parseElement(node, guiNode, parent);\r\n } else {\r\n this._parseElementsFromSource(node, guiNode, parent);\r\n }\r\n }\r\n\r\n /**\r\n * Gets if the loading has finished.\r\n * @returns whether the loading has finished or not\r\n */\r\n public isLoaded(): boolean {\r\n return this._isLoaded;\r\n }\r\n\r\n /**\r\n * Gets a loaded node / control by id.\r\n * @param id the Controls id set in the xml\r\n * @returns element of type Control\r\n */\r\n public getNodeById(id: string): any {\r\n return this._nodes[id];\r\n }\r\n\r\n /**\r\n * Gets all loaded nodes / controls\r\n * @returns Array of controls\r\n */\r\n public getNodes(): any {\r\n return this._nodes;\r\n }\r\n\r\n /**\r\n * Initiates the xml layout loading\r\n * @param xmlFile defines the xml layout to load\r\n * @param rootNode defines the node / control to use as a parent for the loaded layout controls.\r\n * @param callback defines the callback called on layout load.\r\n */\r\n public loadLayout(xmlFile: any, rootNode: any, callback: any): void {\r\n let xhttp = new XMLHttpRequest();\r\n xhttp.onreadystatechange = function(this: XmlLoader) {\r\n if (xhttp.readyState == 4 && xhttp.status == 200) {\r\n if (!xhttp.responseXML) {\r\n throw \"XmlLoader Exception : XML file is malformed or corrupted.\";\r\n }\r\n\r\n let xmlDoc = xhttp.responseXML.documentElement;\r\n this._parseXml(xmlDoc.firstChild, rootNode);\r\n this._isLoaded = true;\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n }.bind(this);\r\n\r\n xhttp.open(\"GET\", xmlFile, true);\r\n xhttp.send();\r\n }\r\n}"]}
1
+ {"version":3,"file":"xmlLoader.js","sourceRoot":"","sources":["../../../sourceES6/gui/src/2D/xmlLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { GetClass } from '@babylonjs/core/Misc/typeStore';\r\nimport { Nullable } from '@babylonjs/core/types';\r\n\r\n/**\r\n* Class used to load GUI via XML.\r\n*/\r\nexport class XmlLoader {\r\n private _nodes: any = {};\r\n\r\n private _nodeTypes: any = {\r\n element: 1,\r\n attribute: 2,\r\n text: 3\r\n };\r\n\r\n private _isLoaded: boolean = false;\r\n\r\n private _objectAttributes: any = {\r\n \"textHorizontalAlignment\": 1,\r\n \"textVerticalAlignment\": 2,\r\n \"horizontalAlignment\": 3,\r\n \"verticalAlignment\": 4,\r\n \"stretch\": 5,\r\n };\r\n\r\n private _rootNode: any;\r\n\r\n private _parentClass: any;\r\n\r\n /**\r\n * Create a new xml loader\r\n * @param parentClass Sets the class context. Used when the loader is instanced inside a class and not in a global context\r\n */\r\n constructor(parentClass: any = null) {\r\n if (parentClass) {\r\n this._parentClass = parentClass;\r\n }\r\n }\r\n\r\n private _getChainElement(attributeValue: any): any {\r\n\r\n let element: any = window;\r\n\r\n if (this._parentClass) {\r\n element = this._parentClass;\r\n }\r\n let value = attributeValue;\r\n value = value.split(\".\");\r\n\r\n for (let i = 0; i < value.length; i++) {\r\n element = element[value[i]];\r\n }\r\n return element;\r\n }\r\n\r\n private _getClassAttribute(attributeName: string): any {\r\n const attribute = attributeName.split(\".\");\r\n const className = GetClass(\"BABYLON.GUI.\" + attribute[0]);\r\n return className[attribute[1]];\r\n }\r\n\r\n private _createGuiElement(node: any, parent: any, linkParent: boolean = true): void {\r\n\r\n try {\r\n let className = GetClass(\"BABYLON.GUI.\" + node.nodeName);\r\n let guiNode = new className();\r\n\r\n if (parent && linkParent) {\r\n parent.addControl(guiNode);\r\n }\r\n\r\n for (let i = 0; i < node.attributes.length; i++) {\r\n\r\n if (node.attributes[i].name.toLowerCase().includes(\"datasource\")) {\r\n continue;\r\n }\r\n\r\n if (node.attributes[i].name.toLowerCase().includes(\"observable\")) {\r\n\r\n let element = this._getChainElement(node.attributes[i].value);\r\n guiNode[node.attributes[i].name].add(element);\r\n\r\n continue;\r\n } else if (node.attributes[i].name == \"linkWithMesh\") {\r\n if (this._parentClass) {\r\n guiNode.linkWithMesh(this._parentClass[node.attributes[i].value]);\r\n } else {\r\n guiNode.linkWithMesh(window[node.attributes[i].value]);\r\n }\r\n } else if (node.attributes[i].value.startsWith(\"{{\") && node.attributes[i].value.endsWith(\"}}\")) {\r\n let element = this._getChainElement(node.attributes[i].value.substring(2, node.attributes[i].value.length - 2));\r\n guiNode[node.attributes[i].name] = element;\r\n } else if (!this._objectAttributes[node.attributes[i].name]) {\r\n if (node.attributes[i].value == \"true\" || node.attributes[i].value == \"false\") {\r\n guiNode[node.attributes[i].name] = (node.attributes[i].value == 'true');\r\n } else {\r\n guiNode[node.attributes[i].name] = !isNaN(Number(node.attributes[i].value)) ? Number(node.attributes[i].value) : node.attributes[i].value;\r\n }\r\n } else {\r\n guiNode[node.attributes[i].name] = this._getClassAttribute(node.attributes[i].value);\r\n }\r\n }\r\n\r\n if (!node.attributes.getNamedItem(\"id\")) {\r\n this._nodes[node.nodeName + Object.keys(this._nodes).length + \"_gen\"] = guiNode;\r\n return guiNode;\r\n }\r\n\r\n let id = node.attributes.getNamedItem(\"id\").value;\r\n if (id.startsWith(\"{{\") && id.endsWith(\"}}\")) {\r\n id = this._getChainElement(id.substring(2, id.length - 2));\r\n }\r\n\r\n if (!this._nodes[id]) {\r\n this._nodes[id] = guiNode;\r\n } else {\r\n throw \"XmlLoader Exception : Duplicate ID, every element should have an unique ID attribute\";\r\n }\r\n return guiNode;\r\n\r\n } catch (exception) {\r\n throw \"XmlLoader Exception : Error parsing Control \" + node.nodeName + \",\" + exception + \".\";\r\n }\r\n }\r\n\r\n private _parseGrid(node: any, guiNode: any, parent: any): void {\r\n let width;\r\n let height;\r\n let columns;\r\n let rows = node.children;\r\n let cells;\r\n let isPixel = false;\r\n let cellNode;\r\n let rowNumber = -1;\r\n let columnNumber = -1;\r\n let totalColumnsNumber = 0;\r\n\r\n for (let i = 0; i < rows.length; i++) {\r\n if (rows[i].nodeType != this._nodeTypes.element) {\r\n continue;\r\n }\r\n if (rows[i].nodeName != \"Row\") {\r\n throw \"XmlLoader Exception : Expecting Row node, received \" + rows[i].nodeName;\r\n }\r\n rowNumber += 1;\r\n columns = rows[i].children;\r\n\r\n if (!rows[i].attributes.getNamedItem(\"height\")) {\r\n throw \"XmlLoader Exception : Height must be defined for grid rows\";\r\n }\r\n height = Number(rows[i].attributes.getNamedItem(\"height\").nodeValue);\r\n isPixel = rows[i].attributes.getNamedItem(\"isPixel\") ? JSON.parse(rows[i].attributes.getNamedItem(\"isPixel\").nodeValue) : false;\r\n guiNode.addRowDefinition(height, isPixel);\r\n\r\n for (let j = 0; j < columns.length; j++) {\r\n if (columns[j].nodeType != this._nodeTypes.element) {\r\n continue;\r\n }\r\n if (columns[j].nodeName != \"Column\") {\r\n throw \"XmlLoader Exception : Expecting Column node, received \" + columns[j].nodeName;\r\n }\r\n columnNumber += 1;\r\n if (rowNumber > 0 && columnNumber > totalColumnsNumber) {\r\n throw \"XmlLoader Exception : In the Grid element, the number of columns is defined in the first row, do not add more columns in the subsequent rows.\";\r\n }\r\n\r\n if (rowNumber == 0) {\r\n if (!columns[j].attributes.getNamedItem(\"width\")) {\r\n throw \"XmlLoader Exception : Width must be defined for all the grid columns in the first row\";\r\n }\r\n width = Number(columns[j].attributes.getNamedItem(\"width\").nodeValue);\r\n isPixel = columns[j].attributes.getNamedItem(\"isPixel\") ? JSON.parse(columns[j].attributes.getNamedItem(\"isPixel\").nodeValue) : false;\r\n guiNode.addColumnDefinition(width, isPixel);\r\n }\r\n\r\n cells = columns[j].children;\r\n\r\n for (let k = 0; k < cells.length; k++) {\r\n if (cells[k].nodeType != this._nodeTypes.element) {\r\n continue;\r\n }\r\n cellNode = this._createGuiElement(cells[k], guiNode, false);\r\n guiNode.addControl(cellNode, rowNumber, columnNumber);\r\n if (cells[k].firstChild) {\r\n this._parseXml(cells[k].firstChild, cellNode);\r\n }\r\n }\r\n }\r\n if (rowNumber == 0) {\r\n totalColumnsNumber = columnNumber;\r\n }\r\n columnNumber = -1;\r\n }\r\n\r\n if (node.nextSibling) {\r\n this._parseXml(node.nextSibling, parent);\r\n }\r\n }\r\n\r\n private _parseElement(node: any, guiNode: any, parent: any): void {\r\n\r\n if (node.firstChild) {\r\n this._parseXml(node.firstChild, guiNode);\r\n }\r\n\r\n if (node.nextSibling) {\r\n this._parseXml(node.nextSibling, parent);\r\n }\r\n }\r\n\r\n private _prepareSourceElement(node: any, guiNode: any, variable: any, source: any, iterator: any): void {\r\n if (this._parentClass) {\r\n this._parentClass[variable] = source[iterator];\r\n } else {\r\n window[variable] = source[iterator];\r\n }\r\n\r\n if (node.firstChild) {\r\n this._parseXml(node.firstChild, guiNode, true);\r\n }\r\n }\r\n\r\n private _parseElementsFromSource(node: any, guiNode: any, parent: any): void {\r\n\r\n let dataSource = node.attributes.getNamedItem(\"dataSource\").value;\r\n\r\n if (!dataSource.includes(\" in \")) {\r\n throw \"XmlLoader Exception : Malformed XML, Data Source must include an in\";\r\n } else {\r\n let isArray = true;\r\n let splittedSource = dataSource.split(\" in \");\r\n if (splittedSource.length < 2) {\r\n throw \"XmlLoader Exception : Malformed XML, Data Source must have an iterator and a source\";\r\n }\r\n let source = splittedSource[1];\r\n if (source.startsWith(\"{\") && source.endsWith(\"}\")) {\r\n isArray = false;\r\n }\r\n\r\n if (!isArray || (source.startsWith(\"[\") && source.endsWith(\"]\"))) {\r\n source = source.substring(1, source.length - 1);\r\n }\r\n\r\n if (this._parentClass) {\r\n source = this._parentClass[source];\r\n } else {\r\n source = window[source];\r\n }\r\n\r\n if (isArray) {\r\n for (let i = 0; i < source.length; i++) {\r\n this._prepareSourceElement(node, guiNode, splittedSource[0], source, i);\r\n }\r\n } else {\r\n for (let i in source) {\r\n this._prepareSourceElement(node, guiNode, splittedSource[0], source, i);\r\n }\r\n }\r\n\r\n if (node.nextSibling) {\r\n this._parseXml(node.nextSibling, parent);\r\n }\r\n }\r\n }\r\n\r\n private _parseXml(node: any, parent: any, generated: boolean = false): void {\r\n\r\n if (node.nodeType != this._nodeTypes.element) {\r\n if (node.nextSibling) {\r\n this._parseXml(node.nextSibling, parent, generated);\r\n }\r\n return;\r\n }\r\n\r\n if (generated) {\r\n node.setAttribute(\"id\", parent.id + (parent._children.length + 1));\r\n }\r\n\r\n let guiNode = this._createGuiElement(node, parent);\r\n\r\n if (!this._rootNode) {\r\n this._rootNode = guiNode;\r\n }\r\n\r\n if (node.nodeName == \"Grid\") {\r\n this._parseGrid(node, guiNode, parent);\r\n } else if (!node.attributes.getNamedItem(\"dataSource\")) {\r\n this._parseElement(node, guiNode, parent);\r\n } else {\r\n this._parseElementsFromSource(node, guiNode, parent);\r\n }\r\n }\r\n\r\n /**\r\n * Gets if the loading has finished.\r\n * @returns whether the loading has finished or not\r\n */\r\n public isLoaded(): boolean {\r\n return this._isLoaded;\r\n }\r\n\r\n /**\r\n * Gets a loaded node / control by id.\r\n * @param id the Controls id set in the xml\r\n * @returns element of type Control\r\n */\r\n public getNodeById(id: string): any {\r\n return this._nodes[id];\r\n }\r\n\r\n /**\r\n * Gets all loaded nodes / controls\r\n * @returns Array of controls\r\n */\r\n public getNodes(): any {\r\n return this._nodes;\r\n }\r\n /**\r\n * Disposes the loaded layout\r\n */\r\n public dispose(): void {\r\n if (this._rootNode) {\r\n this._rootNode.dispose();\r\n this._rootNode = null;\r\n this._nodes = {};\r\n }\r\n }\r\n\r\n /**\r\n * Initiates the xml layout loading\r\n * @param xmlFile defines the xml layout to load\r\n * @param rootNode defines the node / control to use as a parent for the loaded layout controls.\r\n * @param onSuccess defines the callback called on layout load successfully.\r\n * @param onError defines the callback called on layout load failure.\r\n */\r\n public loadLayout(xmlFile: any, rootNode: any, onSuccess: Nullable<() => void> = null, onError: Nullable<(error: string) => void> = null): void {\r\n\r\n let xhttp = new XMLHttpRequest();\r\n xhttp.onload = () => {\r\n if (xhttp.readyState === 4 && xhttp.status === 200) {\r\n if (!xhttp.responseXML) {\r\n throw \"XmlLoader Exception : XML file is malformed or corrupted.\";\r\n }\r\n\r\n let xmlDoc = xhttp.responseXML.documentElement;\r\n this._parseXml(xmlDoc.firstChild, rootNode);\r\n this._isLoaded = true;\r\n\r\n if (onSuccess) {\r\n onSuccess();\r\n }\r\n }\r\n };\r\n\r\n xhttp.onerror = function () {\r\n if (onError) {\r\n onError(\"an error occurred during loading the layout\");\r\n }\r\n };\r\n\r\n xhttp.open(\"GET\", xmlFile, true);\r\n xhttp.send();\r\n }\r\n /**\r\n * Initiates the xml layout loading asynchronously\r\n * @param xmlFile defines the xml layout to load\r\n * @param rootNode defines the node / control to use as a parent for the loaded layout controls.\r\n * @returns Promise\r\n */\r\n public async loadLayoutAsync(xmlFile: any, rootNode: any): Promise<any> {\r\n\r\n return new Promise((resolve: any, reject: any) => {\r\n this.loadLayout(xmlFile, rootNode, resolve, reject);\r\n });\r\n }\r\n}"]}
@@ -0,0 +1,73 @@
1
+ import { Behavior } from "@babylonjs/core/Behaviors/behavior";
2
+ import { FollowBehavior } from "@babylonjs/core/Behaviors/Meshes/followBehavior";
3
+ import { SixDofDragBehavior } from "@babylonjs/core/Behaviors/Meshes/sixDofDragBehavior";
4
+ import { Mesh } from "@babylonjs/core/Meshes/mesh";
5
+ import { Nullable } from "@babylonjs/core/types";
6
+ import { SurfaceMagnetismBehavior } from "@babylonjs/core/Behaviors/Meshes/surfaceMagnetismBehavior";
7
+ import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh";
8
+ /**
9
+ * Default behavior for 3D UI elements.
10
+ * Handles a FollowBehavior, SixDofBehavior and SurfaceMagnetismBehavior
11
+ * @since 5.0.0
12
+ */
13
+ export declare class DefaultBehavior implements Behavior<Mesh> {
14
+ private _scene;
15
+ private _followBehavior;
16
+ private _sixDofDragBehavior;
17
+ private _surfaceMagnetismBehavior;
18
+ private _onBeforeRenderObserver;
19
+ private _onDragObserver;
20
+ /**
21
+ * Instantiates the default behavior
22
+ */
23
+ constructor();
24
+ /**
25
+ * Attached node of this behavior
26
+ */
27
+ attachedNode: Nullable<Mesh>;
28
+ /**
29
+ * The name of the behavior
30
+ */
31
+ get name(): string;
32
+ /**
33
+ * The follow behavior
34
+ */
35
+ get followBehavior(): FollowBehavior;
36
+ /**
37
+ * The six DoF drag behavior
38
+ */
39
+ get sixDofDragBehavior(): SixDofDragBehavior;
40
+ /**
41
+ * The surface magnetism behavior
42
+ */
43
+ get surfaceMagnetismBehavior(): SurfaceMagnetismBehavior;
44
+ /**
45
+ * Enables the follow behavior
46
+ */
47
+ followBehaviorEnabled: boolean;
48
+ /**
49
+ * Enables the six DoF drag behavior
50
+ */
51
+ sixDofDragBehaviorEnabled: boolean;
52
+ /**
53
+ * Enables the surface magnetism behavior
54
+ */
55
+ surfaceMagnetismBehaviorEnabled: boolean;
56
+ /**
57
+ * Initializes the behavior
58
+ */
59
+ init(): void;
60
+ /**
61
+ * Attaches the default behavior
62
+ * @param ownerMesh The top level mesh
63
+ * @param draggablesMeshes Descendant meshes that can be used for dragging the owner mesh
64
+ * @param sceneUnderstandingMeshes Meshes from the scene understanding that will be used for surface magnetism
65
+ */
66
+ attach(ownerMesh: Mesh, draggablesMeshes?: Mesh[], sceneUnderstandingMeshes?: AbstractMesh[]): void;
67
+ /**
68
+ * Detaches the behavior from the mesh
69
+ */
70
+ detach(): void;
71
+ private _addObservables;
72
+ private _removeObservables;
73
+ }
@@ -0,0 +1,122 @@
1
+ import { FollowBehavior } from "@babylonjs/core/Behaviors/Meshes/followBehavior.js";
2
+ import { SixDofDragBehavior } from "@babylonjs/core/Behaviors/Meshes/sixDofDragBehavior.js";
3
+ import { SurfaceMagnetismBehavior } from "@babylonjs/core/Behaviors/Meshes/surfaceMagnetismBehavior.js";
4
+ /**
5
+ * Default behavior for 3D UI elements.
6
+ * Handles a FollowBehavior, SixDofBehavior and SurfaceMagnetismBehavior
7
+ * @since 5.0.0
8
+ */
9
+ var DefaultBehavior = /** @class */ (function () {
10
+ /**
11
+ * Instantiates the default behavior
12
+ */
13
+ function DefaultBehavior() {
14
+ /**
15
+ * Enables the follow behavior
16
+ */
17
+ this.followBehaviorEnabled = false;
18
+ /**
19
+ * Enables the six DoF drag behavior
20
+ */
21
+ this.sixDofDragBehaviorEnabled = true;
22
+ /**
23
+ * Enables the surface magnetism behavior
24
+ */
25
+ this.surfaceMagnetismBehaviorEnabled = true;
26
+ this._followBehavior = new FollowBehavior();
27
+ this._sixDofDragBehavior = new SixDofDragBehavior();
28
+ this._surfaceMagnetismBehavior = new SurfaceMagnetismBehavior();
29
+ }
30
+ Object.defineProperty(DefaultBehavior.prototype, "name", {
31
+ /**
32
+ * The name of the behavior
33
+ */
34
+ get: function () {
35
+ return "Default";
36
+ },
37
+ enumerable: false,
38
+ configurable: true
39
+ });
40
+ Object.defineProperty(DefaultBehavior.prototype, "followBehavior", {
41
+ /**
42
+ * The follow behavior
43
+ */
44
+ get: function () {
45
+ return this._followBehavior;
46
+ },
47
+ enumerable: false,
48
+ configurable: true
49
+ });
50
+ Object.defineProperty(DefaultBehavior.prototype, "sixDofDragBehavior", {
51
+ /**
52
+ * The six DoF drag behavior
53
+ */
54
+ get: function () {
55
+ return this._sixDofDragBehavior;
56
+ },
57
+ enumerable: false,
58
+ configurable: true
59
+ });
60
+ Object.defineProperty(DefaultBehavior.prototype, "surfaceMagnetismBehavior", {
61
+ /**
62
+ * The surface magnetism behavior
63
+ */
64
+ get: function () {
65
+ return this._surfaceMagnetismBehavior;
66
+ },
67
+ enumerable: false,
68
+ configurable: true
69
+ });
70
+ /**
71
+ * Initializes the behavior
72
+ */
73
+ DefaultBehavior.prototype.init = function () { };
74
+ /**
75
+ * Attaches the default behavior
76
+ * @param ownerMesh The top level mesh
77
+ * @param draggablesMeshes Descendant meshes that can be used for dragging the owner mesh
78
+ * @param sceneUnderstandingMeshes Meshes from the scene understanding that will be used for surface magnetism
79
+ */
80
+ DefaultBehavior.prototype.attach = function (ownerMesh, draggablesMeshes, sceneUnderstandingMeshes) {
81
+ this._scene = ownerMesh.getScene();
82
+ this.attachedNode = ownerMesh;
83
+ this._addObservables();
84
+ // Since our observables are bound before the child behaviors', ours are called first
85
+ this._followBehavior.attach(ownerMesh);
86
+ this._sixDofDragBehavior.attach(ownerMesh);
87
+ this._sixDofDragBehavior.draggableMeshes = draggablesMeshes || null;
88
+ this._sixDofDragBehavior.faceCameraOnDragStart = true;
89
+ this._surfaceMagnetismBehavior.attach(ownerMesh, this._scene);
90
+ if (sceneUnderstandingMeshes) {
91
+ this._surfaceMagnetismBehavior.meshes = sceneUnderstandingMeshes;
92
+ }
93
+ // We disable this behavior because we will handle pose changing event manually with sixDofDragBehavior
94
+ this._surfaceMagnetismBehavior.enabled = false;
95
+ };
96
+ /**
97
+ * Detaches the behavior from the mesh
98
+ */
99
+ DefaultBehavior.prototype.detach = function () {
100
+ this.attachedNode = null;
101
+ this._removeObservables();
102
+ this._followBehavior.detach();
103
+ this._sixDofDragBehavior.detach();
104
+ this._surfaceMagnetismBehavior.detach();
105
+ };
106
+ DefaultBehavior.prototype._addObservables = function () {
107
+ var _this = this;
108
+ this._onBeforeRenderObserver = this._scene.onBeforeRenderObservable.add(function () {
109
+ _this._followBehavior._enabled = !_this._sixDofDragBehavior.isMoving && _this.followBehaviorEnabled;
110
+ });
111
+ this._onDragObserver = this._sixDofDragBehavior.onDragObservable.add(function (event) {
112
+ _this._sixDofDragBehavior.disableMovement = _this._surfaceMagnetismBehavior.findAndUpdateTarget(event.pickInfo);
113
+ });
114
+ };
115
+ DefaultBehavior.prototype._removeObservables = function () {
116
+ this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);
117
+ this._sixDofDragBehavior.onDragObservable.remove(this._onDragObserver);
118
+ };
119
+ return DefaultBehavior;
120
+ }());
121
+ export { DefaultBehavior };
122
+ //# sourceMappingURL=defaultBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultBehavior.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/behaviors/defaultBehavior.ts"],"names":[],"mappings":"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","sourcesContent":["import { Behavior } from \"@babylonjs/core/Behaviors/behavior\";\r\nimport { FollowBehavior } from \"@babylonjs/core/Behaviors/Meshes/followBehavior\";\r\nimport { SixDofDragBehavior } from \"@babylonjs/core/Behaviors/Meshes/sixDofDragBehavior\";\r\nimport { Scene } from \"@babylonjs/core/scene\";\r\nimport { Mesh } from \"@babylonjs/core/Meshes/mesh\";\r\nimport { Observer } from \"@babylonjs/core/Misc/observable\";\r\nimport { Nullable } from \"@babylonjs/core/types\";\r\nimport { SurfaceMagnetismBehavior } from \"@babylonjs/core/Behaviors/Meshes/surfaceMagnetismBehavior\";\r\nimport { Vector3 } from \"@babylonjs/core/Maths/math.vector\";\r\nimport { PickingInfo } from \"@babylonjs/core/Collisions/pickingInfo\";\r\nimport { AbstractMesh } from \"@babylonjs/core/Meshes/abstractMesh\";\r\n\r\n/**\r\n * Default behavior for 3D UI elements.\r\n * Handles a FollowBehavior, SixDofBehavior and SurfaceMagnetismBehavior\r\n * @since 5.0.0\r\n */\r\nexport class DefaultBehavior implements Behavior<Mesh> {\r\n private _scene: Scene;\r\n private _followBehavior: FollowBehavior;\r\n private _sixDofDragBehavior: SixDofDragBehavior;\r\n private _surfaceMagnetismBehavior: SurfaceMagnetismBehavior;\r\n private _onBeforeRenderObserver: Nullable<Observer<Scene>>;\r\n private _onDragObserver: Nullable<Observer<{ delta: Vector3; position: Vector3; pickInfo: PickingInfo }>>;\r\n\r\n /**\r\n * Instantiates the default behavior\r\n */\r\n constructor() {\r\n this._followBehavior = new FollowBehavior();\r\n this._sixDofDragBehavior = new SixDofDragBehavior();\r\n this._surfaceMagnetismBehavior = new SurfaceMagnetismBehavior();\r\n }\r\n\r\n /**\r\n * Attached node of this behavior\r\n */\r\n public attachedNode: Nullable<Mesh>;\r\n\r\n /**\r\n * The name of the behavior\r\n */\r\n public get name(): string {\r\n return \"Default\";\r\n }\r\n\r\n /**\r\n * The follow behavior\r\n */\r\n public get followBehavior(): FollowBehavior {\r\n return this._followBehavior;\r\n }\r\n\r\n /**\r\n * The six DoF drag behavior\r\n */\r\n public get sixDofDragBehavior(): SixDofDragBehavior {\r\n return this._sixDofDragBehavior;\r\n }\r\n\r\n /**\r\n * The surface magnetism behavior\r\n */\r\n public get surfaceMagnetismBehavior(): SurfaceMagnetismBehavior {\r\n return this._surfaceMagnetismBehavior;\r\n }\r\n\r\n /**\r\n * Enables the follow behavior\r\n */\r\n public followBehaviorEnabled: boolean = false;\r\n\r\n /**\r\n * Enables the six DoF drag behavior\r\n */\r\n public sixDofDragBehaviorEnabled: boolean = true;\r\n\r\n /**\r\n * Enables the surface magnetism behavior\r\n */\r\n public surfaceMagnetismBehaviorEnabled: boolean = true;\r\n\r\n /**\r\n * Initializes the behavior\r\n */\r\n public init() { }\r\n\r\n /**\r\n * Attaches the default behavior\r\n * @param ownerMesh The top level mesh\r\n * @param draggablesMeshes Descendant meshes that can be used for dragging the owner mesh\r\n * @param sceneUnderstandingMeshes Meshes from the scene understanding that will be used for surface magnetism\r\n */\r\n public attach(ownerMesh: Mesh, draggablesMeshes?: Mesh[], sceneUnderstandingMeshes?: AbstractMesh[]): void {\r\n this._scene = ownerMesh.getScene();\r\n this.attachedNode = ownerMesh;\r\n\r\n this._addObservables();\r\n // Since our observables are bound before the child behaviors', ours are called first\r\n this._followBehavior.attach(ownerMesh);\r\n this._sixDofDragBehavior.attach(ownerMesh);\r\n this._sixDofDragBehavior.draggableMeshes = draggablesMeshes || null;\r\n this._sixDofDragBehavior.faceCameraOnDragStart = true;\r\n this._surfaceMagnetismBehavior.attach(ownerMesh, this._scene);\r\n if (sceneUnderstandingMeshes) {\r\n this._surfaceMagnetismBehavior.meshes = sceneUnderstandingMeshes;\r\n }\r\n\r\n // We disable this behavior because we will handle pose changing event manually with sixDofDragBehavior\r\n this._surfaceMagnetismBehavior.enabled = false;\r\n }\r\n\r\n /**\r\n * Detaches the behavior from the mesh\r\n */\r\n public detach(): void {\r\n this.attachedNode = null;\r\n this._removeObservables();\r\n this._followBehavior.detach();\r\n this._sixDofDragBehavior.detach();\r\n this._surfaceMagnetismBehavior.detach();\r\n }\r\n\r\n private _addObservables() {\r\n this._onBeforeRenderObserver = this._scene.onBeforeRenderObservable.add(() => {\r\n this._followBehavior._enabled = !this._sixDofDragBehavior.isMoving && this.followBehaviorEnabled;\r\n });\r\n this._onDragObserver = this._sixDofDragBehavior.onDragObservable.add((event: { pickInfo: PickingInfo }) => {\r\n this._sixDofDragBehavior.disableMovement = this._surfaceMagnetismBehavior.findAndUpdateTarget(event.pickInfo);\r\n });\r\n }\r\n\r\n private _removeObservables() {\r\n this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n this._sixDofDragBehavior.onDragObservable.remove(this._onDragObserver);\r\n }\r\n}\r\n"]}
@@ -1,10 +1,10 @@
1
1
  import { TransformNode } from "@babylonjs/core/Meshes/transformNode";
2
2
  import { Scene } from "@babylonjs/core/scene";
3
- import { Control3D } from "./control3D";
3
+ import { ContentDisplay3D } from "./contentDisplay3D";
4
4
  /**
5
5
  * Class used as a root to all buttons
6
6
  */
7
- export declare class AbstractButton3D extends Control3D {
7
+ export declare class AbstractButton3D extends ContentDisplay3D {
8
8
  /**
9
9
  * Creates a new button
10
10
  * @param name defines the control name
@@ -1,6 +1,6 @@
1
1
  import { __extends } from "tslib";
2
- import { TransformNode } from "@babylonjs/core/Meshes/transformNode";
3
- import { Control3D } from "./control3D";
2
+ import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
3
+ import { ContentDisplay3D } from "./contentDisplay3D.js";
4
4
  /**
5
5
  * Class used as a root to all buttons
6
6
  */
@@ -21,6 +21,6 @@ var AbstractButton3D = /** @class */ (function (_super) {
21
21
  return new TransformNode("button" + this.name);
22
22
  };
23
23
  return AbstractButton3D;
24
- }(Control3D));
24
+ }(ContentDisplay3D));
25
25
  export { AbstractButton3D };
26
26
  //# sourceMappingURL=abstractButton3D.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"abstractButton3D.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/abstractButton3D.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAGrE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AACH;IAAsC,oCAAS;IAC3C;;;OAGG;IACH,0BAAY,IAAa;eACrB,kBAAM,IAAI,CAAC;IACf,CAAC;IAES,uCAAY,GAAtB;QACI,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED,mBAAmB;IACT,sCAAW,GAArB,UAAsB,KAAY;QAC9B,OAAO,IAAI,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IACL,uBAAC;AAAD,CAAC,AAjBD,CAAsC,SAAS,GAiB9C","sourcesContent":["import { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { Scene } from \"@babylonjs/core/scene\";\r\n\r\nimport { Control3D } from \"./control3D\";\r\n\r\n/**\r\n * Class used as a root to all buttons\r\n */\r\nexport class AbstractButton3D extends Control3D {\r\n /**\r\n * Creates a new button\r\n * @param name defines the control name\r\n */\r\n constructor(name?: string) {\r\n super(name);\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"AbstractButton3D\";\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n return new TransformNode(\"button\" + this.name);\r\n }\r\n}"]}
1
+ {"version":3,"file":"abstractButton3D.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/abstractButton3D.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;GAEG;AACH;IAAsC,oCAAgB;IAClD;;;OAGG;IACH,0BAAY,IAAa;eACrB,kBAAM,IAAI,CAAC;IACf,CAAC;IAES,uCAAY,GAAtB;QACI,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED,mBAAmB;IACT,sCAAW,GAArB,UAAsB,KAAY;QAC9B,OAAO,IAAI,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IACL,uBAAC;AAAD,CAAC,AAjBD,CAAsC,gBAAgB,GAiBrD","sourcesContent":["import { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { Scene } from \"@babylonjs/core/scene\";\r\nimport { ContentDisplay3D } from \"./contentDisplay3D\";\r\n\r\n/**\r\n * Class used as a root to all buttons\r\n */\r\nexport class AbstractButton3D extends ContentDisplay3D {\r\n /**\r\n * Creates a new button\r\n * @param name defines the control name\r\n */\r\n constructor(name?: string) {\r\n super(name);\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"AbstractButton3D\";\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n return new TransformNode(\"button\" + this.name);\r\n }\r\n}\r\n"]}
@@ -1,46 +1,22 @@
1
- import { int } from "@babylonjs/core/types";
2
1
  import { TransformNode } from "@babylonjs/core/Meshes/transformNode";
3
2
  import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh";
4
3
  import { Material } from "@babylonjs/core/Materials/material";
5
4
  import { Scene } from "@babylonjs/core/scene";
6
5
  import { AbstractButton3D } from "./abstractButton3D";
7
6
  import { AdvancedDynamicTexture } from "../../2D/advancedDynamicTexture";
8
- import { Control } from "../../2D/controls/control";
9
7
  /**
10
8
  * Class used to create a button in 3D
11
9
  */
12
10
  export declare class Button3D extends AbstractButton3D {
13
11
  /** @hidden */
14
12
  protected _currentMaterial: Material;
15
- private _facadeTexture;
16
- private _content;
17
- private _contentResolution;
18
- private _contentScaleRatio;
19
- /**
20
- * Gets or sets the texture resolution used to render content (512 by default)
21
- */
22
- get contentResolution(): int;
23
- set contentResolution(value: int);
24
- /**
25
- * Gets or sets the texture scale ratio used to render content (2 by default)
26
- */
27
- get contentScaleRatio(): number;
28
- set contentScaleRatio(value: number);
29
- protected _disposeFacadeTexture(): void;
30
- protected _resetContent(): void;
31
13
  /**
32
14
  * Creates a new button
33
15
  * @param name defines the control name
34
16
  */
35
17
  constructor(name?: string);
36
- /**
37
- * Gets or sets the GUI 2D content used to display the button's facade
38
- */
39
- get content(): Control;
40
- set content(value: Control);
41
18
  /**
42
19
  * Apply the facade texture (created from the content property).
43
- * This function can be overloaded by child classes
44
20
  * @param facadeTexture defines the AdvancedDynamicTexture to use
45
21
  */
46
22
  protected _applyFacade(facadeTexture: AdvancedDynamicTexture): void;