@babylonjs/gui 7.13.0 → 7.13.2
Sign up to get free protection for your applications and to get access to all the features.
- package/2D/advancedDynamicTexture.d.ts +9 -4
- package/2D/advancedDynamicTexture.js +44 -0
- package/2D/advancedDynamicTexture.js.map +1 -1
- package/2D/controls/control.d.ts +53 -1
- package/2D/controls/control.js +88 -0
- package/2D/controls/control.js.map +1 -1
- package/2D/controls/focusableButton.d.ts +0 -37
- package/2D/controls/focusableButton.js +0 -65
- package/2D/controls/focusableButton.js.map +1 -1
- package/2D/controls/focusableControl.d.ts +9 -0
- package/2D/controls/focusableControl.js.map +1 -1
- package/2D/controls/inputText.d.ts +1 -19
- package/2D/controls/inputText.js +2 -27
- package/2D/controls/inputText.js.map +1 -1
- package/2D/controls/virtualKeyboard.js.map +1 -1
- package/package.json +2 -2
@@ -10,7 +10,6 @@ import { Layer } from "@babylonjs/core/Layers/layer.js";
|
|
10
10
|
import type { Scene } from "@babylonjs/core/scene.js";
|
11
11
|
import { Container } from "./controls/container";
|
12
12
|
import { Control } from "./controls/control";
|
13
|
-
import type { IFocusableControl } from "./controls/focusableControl";
|
14
13
|
import { Style } from "./style";
|
15
14
|
import { Viewport } from "@babylonjs/core/Maths/math.viewport.js";
|
16
15
|
/**
|
@@ -121,6 +120,11 @@ export declare class AdvancedDynamicTexture extends DynamicTexture {
|
|
121
120
|
* Gets or sets a boolean indicating that the canvas must be reverted on Y when updating the texture
|
122
121
|
*/
|
123
122
|
applyYInversionOnUpdate: boolean;
|
123
|
+
/**
|
124
|
+
* A boolean indicating whether or not the elements can be navigated to using the tab key.
|
125
|
+
* Defaults to false.
|
126
|
+
*/
|
127
|
+
disableTabNavigation: boolean;
|
124
128
|
/**
|
125
129
|
* Gets or sets a number used to scale rendering size (2 means that the texture will be twice bigger).
|
126
130
|
* Useful when you want more antialiasing
|
@@ -198,8 +202,8 @@ export declare class AdvancedDynamicTexture extends DynamicTexture {
|
|
198
202
|
/**
|
199
203
|
* Gets or sets the current focused control
|
200
204
|
*/
|
201
|
-
get focusedControl(): Nullable<
|
202
|
-
set focusedControl(control: Nullable<
|
205
|
+
get focusedControl(): Nullable<Control>;
|
206
|
+
set focusedControl(control: Nullable<Control>);
|
203
207
|
/**
|
204
208
|
* Gets or sets a boolean indicating if the texture must be rendered in background or foreground when in fullscreen mode
|
205
209
|
*/
|
@@ -344,6 +348,7 @@ export declare class AdvancedDynamicTexture extends DynamicTexture {
|
|
344
348
|
private _translateToPicking;
|
345
349
|
/** Attach to all scene events required to support pointer events */
|
346
350
|
attach(): void;
|
351
|
+
private _focusNextElement;
|
347
352
|
/**
|
348
353
|
* @internal
|
349
354
|
*/
|
@@ -380,7 +385,7 @@ export declare class AdvancedDynamicTexture extends DynamicTexture {
|
|
380
385
|
* Move the focus to a specific control
|
381
386
|
* @param control defines the control which will receive the focus
|
382
387
|
*/
|
383
|
-
moveFocusToControl(control:
|
388
|
+
moveFocusToControl(control: Control): void;
|
384
389
|
private _manageFocus;
|
385
390
|
private _attachPickingToSceneRender;
|
386
391
|
private _attachToOnPointerOut;
|
@@ -316,6 +316,11 @@ export class AdvancedDynamicTexture extends DynamicTexture {
|
|
316
316
|
* Gets or sets a boolean indicating that the canvas must be reverted on Y when updating the texture
|
317
317
|
*/
|
318
318
|
this.applyYInversionOnUpdate = true;
|
319
|
+
/**
|
320
|
+
* A boolean indicating whether or not the elements can be navigated to using the tab key.
|
321
|
+
* Defaults to false.
|
322
|
+
*/
|
323
|
+
this.disableTabNavigation = false;
|
319
324
|
/**
|
320
325
|
* If this is set, even when a control is pointer blocker, some events can still be passed through to the scene.
|
321
326
|
* Options from values are PointerEventTypes
|
@@ -387,6 +392,12 @@ export class AdvancedDynamicTexture extends DynamicTexture {
|
|
387
392
|
}
|
388
393
|
});
|
389
394
|
this._preKeyboardObserver = scene.onPreKeyboardObservable.add((info) => {
|
395
|
+
// check if tab is pressed
|
396
|
+
if (!this.disableTabNavigation && info.type === KeyboardEventTypes.KEYDOWN && info.event.code === "Tab") {
|
397
|
+
this._focusNextElement(!info.event.shiftKey);
|
398
|
+
info.event.preventDefault();
|
399
|
+
return;
|
400
|
+
}
|
390
401
|
if (!this._focusedControl) {
|
391
402
|
return;
|
392
403
|
}
|
@@ -923,6 +934,39 @@ export class AdvancedDynamicTexture extends DynamicTexture {
|
|
923
934
|
this._attachToOnPointerOut(scene);
|
924
935
|
this._attachToOnBlur(scene);
|
925
936
|
}
|
937
|
+
_focusNextElement(forward = true) {
|
938
|
+
// generate the order of tab-able controls
|
939
|
+
const sortedTabbableControls = [];
|
940
|
+
this.executeOnAllControls((control) => {
|
941
|
+
if (control.isFocusInvisible || !control.isVisible || control.tabIndex < 0) {
|
942
|
+
return;
|
943
|
+
}
|
944
|
+
sortedTabbableControls.push(control);
|
945
|
+
});
|
946
|
+
// if no control is tab-able, return
|
947
|
+
if (sortedTabbableControls.length === 0) {
|
948
|
+
return;
|
949
|
+
}
|
950
|
+
sortedTabbableControls.sort((a, b) => {
|
951
|
+
// if tabIndex is 0, put it in the end of the list, otherwise sort by tabIndex
|
952
|
+
return a.tabIndex === 0 ? 1 : b.tabIndex === 0 ? -1 : a.tabIndex - b.tabIndex;
|
953
|
+
});
|
954
|
+
// if no control is focused, focus the first one
|
955
|
+
if (!this._focusedControl) {
|
956
|
+
sortedTabbableControls[0].focus();
|
957
|
+
}
|
958
|
+
else {
|
959
|
+
const currentIndex = sortedTabbableControls.indexOf(this._focusedControl);
|
960
|
+
let nextIndex = currentIndex + (forward ? 1 : -1);
|
961
|
+
if (nextIndex < 0) {
|
962
|
+
nextIndex = sortedTabbableControls.length - 1;
|
963
|
+
}
|
964
|
+
else if (nextIndex >= sortedTabbableControls.length) {
|
965
|
+
nextIndex = 0;
|
966
|
+
}
|
967
|
+
sortedTabbableControls[nextIndex].focus();
|
968
|
+
}
|
969
|
+
}
|
926
970
|
/**
|
927
971
|
* Register the clipboard Events onto the canvas
|
928
972
|
*/
|