@babylonjs/gui 9.12.1 → 9.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/2D/FrameGraph/pure.d.ts +2 -0
- package/2D/FrameGraph/pure.js +3 -0
- package/2D/FrameGraph/pure.js.map +1 -0
- package/2D/FrameGraph/renderGraphGUIBlock.d.ts +3 -41
- package/2D/FrameGraph/renderGraphGUIBlock.js +5 -64
- package/2D/FrameGraph/renderGraphGUIBlock.js.map +1 -1
- package/2D/FrameGraph/renderGraphGUIBlock.pure.d.ts +48 -0
- package/2D/FrameGraph/renderGraphGUIBlock.pure.js +78 -0
- package/2D/FrameGraph/renderGraphGUIBlock.pure.js.map +1 -0
- package/2D/controls/button.d.ts +3 -107
- package/2D/controls/button.js +5 -243
- package/2D/controls/button.js.map +1 -1
- package/2D/controls/button.pure.d.ts +114 -0
- package/2D/controls/button.pure.js +257 -0
- package/2D/controls/button.pure.js.map +1 -0
- package/2D/controls/checkbox.d.ts +3 -51
- package/2D/controls/checkbox.js +5 -161
- package/2D/controls/checkbox.js.map +1 -1
- package/2D/controls/checkbox.pure.d.ts +58 -0
- package/2D/controls/checkbox.pure.js +175 -0
- package/2D/controls/checkbox.pure.js.map +1 -0
- package/2D/controls/colorpicker.d.ts +5 -101
- package/2D/controls/colorpicker.js +7 -1394
- package/2D/controls/colorpicker.js.map +1 -1
- package/2D/controls/colorpicker.pure.d.ts +106 -0
- package/2D/controls/colorpicker.pure.js +1406 -0
- package/2D/controls/colorpicker.pure.js.map +1 -0
- package/2D/controls/container.d.ts +3 -177
- package/2D/controls/container.js +5 -615
- package/2D/controls/container.js.map +1 -1
- package/2D/controls/container.pure.d.ts +184 -0
- package/2D/controls/container.pure.js +629 -0
- package/2D/controls/container.pure.js.map +1 -0
- package/2D/controls/control.d.ts +3 -944
- package/2D/controls/control.js +5 -2457
- package/2D/controls/control.js.map +1 -1
- package/2D/controls/control.pure.d.ts +951 -0
- package/2D/controls/control.pure.js +2471 -0
- package/2D/controls/control.pure.js.map +1 -0
- package/2D/controls/displayGrid.d.ts +5 -53
- package/2D/controls/displayGrid.js +7 -201
- package/2D/controls/displayGrid.js.map +1 -1
- package/2D/controls/displayGrid.pure.d.ts +58 -0
- package/2D/controls/displayGrid.pure.js +213 -0
- package/2D/controls/displayGrid.pure.js.map +1 -0
- package/2D/controls/ellipse.d.ts +5 -25
- package/2D/controls/ellipse.js +7 -92
- package/2D/controls/ellipse.js.map +1 -1
- package/2D/controls/ellipse.pure.d.ts +30 -0
- package/2D/controls/ellipse.pure.js +104 -0
- package/2D/controls/ellipse.pure.js.map +1 -0
- package/2D/controls/focusableButton.d.ts +3 -15
- package/2D/controls/focusableButton.js +5 -22
- package/2D/controls/focusableButton.js.map +1 -1
- package/2D/controls/focusableButton.pure.d.ts +22 -0
- package/2D/controls/focusableButton.pure.js +36 -0
- package/2D/controls/focusableButton.pure.js.map +1 -0
- package/2D/controls/gradient/LinearGradient.d.ts +3 -43
- package/2D/controls/gradient/LinearGradient.js +5 -70
- package/2D/controls/gradient/LinearGradient.js.map +1 -1
- package/2D/controls/gradient/LinearGradient.pure.d.ts +50 -0
- package/2D/controls/gradient/LinearGradient.pure.js +84 -0
- package/2D/controls/gradient/LinearGradient.pure.js.map +1 -0
- package/2D/controls/gradient/RadialGradient.d.ts +3 -51
- package/2D/controls/gradient/RadialGradient.js +5 -86
- package/2D/controls/gradient/RadialGradient.js.map +1 -1
- package/2D/controls/gradient/RadialGradient.pure.d.ts +58 -0
- package/2D/controls/gradient/RadialGradient.pure.js +100 -0
- package/2D/controls/gradient/RadialGradient.pure.js.map +1 -0
- package/2D/controls/gradient/pure.d.ts +3 -0
- package/2D/controls/gradient/pure.js +4 -0
- package/2D/controls/gradient/pure.js.map +1 -0
- package/2D/controls/grid.d.ts +3 -149
- package/2D/controls/grid.js +5 -525
- package/2D/controls/grid.js.map +1 -1
- package/2D/controls/grid.pure.d.ts +156 -0
- package/2D/controls/grid.pure.js +539 -0
- package/2D/controls/grid.pure.js.map +1 -0
- package/2D/controls/image.d.ts +3 -226
- package/2D/controls/image.js +5 -913
- package/2D/controls/image.js.map +1 -1
- package/2D/controls/image.pure.d.ts +233 -0
- package/2D/controls/image.pure.js +927 -0
- package/2D/controls/image.pure.js.map +1 -0
- package/2D/controls/inputPassword.d.ts +3 -7
- package/2D/controls/inputPassword.js +5 -19
- package/2D/controls/inputPassword.js.map +1 -1
- package/2D/controls/inputPassword.pure.d.ts +14 -0
- package/2D/controls/inputPassword.pure.js +33 -0
- package/2D/controls/inputPassword.pure.js.map +1 -0
- package/2D/controls/inputText.d.ts +3 -202
- package/2D/controls/inputText.js +5 -1050
- package/2D/controls/inputText.js.map +1 -1
- package/2D/controls/inputText.pure.d.ts +209 -0
- package/2D/controls/inputText.pure.js +1064 -0
- package/2D/controls/inputText.pure.js.map +1 -0
- package/2D/controls/inputTextArea.d.ts +3 -140
- package/2D/controls/inputTextArea.js +5 -1023
- package/2D/controls/inputTextArea.js.map +1 -1
- package/2D/controls/inputTextArea.pure.d.ts +147 -0
- package/2D/controls/inputTextArea.pure.js +1037 -0
- package/2D/controls/inputTextArea.pure.js.map +1 -0
- package/2D/controls/line.d.ts +5 -74
- package/2D/controls/line.js +7 -234
- package/2D/controls/line.js.map +1 -1
- package/2D/controls/line.pure.d.ts +79 -0
- package/2D/controls/line.pure.js +246 -0
- package/2D/controls/line.pure.js.map +1 -0
- package/2D/controls/multiLine.d.ts +3 -73
- package/2D/controls/multiLine.js +5 -234
- package/2D/controls/multiLine.js.map +1 -1
- package/2D/controls/multiLine.pure.d.ts +80 -0
- package/2D/controls/multiLine.pure.js +248 -0
- package/2D/controls/multiLine.pure.js.map +1 -0
- package/2D/controls/pure.d.ts +38 -0
- package/2D/controls/pure.js +39 -0
- package/2D/controls/pure.js.map +1 -0
- package/2D/controls/radioButton.d.ts +3 -47
- package/2D/controls/radioButton.js +5 -182
- package/2D/controls/radioButton.js.map +1 -1
- package/2D/controls/radioButton.pure.d.ts +54 -0
- package/2D/controls/radioButton.pure.js +196 -0
- package/2D/controls/radioButton.pure.js.map +1 -0
- package/2D/controls/rectangle.d.ts +5 -43
- package/2D/controls/rectangle.js +7 -205
- package/2D/controls/rectangle.js.map +1 -1
- package/2D/controls/rectangle.pure.d.ts +48 -0
- package/2D/controls/rectangle.pure.js +217 -0
- package/2D/controls/rectangle.pure.js.map +1 -0
- package/2D/controls/scrollViewers/pure.d.ts +2 -0
- package/2D/controls/scrollViewers/pure.js +3 -0
- package/2D/controls/scrollViewers/pure.js.map +1 -0
- package/2D/controls/scrollViewers/scrollViewer.d.ts +3 -176
- package/2D/controls/scrollViewers/scrollViewer.js +5 -584
- package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
- package/2D/controls/scrollViewers/scrollViewer.pure.d.ts +183 -0
- package/2D/controls/scrollViewers/scrollViewer.pure.js +598 -0
- package/2D/controls/scrollViewers/scrollViewer.pure.js.map +1 -0
- package/2D/controls/sliders/imageBasedSlider.d.ts +3 -45
- package/2D/controls/sliders/imageBasedSlider.js +5 -165
- package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
- package/2D/controls/sliders/imageBasedSlider.pure.d.ts +52 -0
- package/2D/controls/sliders/imageBasedSlider.pure.js +179 -0
- package/2D/controls/sliders/imageBasedSlider.pure.js.map +1 -0
- package/2D/controls/sliders/pure.d.ts +4 -0
- package/2D/controls/sliders/pure.js +5 -0
- package/2D/controls/sliders/pure.js.map +1 -0
- package/2D/controls/sliders/scrollBar.d.ts +3 -48
- package/2D/controls/sliders/scrollBar.js +5 -170
- package/2D/controls/sliders/scrollBar.js.map +1 -1
- package/2D/controls/sliders/scrollBar.pure.d.ts +55 -0
- package/2D/controls/sliders/scrollBar.pure.js +184 -0
- package/2D/controls/sliders/scrollBar.pure.js.map +1 -0
- package/2D/controls/sliders/slider.d.ts +3 -44
- package/2D/controls/sliders/slider.js +5 -278
- package/2D/controls/sliders/slider.js.map +1 -1
- package/2D/controls/sliders/slider.pure.d.ts +51 -0
- package/2D/controls/sliders/slider.pure.js +292 -0
- package/2D/controls/sliders/slider.pure.js.map +1 -0
- package/2D/controls/stackPanel.d.ts +3 -62
- package/2D/controls/stackPanel.js +5 -243
- package/2D/controls/stackPanel.js.map +1 -1
- package/2D/controls/stackPanel.pure.d.ts +69 -0
- package/2D/controls/stackPanel.pure.js +257 -0
- package/2D/controls/stackPanel.pure.js.map +1 -0
- package/2D/controls/statics.d.ts +3 -4
- package/2D/controls/statics.js +5 -47
- package/2D/controls/statics.js.map +1 -1
- package/2D/controls/statics.pure.d.ts +11 -0
- package/2D/controls/statics.pure.js +61 -0
- package/2D/controls/statics.pure.js.map +1 -0
- package/2D/controls/textBlock.d.ts +3 -217
- package/2D/controls/textBlock.js +5 -676
- package/2D/controls/textBlock.js.map +1 -1
- package/2D/controls/textBlock.pure.d.ts +224 -0
- package/2D/controls/textBlock.pure.js +690 -0
- package/2D/controls/textBlock.pure.js.map +1 -0
- package/2D/controls/toggleButton.d.ts +3 -91
- package/2D/controls/toggleButton.js +5 -226
- package/2D/controls/toggleButton.js.map +1 -1
- package/2D/controls/toggleButton.pure.d.ts +98 -0
- package/2D/controls/toggleButton.pure.js +240 -0
- package/2D/controls/toggleButton.pure.js.map +1 -0
- package/2D/controls/virtualKeyboard.d.ts +3 -100
- package/2D/controls/virtualKeyboard.js +5 -272
- package/2D/controls/virtualKeyboard.js.map +1 -1
- package/2D/controls/virtualKeyboard.pure.d.ts +107 -0
- package/2D/controls/virtualKeyboard.pure.js +286 -0
- package/2D/controls/virtualKeyboard.pure.js.map +1 -0
- package/2D/pure.d.ts +13 -0
- package/2D/pure.js +15 -0
- package/2D/pure.js.map +1 -0
- package/3D/controls/pure.d.ts +23 -0
- package/3D/controls/pure.js +24 -0
- package/3D/controls/pure.js.map +1 -0
- package/3D/gizmos/pure.d.ts +3 -0
- package/3D/gizmos/pure.js +4 -0
- package/3D/gizmos/pure.js.map +1 -0
- package/3D/materials/fluent/fluentMaterial.d.ts +5 -100
- package/3D/materials/fluent/fluentMaterial.js +7 -305
- package/3D/materials/fluent/fluentMaterial.js.map +1 -1
- package/3D/materials/fluent/fluentMaterial.pure.d.ts +105 -0
- package/3D/materials/fluent/fluentMaterial.pure.js +317 -0
- package/3D/materials/fluent/fluentMaterial.pure.js.map +1 -0
- package/3D/materials/fluent/pure.d.ts +2 -0
- package/3D/materials/fluent/pure.js +3 -0
- package/3D/materials/fluent/pure.js.map +1 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +5 -164
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +7 -488
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.d.ts +169 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js +500 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js.map +1 -0
- package/3D/materials/fluentBackplate/pure.d.ts +2 -0
- package/3D/materials/fluentBackplate/pure.js +3 -0
- package/3D/materials/fluentBackplate/pure.js.map +1 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +5 -200
- package/3D/materials/fluentButton/fluentButtonMaterial.js +7 -563
- package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
- package/3D/materials/fluentButton/fluentButtonMaterial.pure.d.ts +205 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.pure.js +575 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.pure.js.map +1 -0
- package/3D/materials/fluentButton/pure.d.ts +2 -0
- package/3D/materials/fluentButton/pure.js +3 -0
- package/3D/materials/fluentButton/pure.js.map +1 -0
- package/3D/materials/handle/handleMaterial.d.ts +5 -66
- package/3D/materials/handle/handleMaterial.js +5 -118
- package/3D/materials/handle/handleMaterial.js.map +1 -1
- package/3D/materials/handle/handleMaterial.pure.d.ts +66 -0
- package/3D/materials/handle/handleMaterial.pure.js +119 -0
- package/3D/materials/handle/handleMaterial.pure.js.map +1 -0
- package/3D/materials/handle/pure.d.ts +2 -0
- package/3D/materials/handle/pure.js +3 -0
- package/3D/materials/handle/pure.js.map +1 -0
- package/3D/materials/mrdl/mrdlBackglowMaterial.d.ts +5 -85
- package/3D/materials/mrdl/mrdlBackglowMaterial.js +7 -299
- package/3D/materials/mrdl/mrdlBackglowMaterial.js.map +1 -1
- package/3D/materials/mrdl/mrdlBackglowMaterial.pure.d.ts +90 -0
- package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js +311 -0
- package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js.map +1 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +5 -145
- package/3D/materials/mrdl/mrdlBackplateMaterial.js +7 -433
- package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
- package/3D/materials/mrdl/mrdlBackplateMaterial.pure.d.ts +157 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js +452 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js.map +1 -0
- package/3D/materials/mrdl/mrdlFrontplateMaterial.d.ts +5 -183
- package/3D/materials/mrdl/mrdlFrontplateMaterial.js +7 -532
- package/3D/materials/mrdl/mrdlFrontplateMaterial.js.map +1 -1
- package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.d.ts +188 -0
- package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js +544 -0
- package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js.map +1 -0
- package/3D/materials/mrdl/mrdlInnerquadMaterial.d.ts +5 -54
- package/3D/materials/mrdl/mrdlInnerquadMaterial.js +7 -227
- package/3D/materials/mrdl/mrdlInnerquadMaterial.js.map +1 -1
- package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.d.ts +59 -0
- package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js +239 -0
- package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js.map +1 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +5 -334
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js +7 -855
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
- package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.d.ts +346 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js +874 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js.map +1 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +5 -334
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +7 -855
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.d.ts +346 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js +874 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js.map +1 -0
- package/3D/materials/mrdl/pure.d.ts +7 -0
- package/3D/materials/mrdl/pure.js +8 -0
- package/3D/materials/mrdl/pure.js.map +1 -0
- package/3D/materials/pure.d.ts +6 -0
- package/3D/materials/pure.js +8 -0
- package/3D/materials/pure.js.map +1 -0
- package/3D/pure.d.ts +6 -0
- package/3D/pure.js +8 -0
- package/3D/pure.js.map +1 -0
- package/package.json +50 -3
- package/pure.d.ts +3 -0
- package/pure.js +5 -0
- package/pure.js.map +1 -0
|
@@ -1,185 +1,8 @@
|
|
|
1
|
-
import { __decorate } from "@babylonjs/core/tslib.es6.js";
|
|
2
|
-
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
3
|
-
import { Control } from "./control.js";
|
|
4
|
-
import { StackPanel } from "./stackPanel.js";
|
|
5
|
-
import { TextBlock } from "./textBlock.js";
|
|
6
|
-
import { RegisterClass } from "@babylonjs/core/Misc/typeStore.js";
|
|
7
|
-
import { serialize } from "@babylonjs/core/Misc/decorators.js";
|
|
8
1
|
/**
|
|
9
|
-
*
|
|
2
|
+
* Re-exports the pure implementation and applies the runtime registration side effect.
|
|
3
|
+
* Import "./radioButton.pure" for tree-shakeable, side-effect-free usage.
|
|
10
4
|
*/
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return this._thickness;
|
|
15
|
-
}
|
|
16
|
-
set thickness(value) {
|
|
17
|
-
if (this._thickness === value) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
this._thickness = value;
|
|
21
|
-
this._markAsDirty();
|
|
22
|
-
}
|
|
23
|
-
/** Gets or sets a value indicating the ratio between overall size and check size */
|
|
24
|
-
get checkSizeRatio() {
|
|
25
|
-
return this._checkSizeRatio;
|
|
26
|
-
}
|
|
27
|
-
set checkSizeRatio(value) {
|
|
28
|
-
value = Math.max(Math.min(1, value), 0);
|
|
29
|
-
if (this._checkSizeRatio === value) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
this._checkSizeRatio = value;
|
|
33
|
-
this._markAsDirty();
|
|
34
|
-
}
|
|
35
|
-
/** Gets or sets background color */
|
|
36
|
-
get background() {
|
|
37
|
-
return this._background;
|
|
38
|
-
}
|
|
39
|
-
set background(value) {
|
|
40
|
-
if (this._background === value) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
this._background = value;
|
|
44
|
-
this._markAsDirty();
|
|
45
|
-
}
|
|
46
|
-
/** Gets or sets a boolean indicating if the checkbox is checked or not */
|
|
47
|
-
get isChecked() {
|
|
48
|
-
return this._isChecked;
|
|
49
|
-
}
|
|
50
|
-
set isChecked(value) {
|
|
51
|
-
if (this._isChecked === value) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
this._isChecked = value;
|
|
55
|
-
this._markAsDirty();
|
|
56
|
-
this.onIsCheckedChangedObservable.notifyObservers(value);
|
|
57
|
-
if (this._isChecked && this._host) {
|
|
58
|
-
// Update all controls from same group
|
|
59
|
-
this._host.executeOnAllControls((control) => {
|
|
60
|
-
if (control === this) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
if (control.group === undefined) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
const childRadio = control;
|
|
67
|
-
if (childRadio.group === this.group) {
|
|
68
|
-
childRadio.isChecked = false;
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Creates a new RadioButton
|
|
75
|
-
* @param name defines the control name
|
|
76
|
-
*/
|
|
77
|
-
constructor(name) {
|
|
78
|
-
super(name);
|
|
79
|
-
this.name = name;
|
|
80
|
-
this._isChecked = false;
|
|
81
|
-
this._background = "black";
|
|
82
|
-
this._checkSizeRatio = 0.8;
|
|
83
|
-
this._thickness = 1;
|
|
84
|
-
/** Gets or sets group name */
|
|
85
|
-
this.group = "";
|
|
86
|
-
/** Observable raised when isChecked is changed */
|
|
87
|
-
this.onIsCheckedChangedObservable = new Observable();
|
|
88
|
-
this.isPointerBlocker = true;
|
|
89
|
-
}
|
|
90
|
-
_getTypeName() {
|
|
91
|
-
return "RadioButton";
|
|
92
|
-
}
|
|
93
|
-
_draw(context) {
|
|
94
|
-
context.save();
|
|
95
|
-
this._applyStates(context);
|
|
96
|
-
const actualWidth = this._currentMeasure.width - this._thickness;
|
|
97
|
-
const actualHeight = this._currentMeasure.height - this._thickness;
|
|
98
|
-
if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {
|
|
99
|
-
context.shadowColor = this.shadowColor;
|
|
100
|
-
context.shadowBlur = this.shadowBlur;
|
|
101
|
-
context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;
|
|
102
|
-
context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;
|
|
103
|
-
}
|
|
104
|
-
// Outer
|
|
105
|
-
Control.drawEllipse(this._currentMeasure.left + this._currentMeasure.width / 2, this._currentMeasure.top + this._currentMeasure.height / 2, this._currentMeasure.width / 2 - this._thickness / 2, this._currentMeasure.height / 2 - this._thickness / 2, 1, context);
|
|
106
|
-
context.fillStyle = this._isEnabled ? this._background : this._disabledColor;
|
|
107
|
-
context.fill();
|
|
108
|
-
if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {
|
|
109
|
-
context.shadowBlur = 0;
|
|
110
|
-
context.shadowOffsetX = 0;
|
|
111
|
-
context.shadowOffsetY = 0;
|
|
112
|
-
}
|
|
113
|
-
context.strokeStyle = this.color;
|
|
114
|
-
context.lineWidth = this._thickness;
|
|
115
|
-
context.stroke();
|
|
116
|
-
// Inner
|
|
117
|
-
if (this._isChecked) {
|
|
118
|
-
context.fillStyle = this._isEnabled ? this.color : this._disabledColor;
|
|
119
|
-
const offsetWidth = actualWidth * this._checkSizeRatio;
|
|
120
|
-
const offseHeight = actualHeight * this._checkSizeRatio;
|
|
121
|
-
Control.drawEllipse(this._currentMeasure.left + this._currentMeasure.width / 2, this._currentMeasure.top + this._currentMeasure.height / 2, offsetWidth / 2 - this._thickness / 2, offseHeight / 2 - this._thickness / 2, 1, context);
|
|
122
|
-
context.fill();
|
|
123
|
-
}
|
|
124
|
-
context.restore();
|
|
125
|
-
}
|
|
126
|
-
// Events
|
|
127
|
-
_onPointerDown(target, coordinates, pointerId, buttonIndex, pi) {
|
|
128
|
-
if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
if (this.isReadOnly) {
|
|
132
|
-
return true;
|
|
133
|
-
}
|
|
134
|
-
if (!this.isChecked) {
|
|
135
|
-
this.isChecked = true;
|
|
136
|
-
}
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Utility function to easily create a radio button with a header
|
|
141
|
-
* @param title defines the label to use for the header
|
|
142
|
-
* @param group defines the group to use for the radio button
|
|
143
|
-
* @param isChecked defines the initial state of the radio button
|
|
144
|
-
* @param onValueChanged defines the callback to call when value changes
|
|
145
|
-
* @returns a StackPanel containing the radio button and a textBlock
|
|
146
|
-
*/
|
|
147
|
-
static AddRadioButtonWithHeader(title, group, isChecked, onValueChanged) {
|
|
148
|
-
const panel = new StackPanel();
|
|
149
|
-
panel.isVertical = false;
|
|
150
|
-
panel.height = "30px";
|
|
151
|
-
const radio = new RadioButton();
|
|
152
|
-
radio.width = "20px";
|
|
153
|
-
radio.height = "20px";
|
|
154
|
-
radio.isChecked = isChecked;
|
|
155
|
-
radio.color = "green";
|
|
156
|
-
radio.group = group;
|
|
157
|
-
radio.onIsCheckedChangedObservable.add((value) => onValueChanged(radio, value));
|
|
158
|
-
panel.addControl(radio);
|
|
159
|
-
const header = new TextBlock();
|
|
160
|
-
header.text = title;
|
|
161
|
-
header.width = "180px";
|
|
162
|
-
header.paddingLeft = "5px";
|
|
163
|
-
header.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;
|
|
164
|
-
header.color = "white";
|
|
165
|
-
panel.addControl(header);
|
|
166
|
-
return panel;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
__decorate([
|
|
170
|
-
serialize()
|
|
171
|
-
], RadioButton.prototype, "thickness", null);
|
|
172
|
-
__decorate([
|
|
173
|
-
serialize()
|
|
174
|
-
], RadioButton.prototype, "group", void 0);
|
|
175
|
-
__decorate([
|
|
176
|
-
serialize()
|
|
177
|
-
], RadioButton.prototype, "checkSizeRatio", null);
|
|
178
|
-
__decorate([
|
|
179
|
-
serialize()
|
|
180
|
-
], RadioButton.prototype, "background", null);
|
|
181
|
-
__decorate([
|
|
182
|
-
serialize()
|
|
183
|
-
], RadioButton.prototype, "isChecked", null);
|
|
184
|
-
RegisterClass("BABYLON.GUI.RadioButton", RadioButton);
|
|
5
|
+
export * from "./radioButton.pure.js";
|
|
6
|
+
import { RegisterRadioButton } from "./radioButton.pure.js";
|
|
7
|
+
RegisterRadioButton();
|
|
185
8
|
//# sourceMappingURL=radioButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radioButton.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/radioButton.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport { type Vector2 } from \"core/Maths/math.vector\";\r\n\r\nimport { Control } from \"./control\";\r\nimport { StackPanel } from \"./stackPanel\";\r\nimport { TextBlock } from \"./textBlock\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { type PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { type ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/**\r\n * Class used to create radio button controls\r\n */\r\nexport class RadioButton extends Control {\r\n private _isChecked = false;\r\n private _background = \"black\";\r\n private _checkSizeRatio = 0.8;\r\n private _thickness = 1;\r\n\r\n /** Gets or sets border thickness */\r\n @serialize()\r\n public get thickness(): number {\r\n return this._thickness;\r\n }\r\n\r\n public set thickness(value: number) {\r\n if (this._thickness === value) {\r\n return;\r\n }\r\n\r\n this._thickness = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets group name */\r\n @serialize()\r\n public group = \"\";\r\n\r\n /** Observable raised when isChecked is changed */\r\n public onIsCheckedChangedObservable = new Observable<boolean>();\r\n\r\n /** Gets or sets a value indicating the ratio between overall size and check size */\r\n @serialize()\r\n public get checkSizeRatio(): number {\r\n return this._checkSizeRatio;\r\n }\r\n\r\n public set checkSizeRatio(value: number) {\r\n value = Math.max(Math.min(1, value), 0);\r\n\r\n if (this._checkSizeRatio === value) {\r\n return;\r\n }\r\n\r\n this._checkSizeRatio = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets background color */\r\n @serialize()\r\n public get background(): string {\r\n return this._background;\r\n }\r\n\r\n public set background(value: string) {\r\n if (this._background === value) {\r\n return;\r\n }\r\n\r\n this._background = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the checkbox is checked or not */\r\n @serialize()\r\n public get isChecked(): boolean {\r\n return this._isChecked;\r\n }\r\n\r\n public set isChecked(value: boolean) {\r\n if (this._isChecked === value) {\r\n return;\r\n }\r\n\r\n this._isChecked = value;\r\n this._markAsDirty();\r\n\r\n this.onIsCheckedChangedObservable.notifyObservers(value);\r\n\r\n if (this._isChecked && this._host) {\r\n // Update all controls from same group\r\n this._host.executeOnAllControls((control) => {\r\n if (control === this) {\r\n return;\r\n }\r\n\r\n if ((<any>control).group === undefined) {\r\n return;\r\n }\r\n const childRadio = <RadioButton>control;\r\n if (childRadio.group === this.group) {\r\n childRadio.isChecked = false;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new RadioButton\r\n * @param name defines the control name\r\n */\r\n constructor(public override name?: string) {\r\n super(name);\r\n\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"RadioButton\";\r\n }\r\n\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\r\n const actualWidth = this._currentMeasure.width - this._thickness;\r\n const actualHeight = this._currentMeasure.height - this._thickness;\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;\r\n context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;\r\n }\r\n\r\n // Outer\r\n Control.drawEllipse(\r\n this._currentMeasure.left + this._currentMeasure.width / 2,\r\n this._currentMeasure.top + this._currentMeasure.height / 2,\r\n this._currentMeasure.width / 2 - this._thickness / 2,\r\n this._currentMeasure.height / 2 - this._thickness / 2,\r\n 1,\r\n context\r\n );\r\n\r\n context.fillStyle = this._isEnabled ? this._background : this._disabledColor;\r\n context.fill();\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowBlur = 0;\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n }\r\n\r\n context.strokeStyle = this.color;\r\n context.lineWidth = this._thickness;\r\n\r\n context.stroke();\r\n\r\n // Inner\r\n if (this._isChecked) {\r\n context.fillStyle = this._isEnabled ? this.color : this._disabledColor;\r\n const offsetWidth = actualWidth * this._checkSizeRatio;\r\n const offseHeight = actualHeight * this._checkSizeRatio;\r\n\r\n Control.drawEllipse(\r\n this._currentMeasure.left + this._currentMeasure.width / 2,\r\n this._currentMeasure.top + this._currentMeasure.height / 2,\r\n offsetWidth / 2 - this._thickness / 2,\r\n offseHeight / 2 - this._thickness / 2,\r\n 1,\r\n context\r\n );\r\n\r\n context.fill();\r\n }\r\n context.restore();\r\n }\r\n\r\n // Events\r\n public override _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n if (!this.isChecked) {\r\n this.isChecked = true;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Utility function to easily create a radio button with a header\r\n * @param title defines the label to use for the header\r\n * @param group defines the group to use for the radio button\r\n * @param isChecked defines the initial state of the radio button\r\n * @param onValueChanged defines the callback to call when value changes\r\n * @returns a StackPanel containing the radio button and a textBlock\r\n */\r\n public static AddRadioButtonWithHeader(title: string, group: string, isChecked: boolean, onValueChanged: (button: RadioButton, value: boolean) => void): StackPanel {\r\n const panel = new StackPanel();\r\n panel.isVertical = false;\r\n panel.height = \"30px\";\r\n\r\n const radio = new RadioButton();\r\n radio.width = \"20px\";\r\n radio.height = \"20px\";\r\n radio.isChecked = isChecked;\r\n radio.color = \"green\";\r\n radio.group = group;\r\n radio.onIsCheckedChangedObservable.add((value) => onValueChanged(radio, value));\r\n panel.addControl(radio);\r\n\r\n const header = new TextBlock();\r\n header.text = title;\r\n header.width = \"180px\";\r\n header.paddingLeft = \"5px\";\r\n header.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n header.color = \"white\";\r\n panel.addControl(header);\r\n\r\n return panel;\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.RadioButton\", RadioButton);\r\n"]}
|
|
1
|
+
{"version":3,"file":"radioButton.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/radioButton.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,mBAAmB,EAAE,CAAC","sourcesContent":["/**\r\n * Re-exports the pure implementation and applies the runtime registration side effect.\r\n * Import \"./radioButton.pure\" for tree-shakeable, side-effect-free usage.\r\n */\r\nexport * from \"./radioButton.pure\";\r\n\r\nimport { RegisterRadioButton } from \"./radioButton.pure\";\r\nRegisterRadioButton();\r\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
2
|
+
import { type Vector2 } from "@babylonjs/core/Maths/math.vector.pure.js";
|
|
3
|
+
import { Control } from "./control.pure.js";
|
|
4
|
+
import { StackPanel } from "./stackPanel.pure.js";
|
|
5
|
+
import { type PointerInfoBase } from "@babylonjs/core/Events/pointerEvents.js";
|
|
6
|
+
import { type ICanvasRenderingContext } from "@babylonjs/core/Engines/ICanvas.js";
|
|
7
|
+
/**
|
|
8
|
+
* Class used to create radio button controls
|
|
9
|
+
*/
|
|
10
|
+
export declare class RadioButton extends Control {
|
|
11
|
+
name?: string | undefined;
|
|
12
|
+
private _isChecked;
|
|
13
|
+
private _background;
|
|
14
|
+
private _checkSizeRatio;
|
|
15
|
+
private _thickness;
|
|
16
|
+
/** Gets or sets border thickness */
|
|
17
|
+
get thickness(): number;
|
|
18
|
+
set thickness(value: number);
|
|
19
|
+
/** Gets or sets group name */
|
|
20
|
+
group: string;
|
|
21
|
+
/** Observable raised when isChecked is changed */
|
|
22
|
+
onIsCheckedChangedObservable: Observable<boolean>;
|
|
23
|
+
/** Gets or sets a value indicating the ratio between overall size and check size */
|
|
24
|
+
get checkSizeRatio(): number;
|
|
25
|
+
set checkSizeRatio(value: number);
|
|
26
|
+
/** Gets or sets background color */
|
|
27
|
+
get background(): string;
|
|
28
|
+
set background(value: string);
|
|
29
|
+
/** Gets or sets a boolean indicating if the checkbox is checked or not */
|
|
30
|
+
get isChecked(): boolean;
|
|
31
|
+
set isChecked(value: boolean);
|
|
32
|
+
/**
|
|
33
|
+
* Creates a new RadioButton
|
|
34
|
+
* @param name defines the control name
|
|
35
|
+
*/
|
|
36
|
+
constructor(name?: string | undefined);
|
|
37
|
+
protected _getTypeName(): string;
|
|
38
|
+
_draw(context: ICanvasRenderingContext): void;
|
|
39
|
+
_onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Utility function to easily create a radio button with a header
|
|
42
|
+
* @param title defines the label to use for the header
|
|
43
|
+
* @param group defines the group to use for the radio button
|
|
44
|
+
* @param isChecked defines the initial state of the radio button
|
|
45
|
+
* @param onValueChanged defines the callback to call when value changes
|
|
46
|
+
* @returns a StackPanel containing the radio button and a textBlock
|
|
47
|
+
*/
|
|
48
|
+
static AddRadioButtonWithHeader(title: string, group: string, isChecked: boolean, onValueChanged: (button: RadioButton, value: boolean) => void): StackPanel;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Registers the RadioButton class with the type store for serialization support.
|
|
52
|
+
* Safe to call multiple times; only the first call has an effect.
|
|
53
|
+
*/
|
|
54
|
+
export declare function RegisterRadioButton(): void;
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { __decorate } from "@babylonjs/core/tslib.es6.js";
|
|
2
|
+
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
3
|
+
import { Control } from "./control.pure.js";
|
|
4
|
+
import { StackPanel } from "./stackPanel.pure.js";
|
|
5
|
+
import { TextBlock } from "./textBlock.pure.js";
|
|
6
|
+
import { RegisterClass } from "@babylonjs/core/Misc/typeStore.js";
|
|
7
|
+
import { serialize } from "@babylonjs/core/Misc/decorators.js";
|
|
8
|
+
/**
|
|
9
|
+
* Class used to create radio button controls
|
|
10
|
+
*/
|
|
11
|
+
export class RadioButton extends Control {
|
|
12
|
+
/** Gets or sets border thickness */
|
|
13
|
+
get thickness() {
|
|
14
|
+
return this._thickness;
|
|
15
|
+
}
|
|
16
|
+
set thickness(value) {
|
|
17
|
+
if (this._thickness === value) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
this._thickness = value;
|
|
21
|
+
this._markAsDirty();
|
|
22
|
+
}
|
|
23
|
+
/** Gets or sets a value indicating the ratio between overall size and check size */
|
|
24
|
+
get checkSizeRatio() {
|
|
25
|
+
return this._checkSizeRatio;
|
|
26
|
+
}
|
|
27
|
+
set checkSizeRatio(value) {
|
|
28
|
+
value = Math.max(Math.min(1, value), 0);
|
|
29
|
+
if (this._checkSizeRatio === value) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
this._checkSizeRatio = value;
|
|
33
|
+
this._markAsDirty();
|
|
34
|
+
}
|
|
35
|
+
/** Gets or sets background color */
|
|
36
|
+
get background() {
|
|
37
|
+
return this._background;
|
|
38
|
+
}
|
|
39
|
+
set background(value) {
|
|
40
|
+
if (this._background === value) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this._background = value;
|
|
44
|
+
this._markAsDirty();
|
|
45
|
+
}
|
|
46
|
+
/** Gets or sets a boolean indicating if the checkbox is checked or not */
|
|
47
|
+
get isChecked() {
|
|
48
|
+
return this._isChecked;
|
|
49
|
+
}
|
|
50
|
+
set isChecked(value) {
|
|
51
|
+
if (this._isChecked === value) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this._isChecked = value;
|
|
55
|
+
this._markAsDirty();
|
|
56
|
+
this.onIsCheckedChangedObservable.notifyObservers(value);
|
|
57
|
+
if (this._isChecked && this._host) {
|
|
58
|
+
// Update all controls from same group
|
|
59
|
+
this._host.executeOnAllControls((control) => {
|
|
60
|
+
if (control === this) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (control.group === undefined) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const childRadio = control;
|
|
67
|
+
if (childRadio.group === this.group) {
|
|
68
|
+
childRadio.isChecked = false;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Creates a new RadioButton
|
|
75
|
+
* @param name defines the control name
|
|
76
|
+
*/
|
|
77
|
+
constructor(name) {
|
|
78
|
+
super(name);
|
|
79
|
+
this.name = name;
|
|
80
|
+
this._isChecked = false;
|
|
81
|
+
this._background = "black";
|
|
82
|
+
this._checkSizeRatio = 0.8;
|
|
83
|
+
this._thickness = 1;
|
|
84
|
+
/** Gets or sets group name */
|
|
85
|
+
this.group = "";
|
|
86
|
+
/** Observable raised when isChecked is changed */
|
|
87
|
+
this.onIsCheckedChangedObservable = new Observable();
|
|
88
|
+
this.isPointerBlocker = true;
|
|
89
|
+
}
|
|
90
|
+
_getTypeName() {
|
|
91
|
+
return "RadioButton";
|
|
92
|
+
}
|
|
93
|
+
_draw(context) {
|
|
94
|
+
context.save();
|
|
95
|
+
this._applyStates(context);
|
|
96
|
+
const actualWidth = this._currentMeasure.width - this._thickness;
|
|
97
|
+
const actualHeight = this._currentMeasure.height - this._thickness;
|
|
98
|
+
if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {
|
|
99
|
+
context.shadowColor = this.shadowColor;
|
|
100
|
+
context.shadowBlur = this.shadowBlur;
|
|
101
|
+
context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;
|
|
102
|
+
context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;
|
|
103
|
+
}
|
|
104
|
+
// Outer
|
|
105
|
+
Control.drawEllipse(this._currentMeasure.left + this._currentMeasure.width / 2, this._currentMeasure.top + this._currentMeasure.height / 2, this._currentMeasure.width / 2 - this._thickness / 2, this._currentMeasure.height / 2 - this._thickness / 2, 1, context);
|
|
106
|
+
context.fillStyle = this._isEnabled ? this._background : this._disabledColor;
|
|
107
|
+
context.fill();
|
|
108
|
+
if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {
|
|
109
|
+
context.shadowBlur = 0;
|
|
110
|
+
context.shadowOffsetX = 0;
|
|
111
|
+
context.shadowOffsetY = 0;
|
|
112
|
+
}
|
|
113
|
+
context.strokeStyle = this.color;
|
|
114
|
+
context.lineWidth = this._thickness;
|
|
115
|
+
context.stroke();
|
|
116
|
+
// Inner
|
|
117
|
+
if (this._isChecked) {
|
|
118
|
+
context.fillStyle = this._isEnabled ? this.color : this._disabledColor;
|
|
119
|
+
const offsetWidth = actualWidth * this._checkSizeRatio;
|
|
120
|
+
const offseHeight = actualHeight * this._checkSizeRatio;
|
|
121
|
+
Control.drawEllipse(this._currentMeasure.left + this._currentMeasure.width / 2, this._currentMeasure.top + this._currentMeasure.height / 2, offsetWidth / 2 - this._thickness / 2, offseHeight / 2 - this._thickness / 2, 1, context);
|
|
122
|
+
context.fill();
|
|
123
|
+
}
|
|
124
|
+
context.restore();
|
|
125
|
+
}
|
|
126
|
+
// Events
|
|
127
|
+
_onPointerDown(target, coordinates, pointerId, buttonIndex, pi) {
|
|
128
|
+
if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
if (this.isReadOnly) {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
if (!this.isChecked) {
|
|
135
|
+
this.isChecked = true;
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Utility function to easily create a radio button with a header
|
|
141
|
+
* @param title defines the label to use for the header
|
|
142
|
+
* @param group defines the group to use for the radio button
|
|
143
|
+
* @param isChecked defines the initial state of the radio button
|
|
144
|
+
* @param onValueChanged defines the callback to call when value changes
|
|
145
|
+
* @returns a StackPanel containing the radio button and a textBlock
|
|
146
|
+
*/
|
|
147
|
+
static AddRadioButtonWithHeader(title, group, isChecked, onValueChanged) {
|
|
148
|
+
const panel = new StackPanel();
|
|
149
|
+
panel.isVertical = false;
|
|
150
|
+
panel.height = "30px";
|
|
151
|
+
const radio = new RadioButton();
|
|
152
|
+
radio.width = "20px";
|
|
153
|
+
radio.height = "20px";
|
|
154
|
+
radio.isChecked = isChecked;
|
|
155
|
+
radio.color = "green";
|
|
156
|
+
radio.group = group;
|
|
157
|
+
radio.onIsCheckedChangedObservable.add((value) => onValueChanged(radio, value));
|
|
158
|
+
panel.addControl(radio);
|
|
159
|
+
const header = new TextBlock();
|
|
160
|
+
header.text = title;
|
|
161
|
+
header.width = "180px";
|
|
162
|
+
header.paddingLeft = "5px";
|
|
163
|
+
header.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;
|
|
164
|
+
header.color = "white";
|
|
165
|
+
panel.addControl(header);
|
|
166
|
+
return panel;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
__decorate([
|
|
170
|
+
serialize()
|
|
171
|
+
], RadioButton.prototype, "thickness", null);
|
|
172
|
+
__decorate([
|
|
173
|
+
serialize()
|
|
174
|
+
], RadioButton.prototype, "group", void 0);
|
|
175
|
+
__decorate([
|
|
176
|
+
serialize()
|
|
177
|
+
], RadioButton.prototype, "checkSizeRatio", null);
|
|
178
|
+
__decorate([
|
|
179
|
+
serialize()
|
|
180
|
+
], RadioButton.prototype, "background", null);
|
|
181
|
+
__decorate([
|
|
182
|
+
serialize()
|
|
183
|
+
], RadioButton.prototype, "isChecked", null);
|
|
184
|
+
let _Registered = false;
|
|
185
|
+
/**
|
|
186
|
+
* Registers the RadioButton class with the type store for serialization support.
|
|
187
|
+
* Safe to call multiple times; only the first call has an effect.
|
|
188
|
+
*/
|
|
189
|
+
export function RegisterRadioButton() {
|
|
190
|
+
if (_Registered) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
_Registered = true;
|
|
194
|
+
RegisterClass("BABYLON.GUI.RadioButton", RadioButton);
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=radioButton.pure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radioButton.pure.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/radioButton.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport { type Vector2 } from \"core/Maths/math.vector.pure\";\r\n\r\nimport { Control } from \"./control.pure\";\r\nimport { StackPanel } from \"./stackPanel.pure\";\r\nimport { TextBlock } from \"./textBlock.pure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { type PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { type ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/**\r\n * Class used to create radio button controls\r\n */\r\nexport class RadioButton extends Control {\r\n private _isChecked = false;\r\n private _background = \"black\";\r\n private _checkSizeRatio = 0.8;\r\n private _thickness = 1;\r\n\r\n /** Gets or sets border thickness */\r\n @serialize()\r\n public get thickness(): number {\r\n return this._thickness;\r\n }\r\n\r\n public set thickness(value: number) {\r\n if (this._thickness === value) {\r\n return;\r\n }\r\n\r\n this._thickness = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets group name */\r\n @serialize()\r\n public group = \"\";\r\n\r\n /** Observable raised when isChecked is changed */\r\n public onIsCheckedChangedObservable = new Observable<boolean>();\r\n\r\n /** Gets or sets a value indicating the ratio between overall size and check size */\r\n @serialize()\r\n public get checkSizeRatio(): number {\r\n return this._checkSizeRatio;\r\n }\r\n\r\n public set checkSizeRatio(value: number) {\r\n value = Math.max(Math.min(1, value), 0);\r\n\r\n if (this._checkSizeRatio === value) {\r\n return;\r\n }\r\n\r\n this._checkSizeRatio = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets background color */\r\n @serialize()\r\n public get background(): string {\r\n return this._background;\r\n }\r\n\r\n public set background(value: string) {\r\n if (this._background === value) {\r\n return;\r\n }\r\n\r\n this._background = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the checkbox is checked or not */\r\n @serialize()\r\n public get isChecked(): boolean {\r\n return this._isChecked;\r\n }\r\n\r\n public set isChecked(value: boolean) {\r\n if (this._isChecked === value) {\r\n return;\r\n }\r\n\r\n this._isChecked = value;\r\n this._markAsDirty();\r\n\r\n this.onIsCheckedChangedObservable.notifyObservers(value);\r\n\r\n if (this._isChecked && this._host) {\r\n // Update all controls from same group\r\n this._host.executeOnAllControls((control) => {\r\n if (control === this) {\r\n return;\r\n }\r\n\r\n if ((<any>control).group === undefined) {\r\n return;\r\n }\r\n const childRadio = <RadioButton>control;\r\n if (childRadio.group === this.group) {\r\n childRadio.isChecked = false;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new RadioButton\r\n * @param name defines the control name\r\n */\r\n constructor(public override name?: string) {\r\n super(name);\r\n\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"RadioButton\";\r\n }\r\n\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\r\n const actualWidth = this._currentMeasure.width - this._thickness;\r\n const actualHeight = this._currentMeasure.height - this._thickness;\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;\r\n context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;\r\n }\r\n\r\n // Outer\r\n Control.drawEllipse(\r\n this._currentMeasure.left + this._currentMeasure.width / 2,\r\n this._currentMeasure.top + this._currentMeasure.height / 2,\r\n this._currentMeasure.width / 2 - this._thickness / 2,\r\n this._currentMeasure.height / 2 - this._thickness / 2,\r\n 1,\r\n context\r\n );\r\n\r\n context.fillStyle = this._isEnabled ? this._background : this._disabledColor;\r\n context.fill();\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowBlur = 0;\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n }\r\n\r\n context.strokeStyle = this.color;\r\n context.lineWidth = this._thickness;\r\n\r\n context.stroke();\r\n\r\n // Inner\r\n if (this._isChecked) {\r\n context.fillStyle = this._isEnabled ? this.color : this._disabledColor;\r\n const offsetWidth = actualWidth * this._checkSizeRatio;\r\n const offseHeight = actualHeight * this._checkSizeRatio;\r\n\r\n Control.drawEllipse(\r\n this._currentMeasure.left + this._currentMeasure.width / 2,\r\n this._currentMeasure.top + this._currentMeasure.height / 2,\r\n offsetWidth / 2 - this._thickness / 2,\r\n offseHeight / 2 - this._thickness / 2,\r\n 1,\r\n context\r\n );\r\n\r\n context.fill();\r\n }\r\n context.restore();\r\n }\r\n\r\n // Events\r\n public override _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n if (!this.isChecked) {\r\n this.isChecked = true;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Utility function to easily create a radio button with a header\r\n * @param title defines the label to use for the header\r\n * @param group defines the group to use for the radio button\r\n * @param isChecked defines the initial state of the radio button\r\n * @param onValueChanged defines the callback to call when value changes\r\n * @returns a StackPanel containing the radio button and a textBlock\r\n */\r\n public static AddRadioButtonWithHeader(title: string, group: string, isChecked: boolean, onValueChanged: (button: RadioButton, value: boolean) => void): StackPanel {\r\n const panel = new StackPanel();\r\n panel.isVertical = false;\r\n panel.height = \"30px\";\r\n\r\n const radio = new RadioButton();\r\n radio.width = \"20px\";\r\n radio.height = \"20px\";\r\n radio.isChecked = isChecked;\r\n radio.color = \"green\";\r\n radio.group = group;\r\n radio.onIsCheckedChangedObservable.add((value) => onValueChanged(radio, value));\r\n panel.addControl(radio);\r\n\r\n const header = new TextBlock();\r\n header.text = title;\r\n header.width = \"180px\";\r\n header.paddingLeft = \"5px\";\r\n header.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n header.color = \"white\";\r\n panel.addControl(header);\r\n\r\n return panel;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the RadioButton class with the type store for serialization support.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterRadioButton(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GUI.RadioButton\", RadioButton);\r\n}\r\n"]}
|
|
@@ -1,43 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
name?: string | undefined;
|
|
7
|
-
private _thickness;
|
|
8
|
-
private _cornerRadius;
|
|
9
|
-
private _cachedRadius;
|
|
10
|
-
/** Gets or sets border thickness */
|
|
11
|
-
get thickness(): number;
|
|
12
|
-
set thickness(value: number);
|
|
13
|
-
/** Gets or sets the corner radius of all angles */
|
|
14
|
-
get cornerRadius(): number;
|
|
15
|
-
set cornerRadius(value: number);
|
|
16
|
-
/** Gets or sets the corner radius top left angle */
|
|
17
|
-
get cornerRadiusX(): number;
|
|
18
|
-
set cornerRadiusX(value: number);
|
|
19
|
-
/** Gets or sets the corner radius top right angle */
|
|
20
|
-
get cornerRadiusY(): number;
|
|
21
|
-
set cornerRadiusY(value: number);
|
|
22
|
-
/** Gets or sets the corner radius bottom left angle */
|
|
23
|
-
get cornerRadiusZ(): number;
|
|
24
|
-
set cornerRadiusZ(value: number);
|
|
25
|
-
/** Gets or sets the corner radius bottom right angle */
|
|
26
|
-
get cornerRadiusW(): number;
|
|
27
|
-
set cornerRadiusW(value: number);
|
|
28
|
-
/**
|
|
29
|
-
* Creates a new Rectangle
|
|
30
|
-
* @param name defines the control name
|
|
31
|
-
*/
|
|
32
|
-
constructor(name?: string | undefined);
|
|
33
|
-
protected _getTypeName(): string;
|
|
34
|
-
/** @internal */
|
|
35
|
-
protected _computeAdditionalOffsetX(): number;
|
|
36
|
-
/** @internal */
|
|
37
|
-
protected _computeAdditionalOffsetY(): number;
|
|
38
|
-
protected _getRectangleFill(context: ICanvasRenderingContext): string | CanvasGradient;
|
|
39
|
-
protected _localDraw(context: ICanvasRenderingContext): void;
|
|
40
|
-
protected _additionalProcessing(parentMeasure: Measure, context: ICanvasRenderingContext): void;
|
|
41
|
-
private _drawRoundedRect;
|
|
42
|
-
protected _clipForChildren(context: ICanvasRenderingContext): void;
|
|
43
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Re-exports the pure implementation and applies the runtime registration side effect.
|
|
3
|
+
* Import "./rectangle.pure" for tree-shakeable, side-effect-free usage.
|
|
4
|
+
*/
|
|
5
|
+
export * from "./rectangle.pure.js";
|