1
0
Fork 0
mirror of https://github.com/Ellpeck/MLEM.git synced 2024-11-25 14:08:34 +01:00

Added UiControls.PressElement

This commit is contained in:
Ell 2023-06-20 23:23:38 +02:00
parent f652854c1d
commit 7b9b177453
2 changed files with 22 additions and 13 deletions

View file

@ -40,6 +40,7 @@ Additions
- Added AutoInlineCenter and AutoInlineBottom anchors - Added AutoInlineCenter and AutoInlineBottom anchors
- Added UiAnimation system - Added UiAnimation system
- Added AddCustomStyle and ApplyCustomStyle to UiStyle to allow for easy custom styling of elements - Added AddCustomStyle and ApplyCustomStyle to UiStyle to allow for easy custom styling of elements
- Added UiControls.PressElement
Improvements Improvements
- Increased Element area calculation recursion limit to 64 - Increased Element area calculation recursion limit to 64

View file

@ -170,13 +170,13 @@ namespace MLEM.Ui {
var selectedNow = mousedNow != null && mousedNow.CanBeSelected ? mousedNow : null; var selectedNow = mousedNow != null && mousedNow.CanBeSelected ? mousedNow : null;
this.SelectElement(this.ActiveRoot, selectedNow); this.SelectElement(this.ActiveRoot, selectedNow);
if (mousedNow != null && mousedNow.CanBePressed) { if (mousedNow != null && mousedNow.CanBePressed) {
this.System.InvokeOnElementPressed(mousedNow); this.PressElement(mousedNow);
this.Input.TryConsumePressed(MouseButton.Left); this.Input.TryConsumePressed(MouseButton.Left);
} }
} else if (this.Input.IsPressedAvailable(MouseButton.Right)) { } else if (this.Input.IsPressedAvailable(MouseButton.Right)) {
this.IsAutoNavMode = false; this.IsAutoNavMode = false;
if (mousedNow != null && mousedNow.CanBePressed) { if (mousedNow != null && mousedNow.CanBePressed) {
this.System.InvokeOnElementSecondaryPressed(mousedNow); this.PressElement(mousedNow, true);
this.Input.TryConsumePressed(MouseButton.Right); this.Input.TryConsumePressed(MouseButton.Right);
} }
} }
@ -187,13 +187,8 @@ namespace MLEM.Ui {
if (this.HandleKeyboard) { if (this.HandleKeyboard) {
if (this.KeyboardButtons.IsPressedAvailable(this.Input, this.GamepadIndex)) { if (this.KeyboardButtons.IsPressedAvailable(this.Input, this.GamepadIndex)) {
if (this.SelectedElement?.Root != null && this.SelectedElement.CanBePressed) { if (this.SelectedElement?.Root != null && this.SelectedElement.CanBePressed) {
if (this.Input.IsModifierKeyDown(ModifierKey.Shift)) { // primary or secondary action on element using space or enter
// secondary action on element using space or enter this.PressElement(this.SelectedElement, this.Input.IsModifierKeyDown(ModifierKey.Shift));
this.System.InvokeOnElementSecondaryPressed(this.SelectedElement);
} else {
// first action on element using space or enter
this.System.InvokeOnElementPressed(this.SelectedElement);
}
this.KeyboardButtons.TryConsumePressed(this.Input, this.GamepadIndex); this.KeyboardButtons.TryConsumePressed(this.Input, this.GamepadIndex);
} }
} else if (this.Input.IsPressedAvailable(Keys.Tab)) { } else if (this.Input.IsPressedAvailable(Keys.Tab)) {
@ -216,13 +211,13 @@ namespace MLEM.Ui {
var tapped = this.GetElementUnderPos(tap.Position); var tapped = this.GetElementUnderPos(tap.Position);
this.SelectElement(this.ActiveRoot, tapped); this.SelectElement(this.ActiveRoot, tapped);
if (tapped != null && tapped.CanBePressed) if (tapped != null && tapped.CanBePressed)
this.System.InvokeOnElementPressed(tapped); this.PressElement(tapped);
} else if (this.Input.GetViewportGesture(GestureType.Hold, out var hold)) { } else if (this.Input.GetViewportGesture(GestureType.Hold, out var hold)) {
this.IsAutoNavMode = false; this.IsAutoNavMode = false;
var held = this.GetElementUnderPos(hold.Position); var held = this.GetElementUnderPos(hold.Position);
this.SelectElement(this.ActiveRoot, held); this.SelectElement(this.ActiveRoot, held);
if (held != null && held.CanBePressed) if (held != null && held.CanBePressed)
this.System.InvokeOnElementSecondaryPressed(held); this.PressElement(held, true);
} else if (this.Input.ViewportTouchState.Count <= 0) { } else if (this.Input.ViewportTouchState.Count <= 0) {
this.SetTouchedElement(null); this.SetTouchedElement(null);
} else { } else {
@ -244,12 +239,12 @@ namespace MLEM.Ui {
if (this.HandleGamepad) { if (this.HandleGamepad) {
if (this.GamepadButtons.IsPressedAvailable(this.Input, this.GamepadIndex)) { if (this.GamepadButtons.IsPressedAvailable(this.Input, this.GamepadIndex)) {
if (this.SelectedElement?.Root != null && this.SelectedElement.CanBePressed) { if (this.SelectedElement?.Root != null && this.SelectedElement.CanBePressed) {
this.System.InvokeOnElementPressed(this.SelectedElement); this.PressElement(this.SelectedElement);
this.GamepadButtons.TryConsumePressed(this.Input, this.GamepadIndex); this.GamepadButtons.TryConsumePressed(this.Input, this.GamepadIndex);
} }
} else if (this.SecondaryGamepadButtons.IsPressedAvailable(this.Input, this.GamepadIndex)) { } else if (this.SecondaryGamepadButtons.IsPressedAvailable(this.Input, this.GamepadIndex)) {
if (this.SelectedElement?.Root != null && this.SelectedElement.CanBePressed) { if (this.SelectedElement?.Root != null && this.SelectedElement.CanBePressed) {
this.System.InvokeOnElementSecondaryPressed(this.SelectedElement); this.PressElement(this.SelectedElement, true);
this.SecondaryGamepadButtons.TryConsumePressed(this.Input, this.GamepadIndex); this.SecondaryGamepadButtons.TryConsumePressed(this.Input, this.GamepadIndex);
} }
} else if (this.DownButtons.IsPressedAvailable(this.Input, this.GamepadIndex)) { } else if (this.DownButtons.IsPressedAvailable(this.Input, this.GamepadIndex)) {
@ -362,6 +357,19 @@ namespace MLEM.Ui {
return element; return element;
} }
/// <summary>
/// Causes the passed element to be pressed, invoking its <see cref="Element.OnPressed"/> or <see cref="Element.OnSecondaryPressed"/> through <see cref="UiSystem.OnElementPressed"/> or <see cref="UiSystem.OnElementSecondaryPressed"/>.
/// </summary>
/// <param name="element">The element to press.</param>
/// <param name="secondary">Whether the secondary action should be invoked, rather than the primary one.</param>
public void PressElement(Element element, bool secondary = false) {
if (secondary) {
this.System.InvokeOnElementSecondaryPressed(element);
} else {
this.System.InvokeOnElementPressed(element);
}
}
/// <summary> /// <summary>
/// Returns the next element to select when pressing the <see cref="Keys.Tab"/> key during keyboard navigation. /// Returns the next element to select when pressing the <see cref="Keys.Tab"/> key during keyboard navigation.
/// If the <c>backward</c> boolean is true, the previous element should be returned instead. /// If the <c>backward</c> boolean is true, the previous element should be returned instead.