@babylonjs/gui 9.15.0 → 9.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/2D/controls/checkbox.pure.js +164 -153
  2. package/2D/controls/checkbox.pure.js.map +1 -1
  3. package/2D/controls/colorpicker.pure.js +1300 -1289
  4. package/2D/controls/colorpicker.pure.js.map +1 -1
  5. package/2D/controls/container.pure.js +597 -582
  6. package/2D/controls/container.pure.js.map +1 -1
  7. package/2D/controls/control.pure.js +2474 -2434
  8. package/2D/controls/control.pure.js.map +1 -1
  9. package/2D/controls/displayGrid.pure.js +201 -190
  10. package/2D/controls/displayGrid.pure.js.map +1 -1
  11. package/2D/controls/ellipse.pure.js +96 -85
  12. package/2D/controls/ellipse.pure.js.map +1 -1
  13. package/2D/controls/grid.pure.js +511 -500
  14. package/2D/controls/grid.pure.js.map +1 -1
  15. package/2D/controls/image.pure.js +888 -877
  16. package/2D/controls/image.pure.js.map +1 -1
  17. package/2D/controls/inputText.pure.js +988 -973
  18. package/2D/controls/inputText.pure.js.map +1 -1
  19. package/2D/controls/inputTextArea.pure.js +955 -944
  20. package/2D/controls/inputTextArea.pure.js.map +1 -1
  21. package/2D/controls/line.pure.js +237 -226
  22. package/2D/controls/line.pure.js.map +1 -1
  23. package/2D/controls/multiLine.pure.js +233 -222
  24. package/2D/controls/multiLine.pure.js.map +1 -1
  25. package/2D/controls/radioButton.pure.js +182 -169
  26. package/2D/controls/radioButton.pure.js.map +1 -1
  27. package/2D/controls/rectangle.pure.js +211 -200
  28. package/2D/controls/rectangle.pure.js.map +1 -1
  29. package/2D/controls/scrollViewers/scrollViewer.pure.js +579 -567
  30. package/2D/controls/scrollViewers/scrollViewer.pure.js.map +1 -1
  31. package/2D/controls/sliders/baseSlider.js +291 -280
  32. package/2D/controls/sliders/baseSlider.js.map +1 -1
  33. package/2D/controls/sliders/imageBasedSlider.pure.js +158 -147
  34. package/2D/controls/sliders/imageBasedSlider.pure.js.map +1 -1
  35. package/2D/controls/sliders/imageScrollBar.js +237 -223
  36. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  37. package/2D/controls/sliders/scrollBar.pure.js +169 -158
  38. package/2D/controls/sliders/scrollBar.pure.js.map +1 -1
  39. package/2D/controls/sliders/slider.pure.js +251 -240
  40. package/2D/controls/sliders/slider.pure.js.map +1 -1
  41. package/2D/controls/stackPanel.pure.js +236 -221
  42. package/2D/controls/stackPanel.pure.js.map +1 -1
  43. package/2D/controls/textBlock.pure.js +637 -626
  44. package/2D/controls/textBlock.pure.js.map +1 -1
  45. package/3D/materials/fluent/fluentMaterial.pure.d.ts +4 -4
  46. package/3D/materials/fluent/fluentMaterial.pure.js +322 -273
  47. package/3D/materials/fluent/fluentMaterial.pure.js.map +1 -1
  48. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js +510 -454
  49. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js.map +1 -1
  50. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js +612 -529
  51. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js.map +1 -1
  52. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js +313 -274
  53. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js.map +1 -1
  54. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js +462 -405
  55. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js.map +1 -1
  56. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js +583 -501
  57. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js.map +1 -1
  58. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js +226 -203
  59. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js.map +1 -1
  60. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js +961 -825
  61. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js.map +1 -1
  62. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js +961 -825
  63. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js.map +1 -1
  64. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import { __decorate } from "@babylonjs/core/tslib.es6.js";
1
+ import { __esDecorate, __runInitializers } from "@babylonjs/core/tslib.es6.js";
2
2
  import { Vector3, Matrix } from "@babylonjs/core/Maths/math.vector.pure.js";
3
3
  import { Tools } from "@babylonjs/core/Misc/tools.pure.js";
4
4
  import { Control } from "./control.pure.js";
@@ -6,231 +6,242 @@ import { ValueAndUnit } from "../valueAndUnit.js";
6
6
  import { RegisterClass } from "@babylonjs/core/Misc/typeStore.js";
7
7
  import { serialize } from "@babylonjs/core/Misc/decorators.js";
8
8
  /** Class used to render 2D lines */
9
- export class Line extends Control {
10
- /** Gets or sets the dash pattern */
11
- get dash() {
12
- return this._dash;
13
- }
14
- set dash(value) {
15
- if (this._dash === value) {
16
- return;
17
- }
18
- this._dash = value;
19
- this._markAsDirty();
20
- }
21
- /** Gets or sets the control connected with the line end */
22
- get connectedControl() {
23
- return this._connectedControl;
24
- }
25
- set connectedControl(value) {
26
- // Don't allow circular references, and no-op if the same control is assigned
27
- if (this._connectedControl === value || (value instanceof Line && value._connectedControl === this)) {
28
- return;
29
- }
30
- if (this._connectedControlDirtyObserver && this._connectedControl) {
31
- this._connectedControl.onDirtyObservable.remove(this._connectedControlDirtyObserver);
32
- this._connectedControlDirtyObserver = null;
33
- }
34
- if (value) {
35
- this._connectedControlDirtyObserver = value.onDirtyObservable.add(() => this._markAsDirty());
36
- }
37
- this._connectedControl = value;
38
- this._markAsDirty();
39
- }
40
- /** Gets or sets start coordinates on X axis */
41
- get x1() {
42
- return this._x1.toString(this._host);
43
- }
44
- set x1(value) {
45
- if (this._x1.toString(this._host) === value) {
46
- return;
47
- }
48
- if (this._x1.fromString(value)) {
49
- this._markAsDirty();
50
- }
51
- }
52
- /** Gets or sets start coordinates on Y axis */
53
- get y1() {
54
- return this._y1.toString(this._host);
55
- }
56
- set y1(value) {
57
- if (this._y1.toString(this._host) === value) {
58
- return;
59
- }
60
- if (this._y1.fromString(value)) {
61
- this._markAsDirty();
62
- }
63
- }
64
- /** Gets or sets end coordinates on X axis */
65
- get x2() {
66
- return this._x2.toString(this._host);
67
- }
68
- set x2(value) {
69
- if (this._x2.toString(this._host) === value) {
70
- return;
71
- }
72
- if (this._x2.fromString(value)) {
73
- this._markAsDirty();
74
- }
75
- }
76
- /** Gets or sets end coordinates on Y axis */
77
- get y2() {
78
- return this._y2.toString(this._host);
79
- }
80
- set y2(value) {
81
- if (this._y2.toString(this._host) === value) {
82
- return;
83
- }
84
- if (this._y2.fromString(value)) {
85
- this._markAsDirty();
86
- }
87
- }
88
- /** Gets or sets line width */
89
- get lineWidth() {
90
- return this._lineWidth;
91
- }
92
- set lineWidth(value) {
93
- if (this._lineWidth === value) {
94
- return;
95
- }
96
- this._lineWidth = value;
97
- this._markAsDirty();
98
- }
99
- /** Gets or sets horizontal alignment */
100
- set horizontalAlignment(value) {
101
- return;
102
- }
103
- /** Gets or sets vertical alignment */
104
- set verticalAlignment(value) {
105
- return;
106
- }
107
- /** @internal */
108
- get _effectiveX2() {
109
- return (this._connectedControl ? this._connectedControl.centerX : 0) + this._x2.getValue(this._host);
110
- }
111
- /** @internal */
112
- get _effectiveY2() {
113
- return (this._connectedControl ? this._connectedControl.centerY : 0) + this._y2.getValue(this._host);
114
- }
115
- /**
116
- * Creates a new Line
117
- * @param name defines the control name
118
- */
119
- constructor(name) {
120
- super(name);
121
- this.name = name;
122
- this._lineWidth = 1;
123
- /** @internal */
124
- this._x1 = new ValueAndUnit(0);
125
- /** @internal */
126
- this._y1 = new ValueAndUnit(0);
127
- /** @internal */
128
- this._x2 = new ValueAndUnit(0);
129
- /** @internal */
130
- this._y2 = new ValueAndUnit(0);
131
- this._dash = new Array();
132
- this._automaticSize = true;
133
- this.isHitTestVisible = false;
134
- this._horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;
135
- this._verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;
136
- }
137
- _getTypeName() {
138
- return "Line";
139
- }
140
- _draw(context) {
141
- context.save();
142
- if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {
143
- context.shadowColor = this.shadowColor;
144
- context.shadowBlur = this.shadowBlur;
145
- context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;
146
- context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;
147
- }
148
- this._applyStates(context);
149
- context.strokeStyle = this._getColor(context);
150
- context.lineWidth = this._lineWidth;
151
- context.setLineDash(this._dash);
152
- context.beginPath();
153
- context.moveTo(this._cachedParentMeasure.left + this._x1.getValue(this._host), this._cachedParentMeasure.top + this._y1.getValue(this._host));
154
- context.lineTo(this._cachedParentMeasure.left + this._effectiveX2, this._cachedParentMeasure.top + this._effectiveY2);
155
- context.stroke();
156
- context.restore();
157
- }
158
- _measure() {
159
- // Width / Height
160
- this._currentMeasure.width = Math.abs(this._x1.getValue(this._host) - this._effectiveX2) + this._lineWidth;
161
- this._currentMeasure.height = Math.abs(this._y1.getValue(this._host) - this._effectiveY2) + this._lineWidth;
162
- }
163
- _layout(parentMeasure, context) {
164
- if (this._connectedControl) {
165
- // If we have a connected control, we need to let it layout first so we can ensure our layout math uses its latest position
166
- this._connectedControl._layout(parentMeasure, context);
167
- }
168
- return super._layout(parentMeasure, context);
169
- }
170
- _computeAlignment(parentMeasure) {
171
- this._currentMeasure.left = parentMeasure.left + Math.min(this._x1.getValue(this._host), this._effectiveX2) - this._lineWidth / 2;
172
- this._currentMeasure.top = parentMeasure.top + Math.min(this._y1.getValue(this._host), this._effectiveY2) - this._lineWidth / 2;
173
- }
174
- /**
175
- * Move one end of the line given 3D cartesian coordinates.
176
- * @param position Targeted world position
177
- * @param scene Scene
178
- * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.
179
- */
180
- moveToVector3(position, scene, end = false) {
181
- if (!this._host || this.parent !== this._host._rootContainer) {
182
- Tools.Error("Cannot move a control to a vector3 if the control is not at root level");
183
- return;
184
- }
185
- const globalViewport = this._host._getGlobalViewport();
186
- const projectedPosition = Vector3.Project(position, Matrix.IdentityReadOnly, scene.getTransformMatrix(), globalViewport);
187
- this._moveToProjectedPosition(projectedPosition, end);
188
- if (projectedPosition.z < 0 || projectedPosition.z > 1) {
189
- this.notRenderable = true;
190
- return;
191
- }
192
- this.notRenderable = false;
193
- }
194
- /**
195
- * Move one end of the line to a position in screen absolute space.
196
- * @param projectedPosition Position in screen absolute space (X, Y)
197
- * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.
198
- */
199
- _moveToProjectedPosition(projectedPosition, end = false) {
200
- const x = projectedPosition.x + this._linkOffsetX.getValue(this._host) + "px";
201
- const y = projectedPosition.y + this._linkOffsetY.getValue(this._host) + "px";
202
- if (end) {
203
- this.x2 = x;
204
- this.y2 = y;
205
- this._x2.ignoreAdaptiveScaling = true;
206
- this._y2.ignoreAdaptiveScaling = true;
207
- }
208
- else {
209
- this.x1 = x;
210
- this.y1 = y;
211
- this._x1.ignoreAdaptiveScaling = true;
212
- this._y1.ignoreAdaptiveScaling = true;
213
- }
214
- }
215
- }
216
- __decorate([
217
- serialize()
218
- ], Line.prototype, "dash", null);
219
- __decorate([
220
- serialize()
221
- ], Line.prototype, "x1", null);
222
- __decorate([
223
- serialize()
224
- ], Line.prototype, "y1", null);
225
- __decorate([
226
- serialize()
227
- ], Line.prototype, "x2", null);
228
- __decorate([
229
- serialize()
230
- ], Line.prototype, "y2", null);
231
- __decorate([
232
- serialize()
233
- ], Line.prototype, "lineWidth", null);
9
+ let Line = (() => {
10
+ var _a;
11
+ let _classSuper = Control;
12
+ let _instanceExtraInitializers = [];
13
+ let _get_dash_decorators;
14
+ let _get_x1_decorators;
15
+ let _get_y1_decorators;
16
+ let _get_x2_decorators;
17
+ let _get_y2_decorators;
18
+ let _get_lineWidth_decorators;
19
+ return _a = class Line extends _classSuper {
20
+ /** Gets or sets the dash pattern */
21
+ get dash() {
22
+ return this._dash;
23
+ }
24
+ set dash(value) {
25
+ if (this._dash === value) {
26
+ return;
27
+ }
28
+ this._dash = value;
29
+ this._markAsDirty();
30
+ }
31
+ /** Gets or sets the control connected with the line end */
32
+ get connectedControl() {
33
+ return this._connectedControl;
34
+ }
35
+ set connectedControl(value) {
36
+ // Don't allow circular references, and no-op if the same control is assigned
37
+ if (this._connectedControl === value || (value instanceof _a && value._connectedControl === this)) {
38
+ return;
39
+ }
40
+ if (this._connectedControlDirtyObserver && this._connectedControl) {
41
+ this._connectedControl.onDirtyObservable.remove(this._connectedControlDirtyObserver);
42
+ this._connectedControlDirtyObserver = null;
43
+ }
44
+ if (value) {
45
+ this._connectedControlDirtyObserver = value.onDirtyObservable.add(() => this._markAsDirty());
46
+ }
47
+ this._connectedControl = value;
48
+ this._markAsDirty();
49
+ }
50
+ /** Gets or sets start coordinates on X axis */
51
+ get x1() {
52
+ return this._x1.toString(this._host);
53
+ }
54
+ set x1(value) {
55
+ if (this._x1.toString(this._host) === value) {
56
+ return;
57
+ }
58
+ if (this._x1.fromString(value)) {
59
+ this._markAsDirty();
60
+ }
61
+ }
62
+ /** Gets or sets start coordinates on Y axis */
63
+ get y1() {
64
+ return this._y1.toString(this._host);
65
+ }
66
+ set y1(value) {
67
+ if (this._y1.toString(this._host) === value) {
68
+ return;
69
+ }
70
+ if (this._y1.fromString(value)) {
71
+ this._markAsDirty();
72
+ }
73
+ }
74
+ /** Gets or sets end coordinates on X axis */
75
+ get x2() {
76
+ return this._x2.toString(this._host);
77
+ }
78
+ set x2(value) {
79
+ if (this._x2.toString(this._host) === value) {
80
+ return;
81
+ }
82
+ if (this._x2.fromString(value)) {
83
+ this._markAsDirty();
84
+ }
85
+ }
86
+ /** Gets or sets end coordinates on Y axis */
87
+ get y2() {
88
+ return this._y2.toString(this._host);
89
+ }
90
+ set y2(value) {
91
+ if (this._y2.toString(this._host) === value) {
92
+ return;
93
+ }
94
+ if (this._y2.fromString(value)) {
95
+ this._markAsDirty();
96
+ }
97
+ }
98
+ /** Gets or sets line width */
99
+ get lineWidth() {
100
+ return this._lineWidth;
101
+ }
102
+ set lineWidth(value) {
103
+ if (this._lineWidth === value) {
104
+ return;
105
+ }
106
+ this._lineWidth = value;
107
+ this._markAsDirty();
108
+ }
109
+ /** Gets or sets horizontal alignment */
110
+ set horizontalAlignment(value) {
111
+ return;
112
+ }
113
+ /** Gets or sets vertical alignment */
114
+ set verticalAlignment(value) {
115
+ return;
116
+ }
117
+ /** @internal */
118
+ get _effectiveX2() {
119
+ return (this._connectedControl ? this._connectedControl.centerX : 0) + this._x2.getValue(this._host);
120
+ }
121
+ /** @internal */
122
+ get _effectiveY2() {
123
+ return (this._connectedControl ? this._connectedControl.centerY : 0) + this._y2.getValue(this._host);
124
+ }
125
+ /**
126
+ * Creates a new Line
127
+ * @param name defines the control name
128
+ */
129
+ constructor(name) {
130
+ super(name);
131
+ this.name = (__runInitializers(this, _instanceExtraInitializers), name);
132
+ this._lineWidth = 1;
133
+ /** @internal */
134
+ this._x1 = new ValueAndUnit(0);
135
+ /** @internal */
136
+ this._y1 = new ValueAndUnit(0);
137
+ /** @internal */
138
+ this._x2 = new ValueAndUnit(0);
139
+ /** @internal */
140
+ this._y2 = new ValueAndUnit(0);
141
+ this._dash = new Array();
142
+ this._automaticSize = true;
143
+ this.isHitTestVisible = false;
144
+ this._horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;
145
+ this._verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;
146
+ }
147
+ _getTypeName() {
148
+ return "Line";
149
+ }
150
+ _draw(context) {
151
+ context.save();
152
+ if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {
153
+ context.shadowColor = this.shadowColor;
154
+ context.shadowBlur = this.shadowBlur;
155
+ context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;
156
+ context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;
157
+ }
158
+ this._applyStates(context);
159
+ context.strokeStyle = this._getColor(context);
160
+ context.lineWidth = this._lineWidth;
161
+ context.setLineDash(this._dash);
162
+ context.beginPath();
163
+ context.moveTo(this._cachedParentMeasure.left + this._x1.getValue(this._host), this._cachedParentMeasure.top + this._y1.getValue(this._host));
164
+ context.lineTo(this._cachedParentMeasure.left + this._effectiveX2, this._cachedParentMeasure.top + this._effectiveY2);
165
+ context.stroke();
166
+ context.restore();
167
+ }
168
+ _measure() {
169
+ // Width / Height
170
+ this._currentMeasure.width = Math.abs(this._x1.getValue(this._host) - this._effectiveX2) + this._lineWidth;
171
+ this._currentMeasure.height = Math.abs(this._y1.getValue(this._host) - this._effectiveY2) + this._lineWidth;
172
+ }
173
+ _layout(parentMeasure, context) {
174
+ if (this._connectedControl) {
175
+ // If we have a connected control, we need to let it layout first so we can ensure our layout math uses its latest position
176
+ this._connectedControl._layout(parentMeasure, context);
177
+ }
178
+ return super._layout(parentMeasure, context);
179
+ }
180
+ _computeAlignment(parentMeasure) {
181
+ this._currentMeasure.left = parentMeasure.left + Math.min(this._x1.getValue(this._host), this._effectiveX2) - this._lineWidth / 2;
182
+ this._currentMeasure.top = parentMeasure.top + Math.min(this._y1.getValue(this._host), this._effectiveY2) - this._lineWidth / 2;
183
+ }
184
+ /**
185
+ * Move one end of the line given 3D cartesian coordinates.
186
+ * @param position Targeted world position
187
+ * @param scene Scene
188
+ * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.
189
+ */
190
+ moveToVector3(position, scene, end = false) {
191
+ if (!this._host || this.parent !== this._host._rootContainer) {
192
+ Tools.Error("Cannot move a control to a vector3 if the control is not at root level");
193
+ return;
194
+ }
195
+ const globalViewport = this._host._getGlobalViewport();
196
+ const projectedPosition = Vector3.Project(position, Matrix.IdentityReadOnly, scene.getTransformMatrix(), globalViewport);
197
+ this._moveToProjectedPosition(projectedPosition, end);
198
+ if (projectedPosition.z < 0 || projectedPosition.z > 1) {
199
+ this.notRenderable = true;
200
+ return;
201
+ }
202
+ this.notRenderable = false;
203
+ }
204
+ /**
205
+ * Move one end of the line to a position in screen absolute space.
206
+ * @param projectedPosition Position in screen absolute space (X, Y)
207
+ * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.
208
+ */
209
+ _moveToProjectedPosition(projectedPosition, end = false) {
210
+ const x = projectedPosition.x + this._linkOffsetX.getValue(this._host) + "px";
211
+ const y = projectedPosition.y + this._linkOffsetY.getValue(this._host) + "px";
212
+ if (end) {
213
+ this.x2 = x;
214
+ this.y2 = y;
215
+ this._x2.ignoreAdaptiveScaling = true;
216
+ this._y2.ignoreAdaptiveScaling = true;
217
+ }
218
+ else {
219
+ this.x1 = x;
220
+ this.y1 = y;
221
+ this._x1.ignoreAdaptiveScaling = true;
222
+ this._y1.ignoreAdaptiveScaling = true;
223
+ }
224
+ }
225
+ },
226
+ (() => {
227
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
228
+ _get_dash_decorators = [serialize()];
229
+ _get_x1_decorators = [serialize()];
230
+ _get_y1_decorators = [serialize()];
231
+ _get_x2_decorators = [serialize()];
232
+ _get_y2_decorators = [serialize()];
233
+ _get_lineWidth_decorators = [serialize()];
234
+ __esDecorate(_a, null, _get_dash_decorators, { kind: "getter", name: "dash", static: false, private: false, access: { has: obj => "dash" in obj, get: obj => obj.dash }, metadata: _metadata }, null, _instanceExtraInitializers);
235
+ __esDecorate(_a, null, _get_x1_decorators, { kind: "getter", name: "x1", static: false, private: false, access: { has: obj => "x1" in obj, get: obj => obj.x1 }, metadata: _metadata }, null, _instanceExtraInitializers);
236
+ __esDecorate(_a, null, _get_y1_decorators, { kind: "getter", name: "y1", static: false, private: false, access: { has: obj => "y1" in obj, get: obj => obj.y1 }, metadata: _metadata }, null, _instanceExtraInitializers);
237
+ __esDecorate(_a, null, _get_x2_decorators, { kind: "getter", name: "x2", static: false, private: false, access: { has: obj => "x2" in obj, get: obj => obj.x2 }, metadata: _metadata }, null, _instanceExtraInitializers);
238
+ __esDecorate(_a, null, _get_y2_decorators, { kind: "getter", name: "y2", static: false, private: false, access: { has: obj => "y2" in obj, get: obj => obj.y2 }, metadata: _metadata }, null, _instanceExtraInitializers);
239
+ __esDecorate(_a, null, _get_lineWidth_decorators, { kind: "getter", name: "lineWidth", static: false, private: false, access: { has: obj => "lineWidth" in obj, get: obj => obj.lineWidth }, metadata: _metadata }, null, _instanceExtraInitializers);
240
+ if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
241
+ })(),
242
+ _a;
243
+ })();
244
+ export { Line };
234
245
  let _Registered = false;
235
246
  /**
236
247
  * Registers the Line class with the type store for serialization support.
@@ -1 +1 @@
1
- {"version":3,"file":"line.pure.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/line.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type Observer } from \"core/Misc/observable\";\r\nimport { Vector3, Matrix } from \"core/Maths/math.vector.pure\";\r\nimport { Tools } from \"core/Misc/tools.pure\";\r\nimport { type Scene } from \"core/scene\";\r\n\r\nimport { Control } from \"./control.pure\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport { type Measure } from \"../measure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { type ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/** Class used to render 2D lines */\r\nexport class Line extends Control {\r\n private _lineWidth = 1;\r\n /** @internal */\r\n public _x1 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _y1 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _x2 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _y2 = new ValueAndUnit(0);\r\n private _dash = new Array<number>();\r\n private _connectedControl: Control;\r\n private _connectedControlDirtyObserver: Nullable<Observer<Control>>;\r\n\r\n /** Gets or sets the dash pattern */\r\n @serialize()\r\n public get dash(): Array<number> {\r\n return this._dash;\r\n }\r\n\r\n public set dash(value: Array<number>) {\r\n if (this._dash === value) {\r\n return;\r\n }\r\n\r\n this._dash = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the control connected with the line end */\r\n public get connectedControl(): Control {\r\n return this._connectedControl;\r\n }\r\n\r\n public set connectedControl(value: Control) {\r\n // Don't allow circular references, and no-op if the same control is assigned\r\n if (this._connectedControl === value || (value instanceof Line && value._connectedControl === (this as Control))) {\r\n return;\r\n }\r\n\r\n if (this._connectedControlDirtyObserver && this._connectedControl) {\r\n this._connectedControl.onDirtyObservable.remove(this._connectedControlDirtyObserver);\r\n this._connectedControlDirtyObserver = null;\r\n }\r\n\r\n if (value) {\r\n this._connectedControlDirtyObserver = value.onDirtyObservable.add(() => this._markAsDirty());\r\n }\r\n\r\n this._connectedControl = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets start coordinates on X axis */\r\n @serialize()\r\n public get x1(): string | number {\r\n return this._x1.toString(this._host);\r\n }\r\n\r\n public set x1(value: string | number) {\r\n if (this._x1.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._x1.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets start coordinates on Y axis */\r\n @serialize()\r\n public get y1(): string | number {\r\n return this._y1.toString(this._host);\r\n }\r\n\r\n public set y1(value: string | number) {\r\n if (this._y1.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._y1.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets end coordinates on X axis */\r\n @serialize()\r\n public get x2(): string | number {\r\n return this._x2.toString(this._host);\r\n }\r\n\r\n public set x2(value: string | number) {\r\n if (this._x2.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._x2.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets end coordinates on Y axis */\r\n @serialize()\r\n public get y2(): string | number {\r\n return this._y2.toString(this._host);\r\n }\r\n\r\n public set y2(value: string | number) {\r\n if (this._y2.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._y2.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets line width */\r\n @serialize()\r\n public get lineWidth(): number {\r\n return this._lineWidth;\r\n }\r\n\r\n public set lineWidth(value: number) {\r\n if (this._lineWidth === value) {\r\n return;\r\n }\r\n\r\n this._lineWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets horizontal alignment */\r\n public override set horizontalAlignment(value: number) {\r\n return;\r\n }\r\n\r\n /** Gets or sets vertical alignment */\r\n public override set verticalAlignment(value: number) {\r\n return;\r\n }\r\n\r\n /** @internal */\r\n public get _effectiveX2(): number {\r\n return (this._connectedControl ? this._connectedControl.centerX : 0) + this._x2.getValue(this._host);\r\n }\r\n\r\n /** @internal */\r\n public get _effectiveY2(): number {\r\n return (this._connectedControl ? this._connectedControl.centerY : 0) + this._y2.getValue(this._host);\r\n }\r\n\r\n /**\r\n * Creates a new Line\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._automaticSize = true;\r\n\r\n this.isHitTestVisible = false;\r\n this._horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n this._verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"Line\";\r\n }\r\n\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\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 this._applyStates(context);\r\n context.strokeStyle = this._getColor(context);\r\n context.lineWidth = this._lineWidth;\r\n context.setLineDash(this._dash);\r\n\r\n context.beginPath();\r\n context.moveTo(this._cachedParentMeasure.left + this._x1.getValue(this._host), this._cachedParentMeasure.top + this._y1.getValue(this._host));\r\n\r\n context.lineTo(this._cachedParentMeasure.left + this._effectiveX2, this._cachedParentMeasure.top + this._effectiveY2);\r\n context.stroke();\r\n\r\n context.restore();\r\n }\r\n\r\n public override _measure(): void {\r\n // Width / Height\r\n this._currentMeasure.width = Math.abs(this._x1.getValue(this._host) - this._effectiveX2) + this._lineWidth;\r\n this._currentMeasure.height = Math.abs(this._y1.getValue(this._host) - this._effectiveY2) + this._lineWidth;\r\n }\r\n\r\n public override _layout(parentMeasure: Measure, context: ICanvasRenderingContext): boolean {\r\n if (this._connectedControl) {\r\n // If we have a connected control, we need to let it layout first so we can ensure our layout math uses its latest position\r\n this._connectedControl._layout(parentMeasure, context);\r\n }\r\n return super._layout(parentMeasure, context);\r\n }\r\n\r\n protected override _computeAlignment(parentMeasure: Measure): void {\r\n this._currentMeasure.left = parentMeasure.left + Math.min(this._x1.getValue(this._host), this._effectiveX2) - this._lineWidth / 2;\r\n this._currentMeasure.top = parentMeasure.top + Math.min(this._y1.getValue(this._host), this._effectiveY2) - this._lineWidth / 2;\r\n }\r\n\r\n /**\r\n * Move one end of the line given 3D cartesian coordinates.\r\n * @param position Targeted world position\r\n * @param scene Scene\r\n * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.\r\n */\r\n public override moveToVector3(position: Vector3, scene: Scene, end: boolean = false): void {\r\n if (!this._host || this.parent !== this._host._rootContainer) {\r\n Tools.Error(\"Cannot move a control to a vector3 if the control is not at root level\");\r\n return;\r\n }\r\n\r\n const globalViewport = this._host._getGlobalViewport();\r\n const projectedPosition = Vector3.Project(position, Matrix.IdentityReadOnly, scene.getTransformMatrix(), globalViewport);\r\n\r\n this._moveToProjectedPosition(projectedPosition, end);\r\n\r\n if (projectedPosition.z < 0 || projectedPosition.z > 1) {\r\n this.notRenderable = true;\r\n return;\r\n }\r\n this.notRenderable = false;\r\n }\r\n\r\n /**\r\n * Move one end of the line to a position in screen absolute space.\r\n * @param projectedPosition Position in screen absolute space (X, Y)\r\n * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.\r\n */\r\n public override _moveToProjectedPosition(projectedPosition: Vector3, end: boolean = false): void {\r\n const x: string = projectedPosition.x + this._linkOffsetX.getValue(this._host) + \"px\";\r\n const y: string = projectedPosition.y + this._linkOffsetY.getValue(this._host) + \"px\";\r\n\r\n if (end) {\r\n this.x2 = x;\r\n this.y2 = y;\r\n this._x2.ignoreAdaptiveScaling = true;\r\n this._y2.ignoreAdaptiveScaling = true;\r\n } else {\r\n this.x1 = x;\r\n this.y1 = y;\r\n this._x1.ignoreAdaptiveScaling = true;\r\n this._y1.ignoreAdaptiveScaling = true;\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the Line 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 RegisterLine(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GUI.Line\", Line);\r\n}\r\n"]}
1
+ {"version":3,"file":"line.pure.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/line.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type Observer } from \"core/Misc/observable\";\r\nimport { Vector3, Matrix } from \"core/Maths/math.vector.pure\";\r\nimport { Tools } from \"core/Misc/tools.pure\";\r\nimport { type Scene } from \"core/scene\";\r\n\r\nimport { Control } from \"./control.pure\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport { type Measure } from \"../measure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { type ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/** Class used to render 2D lines */\r\nexport class Line extends Control {\r\n private _lineWidth = 1;\r\n /** @internal */\r\n public _x1 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _y1 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _x2 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _y2 = new ValueAndUnit(0);\r\n private _dash = new Array<number>();\r\n private _connectedControl: Control;\r\n private _connectedControlDirtyObserver: Nullable<Observer<Control>>;\r\n\r\n /** Gets or sets the dash pattern */\r\n @serialize()\r\n public get dash(): Array<number> {\r\n return this._dash;\r\n }\r\n\r\n public set dash(value: Array<number>) {\r\n if (this._dash === value) {\r\n return;\r\n }\r\n\r\n this._dash = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the control connected with the line end */\r\n public get connectedControl(): Control {\r\n return this._connectedControl;\r\n }\r\n\r\n public set connectedControl(value: Control) {\r\n // Don't allow circular references, and no-op if the same control is assigned\r\n if (this._connectedControl === value || (value instanceof Line && value._connectedControl === (this as Control))) {\r\n return;\r\n }\r\n\r\n if (this._connectedControlDirtyObserver && this._connectedControl) {\r\n this._connectedControl.onDirtyObservable.remove(this._connectedControlDirtyObserver);\r\n this._connectedControlDirtyObserver = null;\r\n }\r\n\r\n if (value) {\r\n this._connectedControlDirtyObserver = value.onDirtyObservable.add(() => this._markAsDirty());\r\n }\r\n\r\n this._connectedControl = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets start coordinates on X axis */\r\n @serialize()\r\n public get x1(): string | number {\r\n return this._x1.toString(this._host);\r\n }\r\n\r\n public set x1(value: string | number) {\r\n if (this._x1.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._x1.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets start coordinates on Y axis */\r\n @serialize()\r\n public get y1(): string | number {\r\n return this._y1.toString(this._host);\r\n }\r\n\r\n public set y1(value: string | number) {\r\n if (this._y1.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._y1.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets end coordinates on X axis */\r\n @serialize()\r\n public get x2(): string | number {\r\n return this._x2.toString(this._host);\r\n }\r\n\r\n public set x2(value: string | number) {\r\n if (this._x2.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._x2.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets end coordinates on Y axis */\r\n @serialize()\r\n public get y2(): string | number {\r\n return this._y2.toString(this._host);\r\n }\r\n\r\n public set y2(value: string | number) {\r\n if (this._y2.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._y2.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets line width */\r\n @serialize()\r\n public get lineWidth(): number {\r\n return this._lineWidth;\r\n }\r\n\r\n public set lineWidth(value: number) {\r\n if (this._lineWidth === value) {\r\n return;\r\n }\r\n\r\n this._lineWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets horizontal alignment */\r\n public override set horizontalAlignment(value: number) {\r\n return;\r\n }\r\n\r\n /** Gets or sets vertical alignment */\r\n public override set verticalAlignment(value: number) {\r\n return;\r\n }\r\n\r\n /** @internal */\r\n public get _effectiveX2(): number {\r\n return (this._connectedControl ? this._connectedControl.centerX : 0) + this._x2.getValue(this._host);\r\n }\r\n\r\n /** @internal */\r\n public get _effectiveY2(): number {\r\n return (this._connectedControl ? this._connectedControl.centerY : 0) + this._y2.getValue(this._host);\r\n }\r\n\r\n /**\r\n * Creates a new Line\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._automaticSize = true;\r\n\r\n this.isHitTestVisible = false;\r\n this._horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n this._verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"Line\";\r\n }\r\n\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\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 this._applyStates(context);\r\n context.strokeStyle = this._getColor(context);\r\n context.lineWidth = this._lineWidth;\r\n context.setLineDash(this._dash);\r\n\r\n context.beginPath();\r\n context.moveTo(this._cachedParentMeasure.left + this._x1.getValue(this._host), this._cachedParentMeasure.top + this._y1.getValue(this._host));\r\n\r\n context.lineTo(this._cachedParentMeasure.left + this._effectiveX2, this._cachedParentMeasure.top + this._effectiveY2);\r\n context.stroke();\r\n\r\n context.restore();\r\n }\r\n\r\n public override _measure(): void {\r\n // Width / Height\r\n this._currentMeasure.width = Math.abs(this._x1.getValue(this._host) - this._effectiveX2) + this._lineWidth;\r\n this._currentMeasure.height = Math.abs(this._y1.getValue(this._host) - this._effectiveY2) + this._lineWidth;\r\n }\r\n\r\n public override _layout(parentMeasure: Measure, context: ICanvasRenderingContext): boolean {\r\n if (this._connectedControl) {\r\n // If we have a connected control, we need to let it layout first so we can ensure our layout math uses its latest position\r\n this._connectedControl._layout(parentMeasure, context);\r\n }\r\n return super._layout(parentMeasure, context);\r\n }\r\n\r\n protected override _computeAlignment(parentMeasure: Measure): void {\r\n this._currentMeasure.left = parentMeasure.left + Math.min(this._x1.getValue(this._host), this._effectiveX2) - this._lineWidth / 2;\r\n this._currentMeasure.top = parentMeasure.top + Math.min(this._y1.getValue(this._host), this._effectiveY2) - this._lineWidth / 2;\r\n }\r\n\r\n /**\r\n * Move one end of the line given 3D cartesian coordinates.\r\n * @param position Targeted world position\r\n * @param scene Scene\r\n * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.\r\n */\r\n public override moveToVector3(position: Vector3, scene: Scene, end: boolean = false): void {\r\n if (!this._host || this.parent !== this._host._rootContainer) {\r\n Tools.Error(\"Cannot move a control to a vector3 if the control is not at root level\");\r\n return;\r\n }\r\n\r\n const globalViewport = this._host._getGlobalViewport();\r\n const projectedPosition = Vector3.Project(position, Matrix.IdentityReadOnly, scene.getTransformMatrix(), globalViewport);\r\n\r\n this._moveToProjectedPosition(projectedPosition, end);\r\n\r\n if (projectedPosition.z < 0 || projectedPosition.z > 1) {\r\n this.notRenderable = true;\r\n return;\r\n }\r\n this.notRenderable = false;\r\n }\r\n\r\n /**\r\n * Move one end of the line to a position in screen absolute space.\r\n * @param projectedPosition Position in screen absolute space (X, Y)\r\n * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.\r\n */\r\n public override _moveToProjectedPosition(projectedPosition: Vector3, end: boolean = false): void {\r\n const x: string = projectedPosition.x + this._linkOffsetX.getValue(this._host) + \"px\";\r\n const y: string = projectedPosition.y + this._linkOffsetY.getValue(this._host) + \"px\";\r\n\r\n if (end) {\r\n this.x2 = x;\r\n this.y2 = y;\r\n this._x2.ignoreAdaptiveScaling = true;\r\n this._y2.ignoreAdaptiveScaling = true;\r\n } else {\r\n this.x1 = x;\r\n this.y1 = y;\r\n this._x1.ignoreAdaptiveScaling = true;\r\n this._y1.ignoreAdaptiveScaling = true;\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the Line 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 RegisterLine(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GUI.Line\", Line);\r\n}\r\n"]}