@babylonjs/gui 5.0.0-rc.2 → 5.0.0-rc.5

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 (265) hide show
  1. package/2D/adtInstrumentation.d.ts +2 -2
  2. package/2D/adtInstrumentation.js.map +1 -1
  3. package/2D/advancedDynamicTexture.d.ts +43 -20
  4. package/2D/advancedDynamicTexture.js +45 -22
  5. package/2D/advancedDynamicTexture.js.map +1 -1
  6. package/2D/controls/button.d.ts +50 -12
  7. package/2D/controls/button.js +48 -10
  8. package/2D/controls/button.js.map +1 -1
  9. package/2D/controls/checkbox.d.ts +17 -9
  10. package/2D/controls/checkbox.js +17 -7
  11. package/2D/controls/checkbox.js.map +1 -1
  12. package/2D/controls/colorpicker.d.ts +21 -8
  13. package/2D/controls/colorpicker.js +540 -523
  14. package/2D/controls/colorpicker.js.map +1 -1
  15. package/2D/controls/container.d.ts +63 -18
  16. package/2D/controls/container.js +63 -18
  17. package/2D/controls/container.js.map +1 -1
  18. package/2D/controls/control.d.ts +172 -49
  19. package/2D/controls/control.js +166 -41
  20. package/2D/controls/control.js.map +1 -1
  21. package/2D/controls/displayGrid.d.ts +2 -4
  22. package/2D/controls/displayGrid.js +3 -3
  23. package/2D/controls/displayGrid.js.map +1 -1
  24. package/2D/controls/ellipse.d.ts +1 -1
  25. package/2D/controls/ellipse.js +2 -2
  26. package/2D/controls/ellipse.js.map +1 -1
  27. package/2D/controls/focusableButton.d.ts +13 -6
  28. package/2D/controls/focusableButton.js +10 -3
  29. package/2D/controls/focusableButton.js.map +1 -1
  30. package/2D/controls/focusableControl.d.ts +11 -11
  31. package/2D/controls/focusableControl.js.map +1 -1
  32. package/2D/controls/grid.d.ts +7 -3
  33. package/2D/controls/grid.js +9 -5
  34. package/2D/controls/grid.js.map +1 -1
  35. package/2D/controls/image.d.ts +15 -8
  36. package/2D/controls/image.js +29 -21
  37. package/2D/controls/image.js.map +1 -1
  38. package/2D/controls/index.js.map +1 -1
  39. package/2D/controls/inputPassword.d.ts +1 -1
  40. package/2D/controls/inputPassword.js +2 -2
  41. package/2D/controls/inputPassword.js.map +1 -1
  42. package/2D/controls/inputText.d.ts +34 -15
  43. package/2D/controls/inputText.js +47 -24
  44. package/2D/controls/inputText.js.map +1 -1
  45. package/2D/controls/line.d.ts +4 -4
  46. package/2D/controls/line.js +5 -5
  47. package/2D/controls/line.js.map +1 -1
  48. package/2D/controls/multiLine.d.ts +9 -11
  49. package/2D/controls/multiLine.js +8 -8
  50. package/2D/controls/multiLine.js.map +1 -1
  51. package/2D/controls/radioButton.d.ts +4 -4
  52. package/2D/controls/radioButton.js +2 -2
  53. package/2D/controls/radioButton.js.map +1 -1
  54. package/2D/controls/rectangle.d.ts +1 -1
  55. package/2D/controls/rectangle.js +2 -2
  56. package/2D/controls/rectangle.js.map +1 -1
  57. package/2D/controls/scrollViewers/scrollViewer.d.ts +14 -7
  58. package/2D/controls/scrollViewers/scrollViewer.js +14 -13
  59. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  60. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +20 -8
  61. package/2D/controls/scrollViewers/scrollViewerWindow.js +25 -10
  62. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  63. package/2D/controls/selector.d.ts +79 -25
  64. package/2D/controls/selector.js +93 -30
  65. package/2D/controls/selector.js.map +1 -1
  66. package/2D/controls/sliders/baseSlider.d.ts +9 -5
  67. package/2D/controls/sliders/baseSlider.js +11 -7
  68. package/2D/controls/sliders/baseSlider.js.map +1 -1
  69. package/2D/controls/sliders/imageBasedSlider.d.ts +10 -8
  70. package/2D/controls/sliders/imageBasedSlider.js +10 -6
  71. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  72. package/2D/controls/sliders/imageScrollBar.d.ts +8 -4
  73. package/2D/controls/sliders/imageScrollBar.js +10 -3
  74. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  75. package/2D/controls/sliders/scrollBar.d.ts +8 -4
  76. package/2D/controls/sliders/scrollBar.js +10 -3
  77. package/2D/controls/sliders/scrollBar.js.map +1 -1
  78. package/2D/controls/sliders/slider.d.ts +2 -4
  79. package/2D/controls/sliders/slider.js +6 -6
  80. package/2D/controls/sliders/slider.js.map +1 -1
  81. package/2D/controls/stackPanel.d.ts +11 -3
  82. package/2D/controls/stackPanel.js +16 -6
  83. package/2D/controls/stackPanel.js.map +1 -1
  84. package/2D/controls/statics.js +2 -0
  85. package/2D/controls/statics.js.map +1 -1
  86. package/2D/controls/textBlock.d.ts +9 -6
  87. package/2D/controls/textBlock.js +11 -6
  88. package/2D/controls/textBlock.js.map +1 -1
  89. package/2D/controls/textWrapper.js.map +1 -1
  90. package/2D/controls/toggleButton.d.ts +43 -9
  91. package/2D/controls/toggleButton.js +40 -6
  92. package/2D/controls/toggleButton.js.map +1 -1
  93. package/2D/controls/virtualKeyboard.d.ts +2 -2
  94. package/2D/controls/virtualKeyboard.js +6 -6
  95. package/2D/controls/virtualKeyboard.js.map +1 -1
  96. package/2D/index.js.map +1 -1
  97. package/2D/math2D.d.ts +2 -2
  98. package/2D/math2D.js +2 -2
  99. package/2D/math2D.js.map +1 -1
  100. package/2D/measure.d.ts +4 -4
  101. package/2D/measure.js +6 -16
  102. package/2D/measure.js.map +1 -1
  103. package/2D/multiLinePoint.d.ts +3 -3
  104. package/2D/multiLinePoint.js +3 -3
  105. package/2D/multiLinePoint.js.map +1 -1
  106. package/2D/style.d.ts +2 -2
  107. package/2D/style.js.map +1 -1
  108. package/2D/valueAndUnit.d.ts +1 -1
  109. package/2D/valueAndUnit.js +8 -4
  110. package/2D/valueAndUnit.js.map +1 -1
  111. package/2D/xmlLoader.d.ts +10 -10
  112. package/2D/xmlLoader.js +17 -17
  113. package/2D/xmlLoader.js.map +1 -1
  114. package/3D/behaviors/defaultBehavior.d.ts +7 -7
  115. package/3D/behaviors/defaultBehavior.js.map +1 -1
  116. package/3D/controls/abstractButton3D.d.ts +2 -2
  117. package/3D/controls/abstractButton3D.js +1 -1
  118. package/3D/controls/abstractButton3D.js.map +1 -1
  119. package/3D/controls/button3D.d.ts +4 -4
  120. package/3D/controls/button3D.js.map +1 -1
  121. package/3D/controls/container3D.d.ts +3 -3
  122. package/3D/controls/container3D.js +1 -2
  123. package/3D/controls/container3D.js.map +1 -1
  124. package/3D/controls/contentDisplay3D.js +1 -0
  125. package/3D/controls/contentDisplay3D.js.map +1 -1
  126. package/3D/controls/control3D.d.ts +53 -17
  127. package/3D/controls/control3D.js +48 -11
  128. package/3D/controls/control3D.js.map +1 -1
  129. package/3D/controls/cylinderPanel.d.ts +2 -2
  130. package/3D/controls/cylinderPanel.js +2 -2
  131. package/3D/controls/cylinderPanel.js.map +1 -1
  132. package/3D/controls/handMenu.d.ts +5 -5
  133. package/3D/controls/handMenu.js.map +1 -1
  134. package/3D/controls/holographicBackplate.d.ts +4 -3
  135. package/3D/controls/holographicBackplate.js +4 -4
  136. package/3D/controls/holographicBackplate.js.map +1 -1
  137. package/3D/controls/holographicButton.d.ts +6 -5
  138. package/3D/controls/holographicButton.js +1 -0
  139. package/3D/controls/holographicButton.js.map +1 -1
  140. package/3D/controls/holographicSlate.d.ts +10 -7
  141. package/3D/controls/holographicSlate.js +17 -14
  142. package/3D/controls/holographicSlate.js.map +1 -1
  143. package/3D/controls/index.js.map +1 -1
  144. package/3D/controls/meshButton3D.d.ts +4 -4
  145. package/3D/controls/meshButton3D.js +3 -2
  146. package/3D/controls/meshButton3D.js.map +1 -1
  147. package/3D/controls/nearMenu.d.ts +5 -5
  148. package/3D/controls/nearMenu.js +6 -4
  149. package/3D/controls/nearMenu.js.map +1 -1
  150. package/3D/controls/planePanel.d.ts +1 -1
  151. package/3D/controls/planePanel.js.map +1 -1
  152. package/3D/controls/scatterPanel.d.ts +2 -2
  153. package/3D/controls/scatterPanel.js +1 -1
  154. package/3D/controls/scatterPanel.js.map +1 -1
  155. package/3D/controls/slider3D.d.ts +5 -5
  156. package/3D/controls/slider3D.js +8 -9
  157. package/3D/controls/slider3D.js.map +1 -1
  158. package/3D/controls/spherePanel.d.ts +2 -2
  159. package/3D/controls/spherePanel.js +2 -2
  160. package/3D/controls/spherePanel.js.map +1 -1
  161. package/3D/controls/stackPanel3D.js +3 -3
  162. package/3D/controls/stackPanel3D.js.map +1 -1
  163. package/3D/controls/touchButton3D.d.ts +12 -7
  164. package/3D/controls/touchButton3D.js +11 -5
  165. package/3D/controls/touchButton3D.js.map +1 -1
  166. package/3D/controls/touchHolographicButton.d.ts +7 -6
  167. package/3D/controls/touchHolographicButton.js +7 -7
  168. package/3D/controls/touchHolographicButton.js.map +1 -1
  169. package/3D/controls/touchHolographicMenu.d.ts +6 -6
  170. package/3D/controls/touchHolographicMenu.js +1 -0
  171. package/3D/controls/touchHolographicMenu.js.map +1 -1
  172. package/3D/controls/touchMeshButton3D.d.ts +4 -5
  173. package/3D/controls/touchMeshButton3D.js +3 -3
  174. package/3D/controls/touchMeshButton3D.js.map +1 -1
  175. package/3D/controls/volumeBasedPanel.d.ts +10 -9
  176. package/3D/controls/volumeBasedPanel.js +13 -13
  177. package/3D/controls/volumeBasedPanel.js.map +1 -1
  178. package/3D/gizmos/gizmoHandle.d.ts +5 -5
  179. package/3D/gizmos/gizmoHandle.js.map +1 -1
  180. package/3D/gizmos/index.js.map +1 -1
  181. package/3D/gizmos/slateGizmo.d.ts +4 -4
  182. package/3D/gizmos/slateGizmo.js.map +1 -1
  183. package/3D/gui3DManager.d.ts +7 -7
  184. package/3D/gui3DManager.js +3 -3
  185. package/3D/gui3DManager.js.map +1 -1
  186. package/3D/index.js.map +1 -1
  187. package/3D/materials/fluent/fluentMaterial.d.ts +12 -12
  188. package/3D/materials/fluent/fluentMaterial.js +17 -6
  189. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  190. package/3D/materials/fluent/index.js.map +1 -1
  191. package/3D/materials/fluent/shaders/fluent.fragment.d.ts +1 -1
  192. package/3D/materials/fluent/shaders/fluent.fragment.js +4 -2
  193. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -1
  194. package/3D/materials/fluent/shaders/fluent.vertex.d.ts +1 -1
  195. package/3D/materials/fluent/shaders/fluent.vertex.js +4 -2
  196. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -1
  197. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +12 -12
  198. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +48 -13
  199. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  200. package/3D/materials/fluentBackplate/index.js.map +1 -1
  201. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +1 -1
  202. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +4 -2
  203. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -1
  204. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +1 -1
  205. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +4 -2
  206. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -1
  207. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +12 -12
  208. package/3D/materials/fluentButton/fluentButtonMaterial.js +8 -6
  209. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  210. package/3D/materials/fluentButton/index.js.map +1 -1
  211. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +1 -1
  212. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +4 -2
  213. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -1
  214. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +1 -1
  215. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +4 -2
  216. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -1
  217. package/3D/materials/fluentMaterial.d.ts +1 -1
  218. package/3D/materials/fluentMaterial.js +1 -1
  219. package/3D/materials/fluentMaterial.js.map +1 -1
  220. package/3D/materials/handle/handleMaterial.d.ts +4 -4
  221. package/3D/materials/handle/handleMaterial.js.map +1 -1
  222. package/3D/materials/handle/index.js.map +1 -1
  223. package/3D/materials/handle/shaders/handle.fragment.d.ts +1 -1
  224. package/3D/materials/handle/shaders/handle.fragment.js +3 -1
  225. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -1
  226. package/3D/materials/handle/shaders/handle.vertex.d.ts +1 -1
  227. package/3D/materials/handle/shaders/handle.vertex.js +4 -2
  228. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -1
  229. package/3D/materials/index.js.map +1 -1
  230. package/3D/materials/mrdl/index.js.map +1 -1
  231. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +15 -15
  232. package/3D/materials/mrdl/mrdlBackplateMaterial.js +42 -15
  233. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  234. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +16 -16
  235. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +88 -23
  236. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  237. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +17 -17
  238. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +89 -24
  239. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  240. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +1 -1
  241. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +4 -2
  242. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -1
  243. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +1 -1
  244. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +4 -2
  245. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -1
  246. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +1 -1
  247. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +4 -2
  248. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -1
  249. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +1 -1
  250. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +4 -2
  251. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -1
  252. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +1 -1
  253. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +4 -2
  254. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -1
  255. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +1 -1
  256. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +4 -2
  257. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -1
  258. package/3D/vector3WithInfo.d.ts +1 -1
  259. package/3D/vector3WithInfo.js.map +1 -1
  260. package/index.js.map +1 -1
  261. package/legacy/legacy.d.ts +1 -1
  262. package/legacy/legacy.js +3 -3
  263. package/legacy/legacy.js.map +1 -1
  264. package/package.json +21 -328
  265. package/readme.md +2 -2
@@ -6,9 +6,9 @@ import { Rectangle } from "./rectangle.js";
6
6
  import { Button } from "./button.js";
7
7
  import { Grid } from "./grid.js";
8
8
  import { TextBlock } from "../controls/textBlock.js";
9
- import { RegisterClass } from '@babylonjs/core/Misc/typeStore.js';
10
- import { Color3 } from '@babylonjs/core/Maths/math.color.js';
11
- import { serialize } from '@babylonjs/core/Misc/decorators.js';
9
+ import { RegisterClass } from "@babylonjs/core/Misc/typeStore.js";
10
+ import { Color3 } from "@babylonjs/core/Maths/math.color.js";
11
+ import { serialize } from "@babylonjs/core/Misc/decorators.js";
12
12
  import { EngineStore } from "@babylonjs/core/Engines/engineStore.js";
13
13
  /** Class used to create color pickers */
14
14
  var ColorPicker = /** @class */ (function (_super) {
@@ -37,7 +37,7 @@ var ColorPicker = /** @class */ (function (_super) {
37
37
  _this.onValueChangedObservable = new Observable();
38
38
  // Events
39
39
  _this._pointerIsDown = false;
40
- _this.value = new Color3(.88, .1, .1);
40
+ _this.value = new Color3(0.88, 0.1, 0.1);
41
41
  _this.size = "200px";
42
42
  _this.isPointerBlocker = true;
43
43
  return _this;
@@ -94,7 +94,7 @@ var ColorPicker = /** @class */ (function (_super) {
94
94
  }
95
95
  if (this._width.fromString(value)) {
96
96
  if (this._width.getValue(this._host) === 0) {
97
- value = '1px';
97
+ value = "1px";
98
98
  this._width.fromString(value);
99
99
  }
100
100
  this._height.fromString(value);
@@ -119,7 +119,7 @@ var ColorPicker = /** @class */ (function (_super) {
119
119
  }
120
120
  if (this._height.fromString(value)) {
121
121
  if (this._height.getValue(this._host) === 0) {
122
- value = '1px';
122
+ value = "1px";
123
123
  this._height.fromString(value);
124
124
  }
125
125
  this._width.fromString(value);
@@ -143,8 +143,11 @@ var ColorPicker = /** @class */ (function (_super) {
143
143
  ColorPicker.prototype._getTypeName = function () {
144
144
  return "ColorPicker";
145
145
  };
146
- /** @hidden */
147
- ColorPicker.prototype._preMeasure = function (parentMeasure, context) {
146
+ /**
147
+ * @param parentMeasure
148
+ * @hidden
149
+ */
150
+ ColorPicker.prototype._preMeasure = function (parentMeasure) {
148
151
  if (parentMeasure.width < parentMeasure.height) {
149
152
  this._currentMeasure.height = parentMeasure.width;
150
153
  }
@@ -153,24 +156,24 @@ var ColorPicker = /** @class */ (function (_super) {
153
156
  }
154
157
  };
155
158
  ColorPicker.prototype._updateSquareProps = function () {
156
- var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * .5;
157
- var wheelThickness = radius * .2;
159
+ var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;
160
+ var wheelThickness = radius * 0.2;
158
161
  var innerDiameter = (radius - wheelThickness) * 2;
159
- var squareSize = innerDiameter / (Math.sqrt(2));
160
- var offset = radius - squareSize * .5;
162
+ var squareSize = innerDiameter / Math.sqrt(2);
163
+ var offset = radius - squareSize * 0.5;
161
164
  this._squareLeft = this._currentMeasure.left + offset;
162
165
  this._squareTop = this._currentMeasure.top + offset;
163
166
  this._squareSize = squareSize;
164
167
  };
165
168
  ColorPicker.prototype._drawGradientSquare = function (hueValue, left, top, width, height, context) {
166
169
  var lgh = context.createLinearGradient(left, top, width + left, top);
167
- lgh.addColorStop(0, '#fff');
168
- lgh.addColorStop(1, 'hsl(' + hueValue + ', 100%, 50%)');
170
+ lgh.addColorStop(0, "#fff");
171
+ lgh.addColorStop(1, "hsl(" + hueValue + ", 100%, 50%)");
169
172
  context.fillStyle = lgh;
170
173
  context.fillRect(left, top, width, height);
171
174
  var lgv = context.createLinearGradient(left, top, left, height + top);
172
- lgv.addColorStop(0, 'rgba(0,0,0,0)');
173
- lgv.addColorStop(1, '#000');
175
+ lgv.addColorStop(0, "rgba(0,0,0,0)");
176
+ lgv.addColorStop(1, "#000");
174
177
  context.fillStyle = lgv;
175
178
  context.fillRect(left, top, width, height);
176
179
  };
@@ -178,12 +181,12 @@ var ColorPicker = /** @class */ (function (_super) {
178
181
  context.beginPath();
179
182
  context.arc(centerX, centerY, radius + 1, 0, 2 * Math.PI, false);
180
183
  context.lineWidth = 3;
181
- context.strokeStyle = '#333333';
184
+ context.strokeStyle = "#333333";
182
185
  context.stroke();
183
186
  context.beginPath();
184
187
  context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);
185
188
  context.lineWidth = 3;
186
- context.strokeStyle = '#ffffff';
189
+ context.strokeStyle = "#ffffff";
187
190
  context.stroke();
188
191
  };
189
192
  ColorPicker.prototype._createColorWheelCanvas = function (radius, thickness) {
@@ -208,16 +211,16 @@ var ColorPicker = /** @class */ (function (_super) {
208
211
  }
209
212
  var dist = Math.sqrt(distSq);
210
213
  var ang = Math.atan2(y, x);
211
- Color3.HSVtoRGBToRef(ang * 180 / Math.PI + 180, dist / radius, 1, color);
212
- var index = ((x + radius) + ((y + radius) * 2 * radius)) * 4;
214
+ Color3.HSVtoRGBToRef((ang * 180) / Math.PI + 180, dist / radius, 1, color);
215
+ var index = (x + radius + (y + radius) * 2 * radius) * 4;
213
216
  data[index] = color.r * 255;
214
217
  data[index + 1] = color.g * 255;
215
218
  data[index + 2] = color.b * 255;
216
219
  var alphaRatio = (dist - innerRadius) / (radius - innerRadius);
217
220
  //apply less alpha to bigger color pickers
218
- var alphaAmount = .2;
219
- var maxAlpha = .2;
220
- var minAlpha = .04;
221
+ var alphaAmount = 0.2;
222
+ var maxAlpha = 0.2;
223
+ var minAlpha = 0.04;
221
224
  var lowerRadius = 50;
222
225
  var upperRadius = 150;
223
226
  if (radius < lowerRadius) {
@@ -227,14 +230,14 @@ var ColorPicker = /** @class */ (function (_super) {
227
230
  alphaAmount = minAlpha;
228
231
  }
229
232
  else {
230
- alphaAmount = (minAlpha - maxAlpha) * (radius - lowerRadius) / (upperRadius - lowerRadius) + maxAlpha;
233
+ alphaAmount = ((minAlpha - maxAlpha) * (radius - lowerRadius)) / (upperRadius - lowerRadius) + maxAlpha;
231
234
  }
232
- var alphaRatio = (dist - innerRadius) / (radius - innerRadius);
235
+ alphaRatio = (dist - innerRadius) / (radius - innerRadius);
233
236
  if (alphaRatio < alphaAmount) {
234
237
  data[index + 3] = 255 * (alphaRatio / alphaAmount);
235
238
  }
236
239
  else if (alphaRatio > 1 - alphaAmount) {
237
- data[index + 3] = 255 * (1.0 - ((alphaRatio - (1 - alphaAmount)) / alphaAmount));
240
+ data[index + 3] = 255 * (1.0 - (alphaRatio - (1 - alphaAmount)) / alphaAmount);
238
241
  }
239
242
  else {
240
243
  data[index + 3] = 255;
@@ -244,12 +247,15 @@ var ColorPicker = /** @class */ (function (_super) {
244
247
  context.putImageData(image, 0, 0);
245
248
  return canvas;
246
249
  };
247
- /** @hidden */
250
+ /**
251
+ * @param context
252
+ * @hidden
253
+ */
248
254
  ColorPicker.prototype._draw = function (context) {
249
255
  context.save();
250
256
  this._applyStates(context);
251
- var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * .5;
252
- var wheelThickness = radius * .2;
257
+ var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;
258
+ var wheelThickness = radius * 0.2;
253
259
  var left = this._currentMeasure.left;
254
260
  var top = this._currentMeasure.top;
255
261
  if (!this._colorWheelCanvas || this._colorWheelCanvas.width != radius * 2) {
@@ -272,19 +278,19 @@ var ColorPicker = /** @class */ (function (_super) {
272
278
  this._drawGradientSquare(this._h, this._squareLeft, this._squareTop, this._squareSize, this._squareSize, context);
273
279
  var cx = this._squareLeft + this._squareSize * this._s;
274
280
  var cy = this._squareTop + this._squareSize * (1 - this._v);
275
- this._drawCircle(cx, cy, radius * .04, context);
276
- var dist = radius - wheelThickness * .5;
277
- cx = left + radius + Math.cos((this._h - 180) * Math.PI / 180) * dist;
278
- cy = top + radius + Math.sin((this._h - 180) * Math.PI / 180) * dist;
279
- this._drawCircle(cx, cy, wheelThickness * .35, context);
281
+ this._drawCircle(cx, cy, radius * 0.04, context);
282
+ var dist = radius - wheelThickness * 0.5;
283
+ cx = left + radius + Math.cos(((this._h - 180) * Math.PI) / 180) * dist;
284
+ cy = top + radius + Math.sin(((this._h - 180) * Math.PI) / 180) * dist;
285
+ this._drawCircle(cx, cy, wheelThickness * 0.35, context);
280
286
  context.restore();
281
287
  };
282
288
  ColorPicker.prototype._updateValueFromPointer = function (x, y) {
283
289
  if (this._pointerStartedOnWheel) {
284
- var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * .5;
290
+ var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;
285
291
  var centerX = radius + this._currentMeasure.left;
286
292
  var centerY = radius + this._currentMeasure.top;
287
- this._h = Math.atan2(y - centerY, x - centerX) * 180 / Math.PI + 180;
293
+ this._h = (Math.atan2(y - centerY, x - centerX) * 180) / Math.PI + 180;
288
294
  }
289
295
  else if (this._pointerStartedOnSquare) {
290
296
  this._updateSquareProps();
@@ -303,17 +309,16 @@ var ColorPicker = /** @class */ (function (_super) {
303
309
  var left = this._squareLeft;
304
310
  var top = this._squareTop;
305
311
  var size = this._squareSize;
306
- if (x >= left && x <= left + size &&
307
- y >= top && y <= top + size) {
312
+ if (x >= left && x <= left + size && y >= top && y <= top + size) {
308
313
  return true;
309
314
  }
310
315
  return false;
311
316
  };
312
317
  ColorPicker.prototype._isPointOnWheel = function (x, y) {
313
- var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * .5;
318
+ var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;
314
319
  var centerX = radius + this._currentMeasure.left;
315
320
  var centerY = radius + this._currentMeasure.top;
316
- var wheelThickness = radius * .2;
321
+ var wheelThickness = radius * 0.2;
317
322
  var innerRadius = radius - wheelThickness;
318
323
  var radiusSq = radius * radius;
319
324
  var innerRadiusSq = innerRadius * innerRadius;
@@ -381,10 +386,17 @@ var ColorPicker = /** @class */ (function (_super) {
381
386
  * subsequent launches of the dialogue.
382
387
  * @param advancedTexture defines the AdvancedDynamicTexture the dialog is assigned to
383
388
  * @param options defines size for dialog and options for saved colors. Also accepts last color picked as hex string and saved colors array as hex strings.
389
+ * @param options.pickerWidth
390
+ * @param options.pickerHeight
391
+ * @param options.headerHeight
392
+ * @param options.lastColor
393
+ * @param options.swatchLimit
394
+ * @param options.numSwatchesPerLine
395
+ * @param options.savedColors
384
396
  * @returns picked color as a hex string and the saved colors array as hex strings.
385
397
  */
386
398
  ColorPicker.ShowPickerDialogAsync = function (advancedTexture, options) {
387
- return new Promise(function (resolve, reject) {
399
+ return new Promise(function (resolve) {
388
400
  // Default options
389
401
  options.pickerWidth = options.pickerWidth || "640px";
390
402
  options.pickerHeight = options.pickerHeight || "400px";
@@ -398,7 +410,7 @@ var ColorPicker = /** @class */ (function (_super) {
398
410
  var gutterSize = Math.floor(rawSwatchSize * 0.25);
399
411
  var colGutters = gutterSize * (options.numSwatchesPerLine + 1);
400
412
  var swatchSize = Math.floor((parseFloat(options.pickerWidth) - colGutters) / options.numSwatchesPerLine);
401
- var drawerMaxSize = (swatchSize * drawerMaxRows) + (gutterSize * (drawerMaxRows + 1));
413
+ var drawerMaxSize = swatchSize * drawerMaxRows + gutterSize * (drawerMaxRows + 1);
402
414
  var containerSize = (parseInt(options.pickerHeight) + drawerMaxSize + Math.floor(swatchSize * 0.25)).toString() + "px";
403
415
  // Button Colors
404
416
  var buttonColor = "#c0c0c0";
@@ -412,491 +424,135 @@ var ColorPicker = /** @class */ (function (_super) {
412
424
  var luminanceLimit = luminanceLimitColor.r + luminanceLimitColor.g + luminanceLimitColor.b;
413
425
  var iconColorDark = "#aaaaaa";
414
426
  var iconColorLight = "#ffffff";
415
- var closeIconColor;
416
427
  // Button settings
417
428
  var buttonFontSize;
418
429
  var butEdit;
419
- var buttonWidth;
420
- var buttonHeight;
421
430
  // Input Text Colors
422
431
  var inputFieldLabels = ["R", "G", "B"];
423
432
  var inputTextBackgroundColor = "#454545";
424
433
  var inputTextColor = "#f0f0f0";
425
- // This is the current color as set by either the picker or by entering a value
426
- var currentColor;
427
434
  // This int is used for naming swatches and serves as the index for calling them from the list
428
435
  var swatchNumber;
429
436
  // Menu Panel options. We need to know if the swatchDrawer exists so we can create it if needed.
430
437
  var swatchDrawer;
431
438
  var editSwatchMode = false;
432
439
  // Color InputText fields that will be updated upon value change
433
- var picker;
434
- var rValInt;
435
- var gValInt;
436
- var bValInt;
437
- var rValDec;
438
- var gValDec;
439
- var bValDec;
440
- var hexVal;
441
- var newSwatch;
440
+ var butSave;
442
441
  var lastVal;
443
442
  var activeField;
444
- /**
445
- * Will update all values for InputText and ColorPicker controls based on the BABYLON.Color3 passed to this function.
446
- * Each InputText control and the ColorPicker control will be tested to see if they are the activeField and if they
447
- * are will receive no update. This is to prevent the input from the user being overwritten.
448
- */
449
- function updateValues(value, inputField) {
450
- activeField = inputField;
451
- var pickedColor = value.toHexString();
452
- newSwatch.background = pickedColor;
453
- if (rValInt.name != activeField) {
454
- rValInt.text = Math.floor(value.r * 255).toString();
455
- }
456
- if (gValInt.name != activeField) {
457
- gValInt.text = Math.floor(value.g * 255).toString();
458
- }
459
- if (bValInt.name != activeField) {
460
- bValInt.text = Math.floor(value.b * 255).toString();
461
- }
462
- if (rValDec.name != activeField) {
463
- rValDec.text = value.r.toString();
464
- }
465
- if (gValDec.name != activeField) {
466
- gValDec.text = value.g.toString();
467
- }
468
- if (bValDec.name != activeField) {
469
- bValDec.text = value.b.toString();
470
- }
471
- if (hexVal.name != activeField) {
472
- var minusPound = pickedColor.split("#");
473
- hexVal.text = minusPound[1];
474
- }
475
- if (picker.name != activeField) {
476
- picker.value = value;
477
- }
443
+ // Dialog menu container which will contain both the main dialogue window and the swatch drawer which opens once a color is saved.
444
+ var dialogContainer = new Grid();
445
+ dialogContainer.name = "Dialog Container";
446
+ dialogContainer.width = options.pickerWidth;
447
+ if (options.savedColors) {
448
+ dialogContainer.height = containerSize;
449
+ var topRow = parseInt(options.pickerHeight) / parseInt(containerSize);
450
+ dialogContainer.addRowDefinition(topRow, false);
451
+ dialogContainer.addRowDefinition(1.0 - topRow, false);
478
452
  }
479
- // When the user enters an integer for R, G, or B we check to make sure it is a valid number and replace if not.
480
- function updateInt(field, channel) {
481
- var newValue = field.text;
482
- var checkVal = /[^0-9]/g.test(newValue);
483
- if (checkVal) {
484
- field.text = lastVal;
485
- return;
486
- }
487
- else {
488
- if (newValue != "") {
489
- if (Math.floor(parseInt(newValue)) < 0) {
490
- newValue = "0";
491
- }
492
- else if (Math.floor(parseInt(newValue)) > 255) {
493
- newValue = "255";
494
- }
495
- else if (isNaN(parseInt(newValue))) {
496
- newValue = "0";
497
- }
498
- }
499
- if (activeField == field.name) {
500
- lastVal = newValue;
501
- }
502
- }
503
- if (newValue != "") {
504
- newValue = parseInt(newValue).toString();
505
- field.text = newValue;
506
- var newSwatchRGB = Color3.FromHexString(newSwatch.background);
507
- if (activeField == field.name) {
508
- if (channel == "r") {
509
- updateValues(new Color3((parseInt(newValue)) / 255, newSwatchRGB.g, newSwatchRGB.b), field.name);
510
- }
511
- else if (channel == "g") {
512
- updateValues(new Color3(newSwatchRGB.r, (parseInt(newValue)) / 255, newSwatchRGB.b), field.name);
513
- }
514
- else {
515
- updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, (parseInt(newValue)) / 255), field.name);
516
- }
517
- }
518
- }
453
+ else {
454
+ dialogContainer.height = options.pickerHeight;
455
+ dialogContainer.addRowDefinition(1.0, false);
519
456
  }
520
- // When the user enters a float for R, G, or B we check to make sure it is a valid number and replace if not.
521
- function updateFloat(field, channel) {
522
- var newValue = field.text;
523
- var checkVal = /[^0-9\.]/g.test(newValue);
524
- if (checkVal) {
525
- field.text = lastVal;
526
- return;
527
- }
528
- else {
529
- if (newValue != "" && newValue != "." && parseFloat(newValue) != 0) {
530
- if (parseFloat(newValue) < 0.0) {
531
- newValue = "0.0";
532
- }
533
- else if (parseFloat(newValue) > 1.0) {
534
- newValue = "1.0";
535
- }
536
- else if (isNaN(parseFloat(newValue))) {
537
- newValue = "0.0";
538
- }
539
- }
540
- if (activeField == field.name) {
541
- lastVal = newValue;
542
- }
543
- }
544
- if (newValue != "" && newValue != "." && parseFloat(newValue) != 0) {
545
- newValue = parseFloat(newValue).toString();
546
- field.text = newValue;
457
+ advancedTexture.addControl(dialogContainer);
458
+ // Swatch drawer which contains all saved color buttons
459
+ if (options.savedColors) {
460
+ swatchDrawer = new Grid();
461
+ swatchDrawer.name = "Swatch Drawer";
462
+ swatchDrawer.verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;
463
+ swatchDrawer.background = buttonBackgroundColor;
464
+ swatchDrawer.width = options.pickerWidth;
465
+ var initialRows = options.savedColors.length / options.numSwatchesPerLine;
466
+ var gutterCount = void 0;
467
+ if (initialRows == 0) {
468
+ gutterCount = 0;
547
469
  }
548
470
  else {
549
- newValue = "0.0";
471
+ gutterCount = initialRows + 1;
550
472
  }
551
- var newSwatchRGB = Color3.FromHexString(newSwatch.background);
552
- if (activeField == field.name) {
553
- if (channel == "r") {
554
- updateValues(new Color3(parseFloat(newValue), newSwatchRGB.g, newSwatchRGB.b), field.name);
555
- }
556
- else if (channel == "g") {
557
- updateValues(new Color3(newSwatchRGB.r, parseFloat(newValue), newSwatchRGB.b), field.name);
473
+ swatchDrawer.height = (swatchSize * initialRows + gutterCount * gutterSize).toString() + "px";
474
+ swatchDrawer.top = Math.floor(swatchSize * 0.25).toString() + "px";
475
+ for (var i = 0; i < Math.ceil(options.savedColors.length / options.numSwatchesPerLine) * 2 + 1; i++) {
476
+ if (i % 2 != 0) {
477
+ swatchDrawer.addRowDefinition(swatchSize, true);
558
478
  }
559
479
  else {
560
- updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseFloat(newValue)), field.name);
480
+ swatchDrawer.addRowDefinition(gutterSize, true);
561
481
  }
562
482
  }
563
- }
564
- // Removes the current index from the savedColors array. Drawer can then be regenerated.
565
- function deleteSwatch(index) {
566
- if (options.savedColors) {
567
- options.savedColors.splice(index, 1);
568
- }
569
- if (options.savedColors && options.savedColors.length == 0) {
570
- setEditButtonVisibility(false);
571
- editSwatchMode = false;
572
- }
573
- }
574
- // Creates and styles an individual swatch when updateSwatches is called.
575
- function createSwatch() {
576
- if (options.savedColors && options.savedColors[swatchNumber]) {
577
- if (editSwatchMode) {
578
- var icon = "b";
579
- }
580
- else {
581
- var icon = "";
582
- }
583
- var swatch = Button.CreateSimpleButton("Swatch_" + swatchNumber, icon);
584
- swatch.fontFamily = "BabylonJSglyphs";
585
- var swatchColor = Color3.FromHexString(options.savedColors[swatchNumber]);
586
- var swatchLuminence = swatchColor.r + swatchColor.g + swatchColor.b;
587
- // Set color of outline and textBlock based on luminance of the color swatch so feedback always visible
588
- if (swatchLuminence > luminanceLimit) {
589
- swatch.color = iconColorDark;
483
+ for (var i = 0; i < options.numSwatchesPerLine * 2 + 1; i++) {
484
+ if (i % 2 != 0) {
485
+ swatchDrawer.addColumnDefinition(swatchSize, true);
590
486
  }
591
487
  else {
592
- swatch.color = iconColorLight;
488
+ swatchDrawer.addColumnDefinition(gutterSize, true);
593
489
  }
594
- swatch.fontSize = Math.floor(swatchSize * 0.7);
595
- swatch.textBlock.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;
596
- swatch.height = swatch.width = (swatchSize).toString() + "px";
597
- swatch.background = options.savedColors[swatchNumber];
598
- swatch.thickness = 2;
599
- var metadata_1 = swatchNumber;
600
- swatch.pointerDownAnimation = function () {
601
- swatch.thickness = 4;
602
- };
603
- swatch.pointerUpAnimation = function () {
604
- swatch.thickness = 3;
605
- };
606
- swatch.pointerEnterAnimation = function () {
607
- swatch.thickness = 3;
608
- };
609
- swatch.pointerOutAnimation = function () {
610
- swatch.thickness = 2;
611
- };
612
- swatch.onPointerClickObservable.add(function () {
613
- if (!editSwatchMode) {
614
- if (options.savedColors) {
615
- updateValues(Color3.FromHexString(options.savedColors[metadata_1]), swatch.name);
616
- }
617
- }
618
- else {
619
- deleteSwatch(metadata_1);
620
- updateSwatches("", butSave);
621
- }
622
- });
623
- return swatch;
624
- }
625
- else {
626
- return null;
627
490
  }
491
+ dialogContainer.addControl(swatchDrawer, 1, 0);
628
492
  }
629
- // Mode switch to render button text and close symbols on swatch controls
630
- function editSwatches(mode) {
631
- if (mode !== undefined) {
632
- editSwatchMode = mode;
633
- }
634
- if (editSwatchMode) {
635
- for (var i = 0; i < swatchDrawer.children.length; i++) {
636
- var thisButton = swatchDrawer.children[i];
637
- thisButton.textBlock.text = "b";
638
- }
639
- if (butEdit !== undefined) {
640
- butEdit.textBlock.text = "Done";
641
- }
642
- }
643
- else {
644
- for (var i = 0; i < swatchDrawer.children.length; i++) {
645
- var thisButton = swatchDrawer.children[i];
646
- thisButton.textBlock.text = "";
647
- }
648
- if (butEdit !== undefined) {
649
- butEdit.textBlock.text = "Edit";
650
- }
651
- }
652
- }
653
- /**
654
- * When Save Color button is pressed this function will first create a swatch drawer if one is not already
655
- * made. Then all controls are removed from the drawer and we step through the savedColors array and
656
- * creates one swatch per color. It will also set the height of the drawer control based on how many
657
- * saved colors there are and how many can be stored per row.
658
- */
659
- function updateSwatches(color, button) {
660
- if (options.savedColors) {
661
- if (color != "") {
662
- options.savedColors.push(color);
663
- }
664
- swatchNumber = 0;
665
- swatchDrawer.clearControls();
666
- var rowCount = Math.ceil(options.savedColors.length / options.numSwatchesPerLine);
667
- if (rowCount == 0) {
668
- var gutterCount = 0;
669
- }
670
- else {
671
- var gutterCount = rowCount + 1;
672
- }
673
- if (swatchDrawer.rowCount != rowCount + gutterCount) {
674
- var currentRows = swatchDrawer.rowCount;
675
- for (var i = 0; i < currentRows; i++) {
676
- swatchDrawer.removeRowDefinition(0);
677
- }
678
- for (var i = 0; i < rowCount + gutterCount; i++) {
679
- if (i % 2) {
680
- swatchDrawer.addRowDefinition(swatchSize, true);
681
- }
682
- else {
683
- swatchDrawer.addRowDefinition(gutterSize, true);
684
- }
685
- }
686
- }
687
- swatchDrawer.height = ((swatchSize * rowCount) + (gutterCount * gutterSize)).toString() + "px";
688
- for (var y = 1, thisRow = 1; y < rowCount + gutterCount; y += 2, thisRow++) {
689
- // Determine number of buttons to create per row based on the button limit per row and number of saved colors
690
- if (options.savedColors.length > thisRow * options.numSwatchesPerLine) {
691
- var totalButtonsThisRow = options.numSwatchesPerLine;
692
- }
693
- else {
694
- var totalButtonsThisRow = options.savedColors.length - ((thisRow - 1) * options.numSwatchesPerLine);
695
- }
696
- var buttonIterations = (Math.min(Math.max(totalButtonsThisRow, 0), options.numSwatchesPerLine));
697
- for (var x = 0, w = 1; x < buttonIterations; x++) {
698
- if (x > options.numSwatchesPerLine) {
699
- continue;
700
- }
701
- var swatch = createSwatch();
702
- if (swatch != null) {
703
- swatchDrawer.addControl(swatch, y, w);
704
- w += 2;
705
- swatchNumber++;
706
- }
707
- else {
708
- continue;
709
- }
710
- }
711
- }
712
- if (options.savedColors.length >= options.swatchLimit) {
713
- disableButton(button, true);
714
- }
715
- else {
716
- disableButton(button, false);
717
- }
718
- }
719
- }
720
- // Shows or hides edit swatches button depending on if there are saved swatches
721
- function setEditButtonVisibility(enableButton) {
722
- if (enableButton) {
723
- butEdit = Button.CreateSimpleButton("butEdit", "Edit");
724
- butEdit.width = buttonWidth;
725
- butEdit.height = buttonHeight;
726
- butEdit.left = (Math.floor(parseInt(buttonWidth) * 0.1)).toString() + "px";
727
- butEdit.top = (parseFloat(butEdit.left) * -1).toString() + "px";
728
- butEdit.verticalAlignment = Control.VERTICAL_ALIGNMENT_BOTTOM;
729
- butEdit.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;
730
- butEdit.thickness = 2;
731
- butEdit.color = buttonColor;
732
- butEdit.fontSize = buttonFontSize;
733
- butEdit.background = buttonBackgroundColor;
734
- butEdit.onPointerEnterObservable.add(function () {
735
- butEdit.background = buttonBackgroundHoverColor;
736
- });
737
- butEdit.onPointerOutObservable.add(function () {
738
- butEdit.background = buttonBackgroundColor;
739
- });
740
- butEdit.pointerDownAnimation = function () {
741
- butEdit.background = buttonBackgroundClickColor;
742
- };
743
- butEdit.pointerUpAnimation = function () {
744
- butEdit.background = buttonBackgroundHoverColor;
745
- };
746
- butEdit.onPointerClickObservable.add(function () {
747
- if (editSwatchMode) {
748
- editSwatchMode = false;
749
- }
750
- else {
751
- editSwatchMode = true;
752
- }
753
- editSwatches();
754
- });
755
- pickerGrid.addControl(butEdit, 1, 0);
756
- }
757
- else {
758
- pickerGrid.removeControl(butEdit);
759
- }
760
- }
761
- // Called when the user hits the limit of saved colors in the drawer.
762
- function disableButton(button, disabled) {
763
- if (disabled) {
764
- button.color = buttonDisabledColor;
765
- button.background = buttonDisabledBackgroundColor;
766
- }
767
- else {
768
- button.color = buttonColor;
769
- button.background = buttonBackgroundColor;
770
- }
771
- }
772
- // Passes last chosen color back to scene and kills dialog by removing from AdvancedDynamicTexture
773
- function closePicker(color) {
774
- if (options.savedColors && options.savedColors.length > 0) {
775
- resolve({
776
- savedColors: options.savedColors,
777
- pickedColor: color
778
- });
779
- }
780
- else {
781
- resolve({
782
- pickedColor: color
783
- });
784
- }
785
- advancedTexture.removeControl(dialogContainer);
786
- }
787
- // Dialogue menu container which will contain both the main dialogue window and the swatch drawer which opens once a color is saved.
788
- var dialogContainer = new Grid();
789
- dialogContainer.name = "Dialog Container";
790
- dialogContainer.width = options.pickerWidth;
791
- if (options.savedColors) {
792
- dialogContainer.height = containerSize;
793
- var topRow = parseInt(options.pickerHeight) / parseInt(containerSize);
794
- dialogContainer.addRowDefinition(topRow, false);
795
- dialogContainer.addRowDefinition(1.0 - topRow, false);
796
- }
797
- else {
798
- dialogContainer.height = options.pickerHeight;
799
- dialogContainer.addRowDefinition(1.0, false);
800
- }
801
- advancedTexture.addControl(dialogContainer);
802
- // Swatch drawer which contains all saved color buttons
803
- if (options.savedColors) {
804
- swatchDrawer = new Grid();
805
- swatchDrawer.name = "Swatch Drawer";
806
- swatchDrawer.verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;
807
- swatchDrawer.background = buttonBackgroundColor;
808
- swatchDrawer.width = options.pickerWidth;
809
- var initialRows = options.savedColors.length / options.numSwatchesPerLine;
810
- if (initialRows == 0) {
811
- var gutterCount = 0;
812
- }
813
- else {
814
- var gutterCount = initialRows + 1;
815
- }
816
- swatchDrawer.height = ((swatchSize * initialRows) + (gutterCount * gutterSize)).toString() + "px";
817
- swatchDrawer.top = Math.floor(swatchSize * 0.25).toString() + "px";
818
- for (var i = 0; i < (Math.ceil(options.savedColors.length / options.numSwatchesPerLine) * 2) + 1; i++) {
819
- if (i % 2 != 0) {
820
- swatchDrawer.addRowDefinition(swatchSize, true);
821
- }
822
- else {
823
- swatchDrawer.addRowDefinition(gutterSize, true);
824
- }
825
- }
826
- for (var i = 0; i < options.numSwatchesPerLine * 2 + 1; i++) {
827
- if (i % 2 != 0) {
828
- swatchDrawer.addColumnDefinition(swatchSize, true);
829
- }
830
- else {
831
- swatchDrawer.addColumnDefinition(gutterSize, true);
832
- }
833
- }
834
- dialogContainer.addControl(swatchDrawer, 1, 0);
835
- }
836
- // Picker container
837
- var pickerPanel = new Grid();
838
- pickerPanel.name = "Picker Panel";
839
- pickerPanel.height = options.pickerHeight;
840
- var panelHead = parseInt(options.headerHeight) / parseInt(options.pickerHeight);
841
- var pickerPanelRows = [panelHead, 1.0 - panelHead];
842
- pickerPanel.addRowDefinition(pickerPanelRows[0], false);
843
- pickerPanel.addRowDefinition(pickerPanelRows[1], false);
844
- dialogContainer.addControl(pickerPanel, 0, 0);
845
- // Picker container header
846
- var header = new Rectangle();
847
- header.name = "Dialogue Header Bar";
848
- header.background = "#cccccc";
849
- header.thickness = 0;
850
- pickerPanel.addControl(header, 0, 0);
851
- // Header close button
852
- var closeButton = Button.CreateSimpleButton("closeButton", "a");
853
- closeButton.fontFamily = "BabylonJSglyphs";
854
- var headerColor3 = Color3.FromHexString(header.background);
855
- closeIconColor = new Color3(1.0 - headerColor3.r, 1.0 - headerColor3.g, 1.0 - headerColor3.b);
856
- closeButton.color = closeIconColor.toHexString();
857
- closeButton.fontSize = Math.floor(parseInt(options.headerHeight) * 0.6);
858
- closeButton.textBlock.textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;
859
- closeButton.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_RIGHT;
860
- closeButton.height = closeButton.width = options.headerHeight;
861
- closeButton.background = header.background;
862
- closeButton.thickness = 0;
863
- closeButton.pointerDownAnimation = function () {
864
- };
865
- closeButton.pointerUpAnimation = function () {
866
- closeButton.background = header.background;
867
- };
868
- closeButton.pointerEnterAnimation = function () {
869
- closeButton.color = header.background;
870
- closeButton.background = "red";
871
- };
872
- closeButton.pointerOutAnimation = function () {
873
- closeButton.color = closeIconColor.toHexString();
874
- closeButton.background = header.background;
875
- };
876
- closeButton.onPointerClickObservable.add(function () {
877
- closePicker(currentSwatch.background);
878
- });
879
- pickerPanel.addControl(closeButton, 0, 0);
880
- // Dialog container body
881
- var dialogBody = new Grid();
882
- dialogBody.name = "Dialogue Body";
883
- dialogBody.background = buttonBackgroundColor;
884
- var dialogBodyCols = [0.4375, 0.5625];
885
- dialogBody.addRowDefinition(1.0, false);
886
- dialogBody.addColumnDefinition(dialogBodyCols[0], false);
887
- dialogBody.addColumnDefinition(dialogBodyCols[1], false);
888
- pickerPanel.addControl(dialogBody, 1, 0);
889
- // Picker grid
890
- var pickerGrid = new Grid();
891
- pickerGrid.name = "Picker Grid";
892
- pickerGrid.addRowDefinition(0.85, false);
893
- pickerGrid.addRowDefinition(0.15, false);
894
- dialogBody.addControl(pickerGrid, 0, 0);
895
- // Picker control
896
- picker = new ColorPicker();
897
- picker.name = "GUI Color Picker";
898
- if (options.pickerHeight < options.pickerWidth) {
899
- picker.width = 0.89;
493
+ // Picker container
494
+ var pickerPanel = new Grid();
495
+ pickerPanel.name = "Picker Panel";
496
+ pickerPanel.height = options.pickerHeight;
497
+ var panelHead = parseInt(options.headerHeight) / parseInt(options.pickerHeight);
498
+ var pickerPanelRows = [panelHead, 1.0 - panelHead];
499
+ pickerPanel.addRowDefinition(pickerPanelRows[0], false);
500
+ pickerPanel.addRowDefinition(pickerPanelRows[1], false);
501
+ dialogContainer.addControl(pickerPanel, 0, 0);
502
+ // Picker container header
503
+ var header = new Rectangle();
504
+ header.name = "Dialogue Header Bar";
505
+ header.background = "#cccccc";
506
+ header.thickness = 0;
507
+ pickerPanel.addControl(header, 0, 0);
508
+ // Header close button
509
+ var closeButton = Button.CreateSimpleButton("closeButton", "a");
510
+ closeButton.fontFamily = "coreglyphs";
511
+ var headerColor3 = Color3.FromHexString(header.background);
512
+ var closeIconColor = new Color3(1.0 - headerColor3.r, 1.0 - headerColor3.g, 1.0 - headerColor3.b);
513
+ closeButton.color = closeIconColor.toHexString();
514
+ closeButton.fontSize = Math.floor(parseInt(options.headerHeight) * 0.6);
515
+ closeButton.textBlock.textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;
516
+ closeButton.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_RIGHT;
517
+ closeButton.height = closeButton.width = options.headerHeight;
518
+ closeButton.background = header.background;
519
+ closeButton.thickness = 0;
520
+ closeButton.pointerDownAnimation = function () { };
521
+ closeButton.pointerUpAnimation = function () {
522
+ closeButton.background = header.background;
523
+ };
524
+ closeButton.pointerEnterAnimation = function () {
525
+ closeButton.color = header.background;
526
+ closeButton.background = "red";
527
+ };
528
+ closeButton.pointerOutAnimation = function () {
529
+ closeButton.color = closeIconColor.toHexString();
530
+ closeButton.background = header.background;
531
+ };
532
+ closeButton.onPointerClickObservable.add(function () {
533
+ closePicker(currentSwatch.background);
534
+ });
535
+ pickerPanel.addControl(closeButton, 0, 0);
536
+ // Dialog container body
537
+ var dialogBody = new Grid();
538
+ dialogBody.name = "Dialogue Body";
539
+ dialogBody.background = buttonBackgroundColor;
540
+ var dialogBodyCols = [0.4375, 0.5625];
541
+ dialogBody.addRowDefinition(1.0, false);
542
+ dialogBody.addColumnDefinition(dialogBodyCols[0], false);
543
+ dialogBody.addColumnDefinition(dialogBodyCols[1], false);
544
+ pickerPanel.addControl(dialogBody, 1, 0);
545
+ // Picker grid
546
+ var pickerGrid = new Grid();
547
+ pickerGrid.name = "Picker Grid";
548
+ pickerGrid.addRowDefinition(0.85, false);
549
+ pickerGrid.addRowDefinition(0.15, false);
550
+ dialogBody.addControl(pickerGrid, 0, 0);
551
+ // Picker control
552
+ var picker = new ColorPicker();
553
+ picker.name = "GUI Color Picker";
554
+ if (options.pickerHeight < options.pickerWidth) {
555
+ picker.width = 0.89;
900
556
  }
901
557
  else {
902
558
  picker.height = 0.89;
@@ -910,6 +566,7 @@ var ColorPicker = /** @class */ (function (_super) {
910
566
  editSwatches(false);
911
567
  });
912
568
  picker.onValueChangedObservable.add(function (value) {
569
+ // value is a color3
913
570
  if (activeField == picker.name) {
914
571
  updateValues(value, picker.name);
915
572
  }
@@ -947,13 +604,14 @@ var ColorPicker = /** @class */ (function (_super) {
947
604
  activeSwatches.addRowDefinition(0.5, false);
948
605
  activeSwatches.addRowDefinition(0.5, false);
949
606
  pickerSwatches.addControl(activeSwatches, 2, 0);
950
- var labelWidth = (Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[0] * 0.11));
951
- var labelHeight = (Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * pickeSwatchesRows[1] * 0.5));
607
+ var labelWidth = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[0] * 0.11);
608
+ var labelHeight = Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * pickeSwatchesRows[1] * 0.5);
609
+ var labelTextSize;
952
610
  if (options.pickerWidth > options.pickerHeight) {
953
- var labelTextSize = labelHeight;
611
+ labelTextSize = labelHeight;
954
612
  }
955
613
  else {
956
- var labelTextSize = labelWidth;
614
+ labelTextSize = labelWidth;
957
615
  }
958
616
  // New color swatch and previous color button
959
617
  var newText = new TextBlock();
@@ -962,7 +620,7 @@ var ColorPicker = /** @class */ (function (_super) {
962
620
  newText.color = buttonColor;
963
621
  newText.fontSize = labelTextSize;
964
622
  pickerSwatches.addControl(newText, 1, 0);
965
- newSwatch = new Rectangle();
623
+ var newSwatch = new Rectangle();
966
624
  newSwatch.name = "New Color Swatch";
967
625
  newSwatch.background = options.lastColor;
968
626
  newSwatch.thickness = 0;
@@ -1003,8 +661,8 @@ var ColorPicker = /** @class */ (function (_super) {
1003
661
  buttonGrid.addRowDefinition(buttonGridRows, false);
1004
662
  pickerSwatchesButtons.addControl(buttonGrid, 0, 1);
1005
663
  // Determine pixel width and height for all buttons from overall panel dimensions
1006
- buttonWidth = (Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[1] * 0.67)).toString() + "px";
1007
- buttonHeight = (Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * (parseFloat(buttonGrid.height.toString()) / 100) * buttonGridRows * 0.7)).toString() + "px";
664
+ var buttonWidth = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[1] * 0.67).toString() + "px";
665
+ var buttonHeight = Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * (parseFloat(buttonGrid.height.toString()) / 100) * buttonGridRows * 0.7).toString() + "px";
1008
666
  // Determine button type size
1009
667
  if (parseFloat(buttonWidth) > parseFloat(buttonHeight)) {
1010
668
  buttonFontSize = Math.floor(parseFloat(buttonHeight) * 0.45);
@@ -1021,8 +679,12 @@ var ColorPicker = /** @class */ (function (_super) {
1021
679
  butOK.color = buttonColor;
1022
680
  butOK.fontSize = buttonFontSize;
1023
681
  butOK.background = buttonBackgroundColor;
1024
- butOK.onPointerEnterObservable.add(function () { butOK.background = buttonBackgroundHoverColor; });
1025
- butOK.onPointerOutObservable.add(function () { butOK.background = buttonBackgroundColor; });
682
+ butOK.onPointerEnterObservable.add(function () {
683
+ butOK.background = buttonBackgroundHoverColor;
684
+ });
685
+ butOK.onPointerOutObservable.add(function () {
686
+ butOK.background = buttonBackgroundColor;
687
+ });
1026
688
  butOK.pointerDownAnimation = function () {
1027
689
  butOK.background = buttonBackgroundClickColor;
1028
690
  };
@@ -1042,8 +704,12 @@ var ColorPicker = /** @class */ (function (_super) {
1042
704
  butCancel.color = buttonColor;
1043
705
  butCancel.fontSize = buttonFontSize;
1044
706
  butCancel.background = buttonBackgroundColor;
1045
- butCancel.onPointerEnterObservable.add(function () { butCancel.background = buttonBackgroundHoverColor; });
1046
- butCancel.onPointerOutObservable.add(function () { butCancel.background = buttonBackgroundColor; });
707
+ butCancel.onPointerEnterObservable.add(function () {
708
+ butCancel.background = buttonBackgroundHoverColor;
709
+ });
710
+ butCancel.onPointerOutObservable.add(function () {
711
+ butCancel.background = buttonBackgroundColor;
712
+ });
1047
713
  butCancel.pointerDownAnimation = function () {
1048
714
  butCancel.background = buttonBackgroundClickColor;
1049
715
  };
@@ -1056,7 +722,7 @@ var ColorPicker = /** @class */ (function (_super) {
1056
722
  });
1057
723
  buttonGrid.addControl(butCancel, 1, 0);
1058
724
  if (options.savedColors) {
1059
- var butSave = Button.CreateSimpleButton("butSave", "Save");
725
+ butSave = Button.CreateSimpleButton("butSave", "Save");
1060
726
  butSave.width = buttonWidth;
1061
727
  butSave.height = buttonHeight;
1062
728
  butSave.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;
@@ -1122,7 +788,7 @@ var ColorPicker = /** @class */ (function (_super) {
1122
788
  pickerColorValues.addRowDefinition(0.14, false);
1123
789
  pickerBodyRight.addControl(pickerColorValues, 1, 0);
1124
790
  // RGB values text boxes
1125
- currentColor = Color3.FromHexString(options.lastColor);
791
+ var currentColor = Color3.FromHexString(options.lastColor);
1126
792
  var rgbValuesQuadrant = new Grid();
1127
793
  rgbValuesQuadrant.name = "RGB Values";
1128
794
  rgbValuesQuadrant.width = 0.82;
@@ -1135,14 +801,14 @@ var ColorPicker = /** @class */ (function (_super) {
1135
801
  rgbValuesQuadrant.addColumnDefinition(0.7, false);
1136
802
  pickerColorValues.addControl(rgbValuesQuadrant, 1, 0);
1137
803
  for (var i = 0; i < inputFieldLabels.length; i++) {
1138
- var labelText = new TextBlock();
1139
- labelText.text = inputFieldLabels[i];
1140
- labelText.color = buttonColor;
1141
- labelText.fontSize = buttonFontSize;
1142
- rgbValuesQuadrant.addControl(labelText, i, 0);
804
+ var labelText_1 = new TextBlock();
805
+ labelText_1.text = inputFieldLabels[i];
806
+ labelText_1.color = buttonColor;
807
+ labelText_1.fontSize = buttonFontSize;
808
+ rgbValuesQuadrant.addControl(labelText_1, i, 0);
1143
809
  }
1144
810
  // Input fields for RGB values
1145
- rValInt = new InputText();
811
+ var rValInt = new InputText();
1146
812
  rValInt.width = 0.83;
1147
813
  rValInt.height = 0.72;
1148
814
  rValInt.name = "rIntField";
@@ -1170,7 +836,7 @@ var ColorPicker = /** @class */ (function (_super) {
1170
836
  }
1171
837
  });
1172
838
  rgbValuesQuadrant.addControl(rValInt, 0, 1);
1173
- gValInt = new InputText();
839
+ var gValInt = new InputText();
1174
840
  gValInt.width = 0.83;
1175
841
  gValInt.height = 0.72;
1176
842
  gValInt.name = "gIntField";
@@ -1198,7 +864,7 @@ var ColorPicker = /** @class */ (function (_super) {
1198
864
  }
1199
865
  });
1200
866
  rgbValuesQuadrant.addControl(gValInt, 1, 1);
1201
- bValInt = new InputText();
867
+ var bValInt = new InputText();
1202
868
  bValInt.width = 0.83;
1203
869
  bValInt.height = 0.72;
1204
870
  bValInt.name = "bIntField";
@@ -1226,7 +892,7 @@ var ColorPicker = /** @class */ (function (_super) {
1226
892
  }
1227
893
  });
1228
894
  rgbValuesQuadrant.addControl(bValInt, 2, 1);
1229
- rValDec = new InputText();
895
+ var rValDec = new InputText();
1230
896
  rValDec.width = 0.95;
1231
897
  rValDec.height = 0.72;
1232
898
  rValDec.name = "rDecField";
@@ -1254,7 +920,7 @@ var ColorPicker = /** @class */ (function (_super) {
1254
920
  }
1255
921
  });
1256
922
  rgbValuesQuadrant.addControl(rValDec, 0, 2);
1257
- gValDec = new InputText();
923
+ var gValDec = new InputText();
1258
924
  gValDec.width = 0.95;
1259
925
  gValDec.height = 0.72;
1260
926
  gValDec.name = "gDecField";
@@ -1282,7 +948,7 @@ var ColorPicker = /** @class */ (function (_super) {
1282
948
  }
1283
949
  });
1284
950
  rgbValuesQuadrant.addControl(gValDec, 1, 2);
1285
- bValDec = new InputText();
951
+ var bValDec = new InputText();
1286
952
  bValDec.width = 0.95;
1287
953
  bValDec.height = 0.72;
1288
954
  bValDec.name = "bDecField";
@@ -1323,7 +989,7 @@ var ColorPicker = /** @class */ (function (_super) {
1323
989
  labelText.color = buttonColor;
1324
990
  labelText.fontSize = buttonFontSize;
1325
991
  hexValueQuadrant.addControl(labelText, 0, 0);
1326
- hexVal = new InputText();
992
+ var hexVal = new InputText();
1327
993
  hexVal.width = 0.96;
1328
994
  hexVal.height = 0.72;
1329
995
  hexVal.name = "hexField";
@@ -1379,6 +1045,357 @@ var ColorPicker = /** @class */ (function (_super) {
1379
1045
  if (options.savedColors && options.savedColors.length > 0) {
1380
1046
  updateSwatches("", butSave);
1381
1047
  }
1048
+ /**
1049
+ * Will update all values for InputText and ColorPicker controls based on the BABYLON.Color3 passed to this function.
1050
+ * Each InputText control and the ColorPicker control will be tested to see if they are the activeField and if they
1051
+ * are will receive no update. This is to prevent the input from the user being overwritten.
1052
+ * @param value
1053
+ * @param inputField
1054
+ */
1055
+ function updateValues(value, inputField) {
1056
+ activeField = inputField;
1057
+ var pickedColor = value.toHexString();
1058
+ newSwatch.background = pickedColor;
1059
+ if (rValInt.name != activeField) {
1060
+ rValInt.text = Math.floor(value.r * 255).toString();
1061
+ }
1062
+ if (gValInt.name != activeField) {
1063
+ gValInt.text = Math.floor(value.g * 255).toString();
1064
+ }
1065
+ if (bValInt.name != activeField) {
1066
+ bValInt.text = Math.floor(value.b * 255).toString();
1067
+ }
1068
+ if (rValDec.name != activeField) {
1069
+ rValDec.text = value.r.toString();
1070
+ }
1071
+ if (gValDec.name != activeField) {
1072
+ gValDec.text = value.g.toString();
1073
+ }
1074
+ if (bValDec.name != activeField) {
1075
+ bValDec.text = value.b.toString();
1076
+ }
1077
+ if (hexVal.name != activeField) {
1078
+ var minusPound_1 = pickedColor.split("#");
1079
+ hexVal.text = minusPound_1[1];
1080
+ }
1081
+ if (picker.name != activeField) {
1082
+ picker.value = value;
1083
+ }
1084
+ }
1085
+ // When the user enters an integer for R, G, or B we check to make sure it is a valid number and replace if not.
1086
+ function updateInt(field, channel) {
1087
+ var newValue = field.text;
1088
+ var checkVal = /[^0-9]/g.test(newValue);
1089
+ if (checkVal) {
1090
+ field.text = lastVal;
1091
+ return;
1092
+ }
1093
+ else {
1094
+ if (newValue != "") {
1095
+ if (Math.floor(parseInt(newValue)) < 0) {
1096
+ newValue = "0";
1097
+ }
1098
+ else if (Math.floor(parseInt(newValue)) > 255) {
1099
+ newValue = "255";
1100
+ }
1101
+ else if (isNaN(parseInt(newValue))) {
1102
+ newValue = "0";
1103
+ }
1104
+ }
1105
+ if (activeField == field.name) {
1106
+ lastVal = newValue;
1107
+ }
1108
+ }
1109
+ if (newValue != "") {
1110
+ newValue = parseInt(newValue).toString();
1111
+ field.text = newValue;
1112
+ var newSwatchRGB = Color3.FromHexString(newSwatch.background);
1113
+ if (activeField == field.name) {
1114
+ if (channel == "r") {
1115
+ updateValues(new Color3(parseInt(newValue) / 255, newSwatchRGB.g, newSwatchRGB.b), field.name);
1116
+ }
1117
+ else if (channel == "g") {
1118
+ updateValues(new Color3(newSwatchRGB.r, parseInt(newValue) / 255, newSwatchRGB.b), field.name);
1119
+ }
1120
+ else {
1121
+ updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseInt(newValue) / 255), field.name);
1122
+ }
1123
+ }
1124
+ }
1125
+ }
1126
+ // When the user enters a float for R, G, or B we check to make sure it is a valid number and replace if not.
1127
+ function updateFloat(field, channel) {
1128
+ var newValue = field.text;
1129
+ var checkVal = /[^0-9.]/g.test(newValue);
1130
+ if (checkVal) {
1131
+ field.text = lastVal;
1132
+ return;
1133
+ }
1134
+ else {
1135
+ if (newValue != "" && newValue != "." && parseFloat(newValue) != 0) {
1136
+ if (parseFloat(newValue) < 0.0) {
1137
+ newValue = "0.0";
1138
+ }
1139
+ else if (parseFloat(newValue) > 1.0) {
1140
+ newValue = "1.0";
1141
+ }
1142
+ else if (isNaN(parseFloat(newValue))) {
1143
+ newValue = "0.0";
1144
+ }
1145
+ }
1146
+ if (activeField == field.name) {
1147
+ lastVal = newValue;
1148
+ }
1149
+ }
1150
+ if (newValue != "" && newValue != "." && parseFloat(newValue) != 0) {
1151
+ newValue = parseFloat(newValue).toString();
1152
+ field.text = newValue;
1153
+ }
1154
+ else {
1155
+ newValue = "0.0";
1156
+ }
1157
+ var newSwatchRGB = Color3.FromHexString(newSwatch.background);
1158
+ if (activeField == field.name) {
1159
+ if (channel == "r") {
1160
+ updateValues(new Color3(parseFloat(newValue), newSwatchRGB.g, newSwatchRGB.b), field.name);
1161
+ }
1162
+ else if (channel == "g") {
1163
+ updateValues(new Color3(newSwatchRGB.r, parseFloat(newValue), newSwatchRGB.b), field.name);
1164
+ }
1165
+ else {
1166
+ updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseFloat(newValue)), field.name);
1167
+ }
1168
+ }
1169
+ }
1170
+ // Removes the current index from the savedColors array. Drawer can then be regenerated.
1171
+ function deleteSwatch(index) {
1172
+ if (options.savedColors) {
1173
+ options.savedColors.splice(index, 1);
1174
+ }
1175
+ if (options.savedColors && options.savedColors.length == 0) {
1176
+ setEditButtonVisibility(false);
1177
+ editSwatchMode = false;
1178
+ }
1179
+ }
1180
+ // Creates and styles an individual swatch when updateSwatches is called.
1181
+ function createSwatch() {
1182
+ if (options.savedColors && options.savedColors[swatchNumber]) {
1183
+ var icon = void 0;
1184
+ if (editSwatchMode) {
1185
+ icon = "b";
1186
+ }
1187
+ else {
1188
+ icon = "";
1189
+ }
1190
+ var swatch_1 = Button.CreateSimpleButton("Swatch_" + swatchNumber, icon);
1191
+ swatch_1.fontFamily = "coreglyphs";
1192
+ var swatchColor = Color3.FromHexString(options.savedColors[swatchNumber]);
1193
+ var swatchLuminence = swatchColor.r + swatchColor.g + swatchColor.b;
1194
+ // Set color of outline and textBlock based on luminance of the color swatch so feedback always visible
1195
+ if (swatchLuminence > luminanceLimit) {
1196
+ swatch_1.color = iconColorDark;
1197
+ }
1198
+ else {
1199
+ swatch_1.color = iconColorLight;
1200
+ }
1201
+ swatch_1.fontSize = Math.floor(swatchSize * 0.7);
1202
+ swatch_1.textBlock.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;
1203
+ swatch_1.height = swatch_1.width = swatchSize.toString() + "px";
1204
+ swatch_1.background = options.savedColors[swatchNumber];
1205
+ swatch_1.thickness = 2;
1206
+ var metadata_1 = swatchNumber;
1207
+ swatch_1.pointerDownAnimation = function () {
1208
+ swatch_1.thickness = 4;
1209
+ };
1210
+ swatch_1.pointerUpAnimation = function () {
1211
+ swatch_1.thickness = 3;
1212
+ };
1213
+ swatch_1.pointerEnterAnimation = function () {
1214
+ swatch_1.thickness = 3;
1215
+ };
1216
+ swatch_1.pointerOutAnimation = function () {
1217
+ swatch_1.thickness = 2;
1218
+ };
1219
+ swatch_1.onPointerClickObservable.add(function () {
1220
+ if (!editSwatchMode) {
1221
+ if (options.savedColors) {
1222
+ updateValues(Color3.FromHexString(options.savedColors[metadata_1]), swatch_1.name);
1223
+ }
1224
+ }
1225
+ else {
1226
+ deleteSwatch(metadata_1);
1227
+ updateSwatches("", butSave);
1228
+ }
1229
+ });
1230
+ return swatch_1;
1231
+ }
1232
+ else {
1233
+ return null;
1234
+ }
1235
+ }
1236
+ // Mode switch to render button text and close symbols on swatch controls
1237
+ function editSwatches(mode) {
1238
+ if (mode !== undefined) {
1239
+ editSwatchMode = mode;
1240
+ }
1241
+ var thisButton;
1242
+ if (editSwatchMode) {
1243
+ for (var i = 0; i < swatchDrawer.children.length; i++) {
1244
+ thisButton = swatchDrawer.children[i];
1245
+ thisButton.textBlock.text = "b";
1246
+ }
1247
+ if (butEdit !== undefined) {
1248
+ butEdit.textBlock.text = "Done";
1249
+ }
1250
+ }
1251
+ else {
1252
+ for (var i = 0; i < swatchDrawer.children.length; i++) {
1253
+ thisButton = swatchDrawer.children[i];
1254
+ thisButton.textBlock.text = "";
1255
+ }
1256
+ if (butEdit !== undefined) {
1257
+ butEdit.textBlock.text = "Edit";
1258
+ }
1259
+ }
1260
+ }
1261
+ /**
1262
+ * When Save Color button is pressed this function will first create a swatch drawer if one is not already
1263
+ * made. Then all controls are removed from the drawer and we step through the savedColors array and
1264
+ * creates one swatch per color. It will also set the height of the drawer control based on how many
1265
+ * saved colors there are and how many can be stored per row.
1266
+ * @param color
1267
+ * @param button
1268
+ */
1269
+ function updateSwatches(color, button) {
1270
+ if (options.savedColors) {
1271
+ if (color != "") {
1272
+ options.savedColors.push(color);
1273
+ }
1274
+ swatchNumber = 0;
1275
+ swatchDrawer.clearControls();
1276
+ var rowCount = Math.ceil(options.savedColors.length / options.numSwatchesPerLine);
1277
+ var gutterCount = void 0;
1278
+ if (rowCount == 0) {
1279
+ gutterCount = 0;
1280
+ }
1281
+ else {
1282
+ gutterCount = rowCount + 1;
1283
+ }
1284
+ if (swatchDrawer.rowCount != rowCount + gutterCount) {
1285
+ var currentRows = swatchDrawer.rowCount;
1286
+ for (var i = 0; i < currentRows; i++) {
1287
+ swatchDrawer.removeRowDefinition(0);
1288
+ }
1289
+ for (var i = 0; i < rowCount + gutterCount; i++) {
1290
+ if (i % 2) {
1291
+ swatchDrawer.addRowDefinition(swatchSize, true);
1292
+ }
1293
+ else {
1294
+ swatchDrawer.addRowDefinition(gutterSize, true);
1295
+ }
1296
+ }
1297
+ }
1298
+ swatchDrawer.height = (swatchSize * rowCount + gutterCount * gutterSize).toString() + "px";
1299
+ for (var y = 1, thisRow = 1; y < rowCount + gutterCount; y += 2, thisRow++) {
1300
+ // Determine number of buttons to create per row based on the button limit per row and number of saved colors
1301
+ var totalButtonsThisRow = void 0;
1302
+ if (options.savedColors.length > thisRow * options.numSwatchesPerLine) {
1303
+ totalButtonsThisRow = options.numSwatchesPerLine;
1304
+ }
1305
+ else {
1306
+ totalButtonsThisRow = options.savedColors.length - (thisRow - 1) * options.numSwatchesPerLine;
1307
+ }
1308
+ var buttonIterations = Math.min(Math.max(totalButtonsThisRow, 0), options.numSwatchesPerLine);
1309
+ for (var x = 0, w = 1; x < buttonIterations; x++) {
1310
+ if (x > options.numSwatchesPerLine) {
1311
+ continue;
1312
+ }
1313
+ var swatch = createSwatch();
1314
+ if (swatch != null) {
1315
+ swatchDrawer.addControl(swatch, y, w);
1316
+ w += 2;
1317
+ swatchNumber++;
1318
+ }
1319
+ else {
1320
+ continue;
1321
+ }
1322
+ }
1323
+ }
1324
+ if (options.savedColors.length >= options.swatchLimit) {
1325
+ disableButton(button, true);
1326
+ }
1327
+ else {
1328
+ disableButton(button, false);
1329
+ }
1330
+ }
1331
+ }
1332
+ // Shows or hides edit swatches button depending on if there are saved swatches
1333
+ function setEditButtonVisibility(enableButton) {
1334
+ if (enableButton) {
1335
+ butEdit = Button.CreateSimpleButton("butEdit", "Edit");
1336
+ butEdit.width = buttonWidth;
1337
+ butEdit.height = buttonHeight;
1338
+ butEdit.left = Math.floor(parseInt(buttonWidth) * 0.1).toString() + "px";
1339
+ butEdit.top = (parseFloat(butEdit.left) * -1).toString() + "px";
1340
+ butEdit.verticalAlignment = Control.VERTICAL_ALIGNMENT_BOTTOM;
1341
+ butEdit.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;
1342
+ butEdit.thickness = 2;
1343
+ butEdit.color = buttonColor;
1344
+ butEdit.fontSize = buttonFontSize;
1345
+ butEdit.background = buttonBackgroundColor;
1346
+ butEdit.onPointerEnterObservable.add(function () {
1347
+ butEdit.background = buttonBackgroundHoverColor;
1348
+ });
1349
+ butEdit.onPointerOutObservable.add(function () {
1350
+ butEdit.background = buttonBackgroundColor;
1351
+ });
1352
+ butEdit.pointerDownAnimation = function () {
1353
+ butEdit.background = buttonBackgroundClickColor;
1354
+ };
1355
+ butEdit.pointerUpAnimation = function () {
1356
+ butEdit.background = buttonBackgroundHoverColor;
1357
+ };
1358
+ butEdit.onPointerClickObservable.add(function () {
1359
+ if (editSwatchMode) {
1360
+ editSwatchMode = false;
1361
+ }
1362
+ else {
1363
+ editSwatchMode = true;
1364
+ }
1365
+ editSwatches();
1366
+ });
1367
+ pickerGrid.addControl(butEdit, 1, 0);
1368
+ }
1369
+ else {
1370
+ pickerGrid.removeControl(butEdit);
1371
+ }
1372
+ }
1373
+ // Called when the user hits the limit of saved colors in the drawer.
1374
+ function disableButton(button, disabled) {
1375
+ if (disabled) {
1376
+ button.color = buttonDisabledColor;
1377
+ button.background = buttonDisabledBackgroundColor;
1378
+ }
1379
+ else {
1380
+ button.color = buttonColor;
1381
+ button.background = buttonBackgroundColor;
1382
+ }
1383
+ }
1384
+ // Passes last chosen color back to scene and kills dialog by removing from AdvancedDynamicTexture
1385
+ function closePicker(color) {
1386
+ if (options.savedColors && options.savedColors.length > 0) {
1387
+ resolve({
1388
+ savedColors: options.savedColors,
1389
+ pickedColor: color,
1390
+ });
1391
+ }
1392
+ else {
1393
+ resolve({
1394
+ pickedColor: color,
1395
+ });
1396
+ }
1397
+ advancedTexture.removeControl(dialogContainer);
1398
+ }
1382
1399
  });
1383
1400
  };
1384
1401
  ColorPicker._Epsilon = 0.000001;