@babylonjs/gui 5.0.0-rc.3 → 5.0.0-rc.6
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.
- package/2D/adtInstrumentation.d.ts +2 -2
- package/2D/adtInstrumentation.js.map +1 -1
- package/2D/advancedDynamicTexture.d.ts +43 -20
- package/2D/advancedDynamicTexture.js +45 -22
- package/2D/advancedDynamicTexture.js.map +1 -1
- package/2D/controls/button.d.ts +50 -12
- package/2D/controls/button.js +48 -10
- package/2D/controls/button.js.map +1 -1
- package/2D/controls/checkbox.d.ts +17 -9
- package/2D/controls/checkbox.js +17 -7
- package/2D/controls/checkbox.js.map +1 -1
- package/2D/controls/colorpicker.d.ts +21 -8
- package/2D/controls/colorpicker.js +540 -523
- package/2D/controls/colorpicker.js.map +1 -1
- package/2D/controls/container.d.ts +63 -18
- package/2D/controls/container.js +63 -18
- package/2D/controls/container.js.map +1 -1
- package/2D/controls/control.d.ts +172 -49
- package/2D/controls/control.js +166 -41
- package/2D/controls/control.js.map +1 -1
- package/2D/controls/displayGrid.d.ts +2 -4
- package/2D/controls/displayGrid.js +3 -3
- package/2D/controls/displayGrid.js.map +1 -1
- package/2D/controls/ellipse.d.ts +1 -1
- package/2D/controls/ellipse.js +2 -2
- package/2D/controls/ellipse.js.map +1 -1
- package/2D/controls/focusableButton.d.ts +13 -6
- package/2D/controls/focusableButton.js +10 -3
- package/2D/controls/focusableButton.js.map +1 -1
- package/2D/controls/focusableControl.d.ts +11 -11
- package/2D/controls/focusableControl.js.map +1 -1
- package/2D/controls/grid.d.ts +7 -3
- package/2D/controls/grid.js +9 -5
- package/2D/controls/grid.js.map +1 -1
- package/2D/controls/image.d.ts +15 -8
- package/2D/controls/image.js +29 -21
- package/2D/controls/image.js.map +1 -1
- package/2D/controls/index.js.map +1 -1
- package/2D/controls/inputPassword.d.ts +1 -1
- package/2D/controls/inputPassword.js +2 -2
- package/2D/controls/inputPassword.js.map +1 -1
- package/2D/controls/inputText.d.ts +34 -15
- package/2D/controls/inputText.js +47 -24
- package/2D/controls/inputText.js.map +1 -1
- package/2D/controls/line.d.ts +4 -4
- package/2D/controls/line.js +5 -5
- package/2D/controls/line.js.map +1 -1
- package/2D/controls/multiLine.d.ts +9 -11
- package/2D/controls/multiLine.js +8 -8
- package/2D/controls/multiLine.js.map +1 -1
- package/2D/controls/radioButton.d.ts +4 -4
- package/2D/controls/radioButton.js +2 -2
- package/2D/controls/radioButton.js.map +1 -1
- package/2D/controls/rectangle.d.ts +1 -1
- package/2D/controls/rectangle.js +2 -2
- package/2D/controls/rectangle.js.map +1 -1
- package/2D/controls/scrollViewers/scrollViewer.d.ts +14 -7
- package/2D/controls/scrollViewers/scrollViewer.js +14 -13
- package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
- package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +20 -8
- package/2D/controls/scrollViewers/scrollViewerWindow.js +25 -10
- package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
- package/2D/controls/selector.d.ts +79 -25
- package/2D/controls/selector.js +93 -30
- package/2D/controls/selector.js.map +1 -1
- package/2D/controls/sliders/baseSlider.d.ts +9 -5
- package/2D/controls/sliders/baseSlider.js +11 -7
- package/2D/controls/sliders/baseSlider.js.map +1 -1
- package/2D/controls/sliders/imageBasedSlider.d.ts +10 -8
- package/2D/controls/sliders/imageBasedSlider.js +10 -6
- package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
- package/2D/controls/sliders/imageScrollBar.d.ts +8 -4
- package/2D/controls/sliders/imageScrollBar.js +10 -3
- package/2D/controls/sliders/imageScrollBar.js.map +1 -1
- package/2D/controls/sliders/scrollBar.d.ts +8 -4
- package/2D/controls/sliders/scrollBar.js +10 -3
- package/2D/controls/sliders/scrollBar.js.map +1 -1
- package/2D/controls/sliders/slider.d.ts +2 -4
- package/2D/controls/sliders/slider.js +6 -6
- package/2D/controls/sliders/slider.js.map +1 -1
- package/2D/controls/stackPanel.d.ts +11 -3
- package/2D/controls/stackPanel.js +16 -6
- package/2D/controls/stackPanel.js.map +1 -1
- package/2D/controls/statics.js +2 -0
- package/2D/controls/statics.js.map +1 -1
- package/2D/controls/textBlock.d.ts +9 -6
- package/2D/controls/textBlock.js +11 -6
- package/2D/controls/textBlock.js.map +1 -1
- package/2D/controls/textWrapper.js.map +1 -1
- package/2D/controls/toggleButton.d.ts +43 -9
- package/2D/controls/toggleButton.js +40 -6
- package/2D/controls/toggleButton.js.map +1 -1
- package/2D/controls/virtualKeyboard.d.ts +2 -2
- package/2D/controls/virtualKeyboard.js +6 -6
- package/2D/controls/virtualKeyboard.js.map +1 -1
- package/2D/index.js.map +1 -1
- package/2D/math2D.d.ts +2 -2
- package/2D/math2D.js +2 -2
- package/2D/math2D.js.map +1 -1
- package/2D/measure.d.ts +4 -4
- package/2D/measure.js +6 -16
- package/2D/measure.js.map +1 -1
- package/2D/multiLinePoint.d.ts +3 -3
- package/2D/multiLinePoint.js +3 -3
- package/2D/multiLinePoint.js.map +1 -1
- package/2D/style.d.ts +2 -2
- package/2D/style.js.map +1 -1
- package/2D/valueAndUnit.d.ts +1 -1
- package/2D/valueAndUnit.js +8 -4
- package/2D/valueAndUnit.js.map +1 -1
- package/2D/xmlLoader.d.ts +10 -10
- package/2D/xmlLoader.js +17 -17
- package/2D/xmlLoader.js.map +1 -1
- package/3D/behaviors/defaultBehavior.d.ts +7 -7
- package/3D/behaviors/defaultBehavior.js.map +1 -1
- package/3D/controls/abstractButton3D.d.ts +2 -2
- package/3D/controls/abstractButton3D.js +1 -1
- package/3D/controls/abstractButton3D.js.map +1 -1
- package/3D/controls/button3D.d.ts +4 -4
- package/3D/controls/button3D.js.map +1 -1
- package/3D/controls/container3D.d.ts +3 -3
- package/3D/controls/container3D.js +1 -2
- package/3D/controls/container3D.js.map +1 -1
- package/3D/controls/contentDisplay3D.js +1 -0
- package/3D/controls/contentDisplay3D.js.map +1 -1
- package/3D/controls/control3D.d.ts +53 -17
- package/3D/controls/control3D.js +48 -11
- package/3D/controls/control3D.js.map +1 -1
- package/3D/controls/cylinderPanel.d.ts +2 -2
- package/3D/controls/cylinderPanel.js +2 -2
- package/3D/controls/cylinderPanel.js.map +1 -1
- package/3D/controls/handMenu.d.ts +5 -5
- package/3D/controls/handMenu.js.map +1 -1
- package/3D/controls/holographicBackplate.d.ts +4 -3
- package/3D/controls/holographicBackplate.js +4 -4
- package/3D/controls/holographicBackplate.js.map +1 -1
- package/3D/controls/holographicButton.d.ts +6 -5
- package/3D/controls/holographicButton.js +1 -0
- package/3D/controls/holographicButton.js.map +1 -1
- package/3D/controls/holographicSlate.d.ts +10 -7
- package/3D/controls/holographicSlate.js +17 -14
- package/3D/controls/holographicSlate.js.map +1 -1
- package/3D/controls/index.js.map +1 -1
- package/3D/controls/meshButton3D.d.ts +4 -4
- package/3D/controls/meshButton3D.js +3 -2
- package/3D/controls/meshButton3D.js.map +1 -1
- package/3D/controls/nearMenu.d.ts +5 -5
- package/3D/controls/nearMenu.js +6 -4
- package/3D/controls/nearMenu.js.map +1 -1
- package/3D/controls/planePanel.d.ts +1 -1
- package/3D/controls/planePanel.js.map +1 -1
- package/3D/controls/scatterPanel.d.ts +2 -2
- package/3D/controls/scatterPanel.js +1 -1
- package/3D/controls/scatterPanel.js.map +1 -1
- package/3D/controls/slider3D.d.ts +5 -5
- package/3D/controls/slider3D.js +8 -9
- package/3D/controls/slider3D.js.map +1 -1
- package/3D/controls/spherePanel.d.ts +2 -2
- package/3D/controls/spherePanel.js +2 -2
- package/3D/controls/spherePanel.js.map +1 -1
- package/3D/controls/stackPanel3D.js +3 -3
- package/3D/controls/stackPanel3D.js.map +1 -1
- package/3D/controls/touchButton3D.d.ts +12 -7
- package/3D/controls/touchButton3D.js +11 -5
- package/3D/controls/touchButton3D.js.map +1 -1
- package/3D/controls/touchHolographicButton.d.ts +7 -6
- package/3D/controls/touchHolographicButton.js +7 -7
- package/3D/controls/touchHolographicButton.js.map +1 -1
- package/3D/controls/touchHolographicMenu.d.ts +6 -6
- package/3D/controls/touchHolographicMenu.js +1 -0
- package/3D/controls/touchHolographicMenu.js.map +1 -1
- package/3D/controls/touchMeshButton3D.d.ts +4 -5
- package/3D/controls/touchMeshButton3D.js +3 -3
- package/3D/controls/touchMeshButton3D.js.map +1 -1
- package/3D/controls/volumeBasedPanel.d.ts +10 -9
- package/3D/controls/volumeBasedPanel.js +13 -13
- package/3D/controls/volumeBasedPanel.js.map +1 -1
- package/3D/gizmos/gizmoHandle.d.ts +5 -5
- package/3D/gizmos/gizmoHandle.js.map +1 -1
- package/3D/gizmos/index.js.map +1 -1
- package/3D/gizmos/slateGizmo.d.ts +4 -4
- package/3D/gizmos/slateGizmo.js.map +1 -1
- package/3D/gui3DManager.d.ts +7 -7
- package/3D/gui3DManager.js +3 -3
- package/3D/gui3DManager.js.map +1 -1
- package/3D/index.js.map +1 -1
- package/3D/materials/fluent/fluentMaterial.d.ts +12 -12
- package/3D/materials/fluent/fluentMaterial.js +17 -6
- package/3D/materials/fluent/fluentMaterial.js.map +1 -1
- package/3D/materials/fluent/index.js.map +1 -1
- package/3D/materials/fluent/shaders/fluent.fragment.d.ts +1 -1
- package/3D/materials/fluent/shaders/fluent.fragment.js +4 -2
- package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -1
- package/3D/materials/fluent/shaders/fluent.vertex.d.ts +1 -1
- package/3D/materials/fluent/shaders/fluent.vertex.js +4 -2
- package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -1
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +12 -12
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +48 -13
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
- package/3D/materials/fluentBackplate/index.js.map +1 -1
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +1 -1
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +4 -2
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -1
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +1 -1
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +4 -2
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -1
- package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +12 -12
- package/3D/materials/fluentButton/fluentButtonMaterial.js +8 -6
- package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
- package/3D/materials/fluentButton/index.js.map +1 -1
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +1 -1
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +4 -2
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -1
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +1 -1
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +4 -2
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -1
- package/3D/materials/fluentMaterial.d.ts +1 -1
- package/3D/materials/fluentMaterial.js +1 -1
- package/3D/materials/fluentMaterial.js.map +1 -1
- package/3D/materials/handle/handleMaterial.d.ts +4 -4
- package/3D/materials/handle/handleMaterial.js.map +1 -1
- package/3D/materials/handle/index.js.map +1 -1
- package/3D/materials/handle/shaders/handle.fragment.d.ts +1 -1
- package/3D/materials/handle/shaders/handle.fragment.js +3 -1
- package/3D/materials/handle/shaders/handle.fragment.js.map +1 -1
- package/3D/materials/handle/shaders/handle.vertex.d.ts +1 -1
- package/3D/materials/handle/shaders/handle.vertex.js +4 -2
- package/3D/materials/handle/shaders/handle.vertex.js.map +1 -1
- package/3D/materials/index.js.map +1 -1
- package/3D/materials/mrdl/index.js.map +1 -1
- package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +15 -15
- package/3D/materials/mrdl/mrdlBackplateMaterial.js +42 -15
- package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
- package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +16 -16
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js +88 -23
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +17 -17
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +89 -24
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +1 -1
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +4 -2
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -1
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +1 -1
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +4 -2
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -1
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +1 -1
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +4 -2
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -1
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +1 -1
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +4 -2
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -1
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +1 -1
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +4 -2
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -1
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +1 -1
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +4 -2
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -1
- package/3D/vector3WithInfo.d.ts +1 -1
- package/3D/vector3WithInfo.js.map +1 -1
- package/index.js.map +1 -1
- package/legacy/legacy.d.ts +1 -1
- package/legacy/legacy.js +3 -3
- package/legacy/legacy.js.map +1 -1
- package/package.json +21 -328
- 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
|
|
10
|
-
import { Color3 } from
|
|
11
|
-
import { serialize } from
|
|
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 =
|
|
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 =
|
|
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
|
-
/**
|
|
147
|
-
|
|
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 /
|
|
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,
|
|
168
|
-
lgh.addColorStop(1,
|
|
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,
|
|
173
|
-
lgv.addColorStop(1,
|
|
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 =
|
|
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 =
|
|
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 = (
|
|
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
|
-
|
|
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 - (
|
|
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
|
-
/**
|
|
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
|
|
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 =
|
|
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
|
|
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
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
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
|
-
|
|
480
|
-
|
|
481
|
-
|
|
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
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
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
|
-
|
|
471
|
+
gutterCount = initialRows + 1;
|
|
550
472
|
}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
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
|
-
|
|
480
|
+
swatchDrawer.addRowDefinition(gutterSize, true);
|
|
561
481
|
}
|
|
562
482
|
}
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
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 =
|
|
951
|
-
var labelHeight =
|
|
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
|
-
|
|
611
|
+
labelTextSize = labelHeight;
|
|
954
612
|
}
|
|
955
613
|
else {
|
|
956
|
-
|
|
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 =
|
|
1007
|
-
buttonHeight =
|
|
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 () {
|
|
1025
|
-
|
|
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 () {
|
|
1046
|
-
|
|
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
|
-
|
|
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
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
rgbValuesQuadrant.addControl(
|
|
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;
|