@babylonjs/gui 9.14.0 → 9.16.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.
Files changed (106) hide show
  1. package/2D/advancedDynamicTexture.d.ts +2 -2
  2. package/2D/advancedDynamicTexture.js +2 -2
  3. package/2D/advancedDynamicTexture.js.map +1 -1
  4. package/2D/controls/checkbox.pure.js +164 -153
  5. package/2D/controls/checkbox.pure.js.map +1 -1
  6. package/2D/controls/colorpicker.pure.js +1300 -1289
  7. package/2D/controls/colorpicker.pure.js.map +1 -1
  8. package/2D/controls/container.pure.js +597 -582
  9. package/2D/controls/container.pure.js.map +1 -1
  10. package/2D/controls/control.pure.js +2474 -2434
  11. package/2D/controls/control.pure.js.map +1 -1
  12. package/2D/controls/displayGrid.pure.js +201 -190
  13. package/2D/controls/displayGrid.pure.js.map +1 -1
  14. package/2D/controls/ellipse.pure.js +96 -85
  15. package/2D/controls/ellipse.pure.js.map +1 -1
  16. package/2D/controls/grid.pure.js +511 -500
  17. package/2D/controls/grid.pure.js.map +1 -1
  18. package/2D/controls/image.pure.js +888 -877
  19. package/2D/controls/image.pure.js.map +1 -1
  20. package/2D/controls/inputText.pure.js +988 -973
  21. package/2D/controls/inputText.pure.js.map +1 -1
  22. package/2D/controls/inputTextArea.pure.js +955 -944
  23. package/2D/controls/inputTextArea.pure.js.map +1 -1
  24. package/2D/controls/line.pure.js +237 -226
  25. package/2D/controls/line.pure.js.map +1 -1
  26. package/2D/controls/multiLine.pure.js +233 -222
  27. package/2D/controls/multiLine.pure.js.map +1 -1
  28. package/2D/controls/radioButton.pure.js +182 -169
  29. package/2D/controls/radioButton.pure.js.map +1 -1
  30. package/2D/controls/rectangle.pure.js +211 -200
  31. package/2D/controls/rectangle.pure.js.map +1 -1
  32. package/2D/controls/scrollViewers/scrollViewer.pure.js +579 -567
  33. package/2D/controls/scrollViewers/scrollViewer.pure.js.map +1 -1
  34. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +1 -1
  35. package/2D/controls/scrollViewers/scrollViewerWindow.js +2 -2
  36. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  37. package/2D/controls/selector.d.ts +2 -2
  38. package/2D/controls/selector.js +8 -8
  39. package/2D/controls/selector.js.map +1 -1
  40. package/2D/controls/sliders/baseSlider.d.ts +1 -1
  41. package/2D/controls/sliders/baseSlider.js +292 -281
  42. package/2D/controls/sliders/baseSlider.js.map +1 -1
  43. package/2D/controls/sliders/imageBasedSlider.pure.js +158 -147
  44. package/2D/controls/sliders/imageBasedSlider.pure.js.map +1 -1
  45. package/2D/controls/sliders/imageScrollBar.js +237 -223
  46. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  47. package/2D/controls/sliders/scrollBar.pure.js +169 -158
  48. package/2D/controls/sliders/scrollBar.pure.js.map +1 -1
  49. package/2D/controls/sliders/slider.pure.js +251 -240
  50. package/2D/controls/sliders/slider.pure.js.map +1 -1
  51. package/2D/controls/stackPanel.pure.js +236 -221
  52. package/2D/controls/stackPanel.pure.js.map +1 -1
  53. package/2D/controls/textBlock.pure.js +637 -626
  54. package/2D/controls/textBlock.pure.js.map +1 -1
  55. package/2D/math2D.d.ts +1 -1
  56. package/2D/math2D.js +1 -1
  57. package/2D/math2D.js.map +1 -1
  58. package/2D/measure.js +1 -1
  59. package/2D/measure.js.map +1 -1
  60. package/3D/controls/MRTK3/touchHolographicButton.d.ts +4 -4
  61. package/3D/controls/MRTK3/touchHolographicButton.js +10 -10
  62. package/3D/controls/MRTK3/touchHolographicButton.js.map +1 -1
  63. package/3D/controls/holographicBackplate.d.ts +1 -1
  64. package/3D/controls/holographicBackplate.js +1 -1
  65. package/3D/controls/holographicBackplate.js.map +1 -1
  66. package/3D/controls/holographicButton.d.ts +1 -1
  67. package/3D/controls/holographicButton.js +4 -4
  68. package/3D/controls/holographicButton.js.map +1 -1
  69. package/3D/controls/holographicSlate.js +4 -4
  70. package/3D/controls/holographicSlate.js.map +1 -1
  71. package/3D/controls/slider3D.d.ts +3 -3
  72. package/3D/controls/slider3D.js +3 -3
  73. package/3D/controls/slider3D.js.map +1 -1
  74. package/3D/controls/touchHolographicButton.d.ts +2 -2
  75. package/3D/controls/touchHolographicButton.js +5 -5
  76. package/3D/controls/touchHolographicButton.js.map +1 -1
  77. package/3D/controls/touchHolographicMenu.js +1 -1
  78. package/3D/controls/touchHolographicMenu.js.map +1 -1
  79. package/3D/gizmos/gizmoHandle.d.ts +1 -1
  80. package/3D/gizmos/gizmoHandle.js +1 -1
  81. package/3D/gizmos/gizmoHandle.js.map +1 -1
  82. package/3D/materials/fluent/fluentMaterial.pure.d.ts +4 -4
  83. package/3D/materials/fluent/fluentMaterial.pure.js +322 -270
  84. package/3D/materials/fluent/fluentMaterial.pure.js.map +1 -1
  85. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js +510 -451
  86. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js.map +1 -1
  87. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js +612 -526
  88. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js.map +1 -1
  89. package/3D/materials/fluentMaterial.d.ts +1 -1
  90. package/3D/materials/fluentMaterial.js +1 -1
  91. package/3D/materials/fluentMaterial.js.map +1 -1
  92. package/3D/materials/handle/handleMaterial.pure.js +3 -1
  93. package/3D/materials/handle/handleMaterial.pure.js.map +1 -1
  94. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js +313 -271
  95. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js.map +1 -1
  96. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js +462 -402
  97. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js.map +1 -1
  98. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js +583 -498
  99. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js.map +1 -1
  100. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js +226 -200
  101. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js.map +1 -1
  102. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js +961 -822
  103. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js.map +1 -1
  104. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js +961 -822
  105. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js.map +1 -1
  106. 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":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAG7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,oCAAoC;IACvB,IAAI;;sBAAS,OAAO;;;;;;;;sBAApB,IAAK,SAAQ,WAAO;YAc7B,oCAAoC;YAEpC,IAAW,IAAI;gBACX,OAAO,IAAI,CAAC,KAAK,CAAC;YACtB,CAAC;YAED,IAAW,IAAI,CAAC,KAAoB;gBAChC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;oBACvB,OAAO;gBACX,CAAC;gBAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC;YAED,2DAA2D;YAC3D,IAAW,gBAAgB;gBACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;YAClC,CAAC;YAED,IAAW,gBAAgB,CAAC,KAAc;gBACtC,6EAA6E;gBAC7E,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,IAAI,CAAC,KAAK,YAAY,EAAI,IAAI,KAAK,CAAC,iBAAiB,KAAM,IAAgB,CAAC,EAAE,CAAC;oBAC/G,OAAO;gBACX,CAAC;gBAED,IAAI,IAAI,CAAC,8BAA8B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAChE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;oBACrF,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC;gBAC/C,CAAC;gBAED,IAAI,KAAK,EAAE,CAAC;oBACR,IAAI,CAAC,8BAA8B,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;gBACjG,CAAC;gBAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC;YAED,+CAA+C;YAE/C,IAAW,EAAE;gBACT,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,IAAW,EAAE,CAAC,KAAsB;gBAChC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;oBAC1C,OAAO;gBACX,CAAC;gBAED,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC;YACL,CAAC;YAED,+CAA+C;YAE/C,IAAW,EAAE;gBACT,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,IAAW,EAAE,CAAC,KAAsB;gBAChC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;oBAC1C,OAAO;gBACX,CAAC;gBAED,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC;YACL,CAAC;YAED,6CAA6C;YAE7C,IAAW,EAAE;gBACT,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,IAAW,EAAE,CAAC,KAAsB;gBAChC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;oBAC1C,OAAO;gBACX,CAAC;gBAED,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC;YACL,CAAC;YAED,6CAA6C;YAE7C,IAAW,EAAE;gBACT,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,IAAW,EAAE,CAAC,KAAsB;gBAChC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;oBAC1C,OAAO;gBACX,CAAC;gBAED,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC;YACL,CAAC;YAED,8BAA8B;YAE9B,IAAW,SAAS;gBAChB,OAAO,IAAI,CAAC,UAAU,CAAC;YAC3B,CAAC;YAED,IAAW,SAAS,CAAC,KAAa;gBAC9B,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;oBAC5B,OAAO;gBACX,CAAC;gBAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC;YAED,wCAAwC;YACxC,IAAoB,mBAAmB,CAAC,KAAa;gBACjD,OAAO;YACX,CAAC;YAED,sCAAsC;YACtC,IAAoB,iBAAiB,CAAC,KAAa;gBAC/C,OAAO;YACX,CAAC;YAED,gBAAgB;YAChB,IAAW,YAAY;gBACnB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzG,CAAC;YAED,gBAAgB;YAChB,IAAW,YAAY;gBACnB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzG,CAAC;YAED;;;eAGG;YACH,YAA4B,IAAa;gBACrC,KAAK,CAAC,IAAI,CAAC,CAAC;gBADY,SAAI,IA5JvB,mDAAI,EA4Je,IAAI,EAAS;gBA3JjC,eAAU,GAAG,CAAC,CAAC;gBACvB,gBAAgB;gBACT,QAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;gBACjC,gBAAgB;gBACT,QAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;gBACjC,gBAAgB;gBACT,QAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;gBACjC,gBAAgB;gBACT,QAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzB,UAAK,GAAG,IAAI,KAAK,EAAU,CAAC;gBAqJhC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAE3B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC9B,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,yBAAyB,CAAC;gBAC9D,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,sBAAsB,CAAC;YAC7D,CAAC;YAEkB,YAAY;gBAC3B,OAAO,MAAM,CAAC;YAClB,CAAC;YAEe,KAAK,CAAC,OAAgC;gBAClD,OAAO,CAAC,IAAI,EAAE,CAAC;gBAEf,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC9D,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;oBACvC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;oBACrC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;oBACnE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBACvE,CAAC;gBAED,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC3B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC9C,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;gBACpC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEhC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAE9I,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;gBACtH,OAAO,CAAC,MAAM,EAAE,CAAC;gBAEjB,OAAO,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;YAEe,QAAQ;gBACpB,iBAAiB;gBACjB,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC3G,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YAChH,CAAC;YAEe,OAAO,CAAC,aAAsB,EAAE,OAAgC;gBAC5E,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,2HAA2H;oBAC3H,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBAC3D,CAAC;gBACD,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;YAEkB,iBAAiB,CAAC,aAAsB;gBACvD,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBAClI,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpI,CAAC;YAED;;;;;eAKG;YACa,aAAa,CAAC,QAAiB,EAAE,KAAY,EAAE,MAAe,KAAK;gBAC/E,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;oBAC3D,KAAK,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;oBACtF,OAAO;gBACX,CAAC;gBAED,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;gBACvD,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,kBAAkB,EAAE,EAAE,cAAc,CAAC,CAAC;gBAEzH,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;gBAEtD,IAAI,iBAAiB,CAAC,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,OAAO;gBACX,CAAC;gBACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC/B,CAAC;YAED;;;;eAIG;YACa,wBAAwB,CAAC,iBAA0B,EAAE,MAAe,KAAK;gBACrF,MAAM,CAAC,GAAW,iBAAiB,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;gBACtF,MAAM,CAAC,GAAW,iBAAiB,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;gBAEtF,IAAI,GAAG,EAAE,CAAC;oBACN,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC;oBACtC,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC;oBACtC,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBAC1C,CAAC;YACL,CAAC;;;;oCAlPA,SAAS,EAAE;kCAuCX,SAAS,EAAE;kCAgBX,SAAS,EAAE;kCAgBX,SAAS,EAAE;kCAgBX,SAAS,EAAE;yCAgBX,SAAS,EAAE;YAtGZ,iKAAW,IAAI,6DAEd;YAqCD,2JAAW,EAAE,6DAEZ;YAcD,2JAAW,EAAE,6DAEZ;YAcD,2JAAW,EAAE,6DAEZ;YAcD,2JAAW,EAAE,6DAEZ;YAcD,gLAAW,SAAS,6DAEnB;;;;;SAzHQ,IAAI;AAoQjB,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;;;GAGG;AACH,MAAM,UAAU,YAAY;IACxB,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC","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"]}