|
|
@@ -33,7 +33,7 @@ namespace Ryujinx.Ava.UI.Views.Input
|
|
|
{
|
|
|
base.OnPointerReleased(e);
|
|
|
|
|
|
- if (_currentAssigner != null && _currentAssigner.ToggledButton != null && !_currentAssigner.ToggledButton.IsPointerOver)
|
|
|
+ if (_currentAssigner is { ToggledButton.IsPointerOver: false })
|
|
|
{
|
|
|
_currentAssigner.Cancel();
|
|
|
}
|
|
|
@@ -41,143 +41,146 @@ namespace Ryujinx.Ava.UI.Views.Input
|
|
|
|
|
|
private void Button_IsCheckedChanged(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
- if (sender is ToggleButton button)
|
|
|
+ if (sender is not ToggleButton button)
|
|
|
+ return;
|
|
|
+
|
|
|
+ if (button.IsChecked is true)
|
|
|
{
|
|
|
- if ((bool)button.IsChecked)
|
|
|
+ if (_currentAssigner != null && button == _currentAssigner.ToggledButton)
|
|
|
{
|
|
|
- if (_currentAssigner != null && button == _currentAssigner.ToggledButton)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- if (_currentAssigner == null)
|
|
|
- {
|
|
|
- _currentAssigner = new ButtonKeyAssigner(button);
|
|
|
+ if (_currentAssigner == null)
|
|
|
+ {
|
|
|
+ _currentAssigner = new ButtonKeyAssigner(button);
|
|
|
|
|
|
- Focus(NavigationMethod.Pointer);
|
|
|
+ Focus(NavigationMethod.Pointer);
|
|
|
|
|
|
- PointerPressed += MouseClick;
|
|
|
+ PointerPressed += MouseClick;
|
|
|
|
|
|
- var viewModel = (DataContext as KeyboardInputViewModel);
|
|
|
+ if (DataContext is not KeyboardInputViewModel viewModel)
|
|
|
+ return;
|
|
|
|
|
|
- IKeyboard keyboard = (IKeyboard)viewModel.ParentModel.AvaloniaKeyboardDriver.GetGamepad("0"); // Open Avalonia keyboard for cancel operations.
|
|
|
- IButtonAssigner assigner = CreateButtonAssigner();
|
|
|
+ IKeyboard keyboard =
|
|
|
+ (IKeyboard)viewModel.ParentModel.AvaloniaKeyboardDriver.GetGamepad("0"); // Open Avalonia keyboard for cancel operations.
|
|
|
+ IButtonAssigner assigner =
|
|
|
+ new KeyboardKeyAssigner((IKeyboard)viewModel.ParentModel.SelectedGamepad);
|
|
|
|
|
|
- _currentAssigner.ButtonAssigned += (sender, e) =>
|
|
|
+ _currentAssigner.ButtonAssigned += (_, e) =>
|
|
|
+ {
|
|
|
+ if (e.ButtonValue.HasValue)
|
|
|
{
|
|
|
- if (e.ButtonValue.HasValue)
|
|
|
+ var buttonValue = e.ButtonValue.Value;
|
|
|
+ viewModel.ParentModel.IsModified = true;
|
|
|
+
|
|
|
+ switch (button.Name)
|
|
|
{
|
|
|
- var buttonValue = e.ButtonValue.Value;
|
|
|
- viewModel.ParentModel.IsModified = true;
|
|
|
-
|
|
|
- switch (button.Name)
|
|
|
- {
|
|
|
- case "ButtonZl":
|
|
|
- viewModel.Config.ButtonZl = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "ButtonL":
|
|
|
- viewModel.Config.ButtonL = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "ButtonMinus":
|
|
|
- viewModel.Config.ButtonMinus = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "LeftStickButton":
|
|
|
- viewModel.Config.LeftStickButton = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "LeftStickUp":
|
|
|
- viewModel.Config.LeftStickUp = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "LeftStickDown":
|
|
|
- viewModel.Config.LeftStickDown = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "LeftStickRight":
|
|
|
- viewModel.Config.LeftStickRight = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "LeftStickLeft":
|
|
|
- viewModel.Config.LeftStickLeft = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "DpadUp":
|
|
|
- viewModel.Config.DpadUp = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "DpadDown":
|
|
|
- viewModel.Config.DpadDown = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "DpadLeft":
|
|
|
- viewModel.Config.DpadLeft = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "DpadRight":
|
|
|
- viewModel.Config.DpadRight = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "LeftButtonSr":
|
|
|
- viewModel.Config.LeftButtonSr = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "LeftButtonSl":
|
|
|
- viewModel.Config.LeftButtonSl = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "RightButtonSr":
|
|
|
- viewModel.Config.RightButtonSr = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "RightButtonSl":
|
|
|
- viewModel.Config.RightButtonSl = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "ButtonZr":
|
|
|
- viewModel.Config.ButtonZr = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "ButtonR":
|
|
|
- viewModel.Config.ButtonR = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "ButtonPlus":
|
|
|
- viewModel.Config.ButtonPlus = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "ButtonA":
|
|
|
- viewModel.Config.ButtonA = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "ButtonB":
|
|
|
- viewModel.Config.ButtonB = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "ButtonX":
|
|
|
- viewModel.Config.ButtonX = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "ButtonY":
|
|
|
- viewModel.Config.ButtonY = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "RightStickButton":
|
|
|
- viewModel.Config.RightStickButton = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "RightStickUp":
|
|
|
- viewModel.Config.RightStickUp = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "RightStickDown":
|
|
|
- viewModel.Config.RightStickDown = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "RightStickRight":
|
|
|
- viewModel.Config.RightStickRight = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- case "RightStickLeft":
|
|
|
- viewModel.Config.RightStickLeft = buttonValue.AsHidType<Key>();
|
|
|
- break;
|
|
|
- }
|
|
|
+ case "ButtonZl":
|
|
|
+ viewModel.Config.ButtonZl = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "ButtonL":
|
|
|
+ viewModel.Config.ButtonL = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "ButtonMinus":
|
|
|
+ viewModel.Config.ButtonMinus = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "LeftStickButton":
|
|
|
+ viewModel.Config.LeftStickButton = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "LeftStickUp":
|
|
|
+ viewModel.Config.LeftStickUp = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "LeftStickDown":
|
|
|
+ viewModel.Config.LeftStickDown = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "LeftStickRight":
|
|
|
+ viewModel.Config.LeftStickRight = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "LeftStickLeft":
|
|
|
+ viewModel.Config.LeftStickLeft = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "DpadUp":
|
|
|
+ viewModel.Config.DpadUp = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "DpadDown":
|
|
|
+ viewModel.Config.DpadDown = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "DpadLeft":
|
|
|
+ viewModel.Config.DpadLeft = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "DpadRight":
|
|
|
+ viewModel.Config.DpadRight = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "LeftButtonSr":
|
|
|
+ viewModel.Config.LeftButtonSr = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "LeftButtonSl":
|
|
|
+ viewModel.Config.LeftButtonSl = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "RightButtonSr":
|
|
|
+ viewModel.Config.RightButtonSr = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "RightButtonSl":
|
|
|
+ viewModel.Config.RightButtonSl = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "ButtonZr":
|
|
|
+ viewModel.Config.ButtonZr = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "ButtonR":
|
|
|
+ viewModel.Config.ButtonR = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "ButtonPlus":
|
|
|
+ viewModel.Config.ButtonPlus = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "ButtonA":
|
|
|
+ viewModel.Config.ButtonA = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "ButtonB":
|
|
|
+ viewModel.Config.ButtonB = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "ButtonX":
|
|
|
+ viewModel.Config.ButtonX = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "ButtonY":
|
|
|
+ viewModel.Config.ButtonY = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "RightStickButton":
|
|
|
+ viewModel.Config.RightStickButton = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "RightStickUp":
|
|
|
+ viewModel.Config.RightStickUp = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "RightStickDown":
|
|
|
+ viewModel.Config.RightStickDown = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "RightStickRight":
|
|
|
+ viewModel.Config.RightStickRight = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
+ case "RightStickLeft":
|
|
|
+ viewModel.Config.RightStickLeft = buttonValue.AsHidType<Key>();
|
|
|
+ break;
|
|
|
}
|
|
|
- };
|
|
|
-
|
|
|
- _currentAssigner.GetInputAndAssign(assigner, keyboard);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if (_currentAssigner != null)
|
|
|
- {
|
|
|
- _currentAssigner.Cancel();
|
|
|
- _currentAssigner = null;
|
|
|
- button.IsChecked = false;
|
|
|
}
|
|
|
- }
|
|
|
+ };
|
|
|
+
|
|
|
+ _currentAssigner.GetInputAndAssign(assigner, keyboard);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- _currentAssigner?.Cancel();
|
|
|
- _currentAssigner = null;
|
|
|
+ if (_currentAssigner != null)
|
|
|
+ {
|
|
|
+ _currentAssigner.Cancel();
|
|
|
+ _currentAssigner = null;
|
|
|
+ button.IsChecked = false;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _currentAssigner?.Cancel();
|
|
|
+ _currentAssigner = null;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void MouseClick(object sender, PointerPressedEventArgs e)
|
|
|
@@ -189,15 +192,6 @@ namespace Ryujinx.Ava.UI.Views.Input
|
|
|
PointerPressed -= MouseClick;
|
|
|
}
|
|
|
|
|
|
- private IButtonAssigner CreateButtonAssigner()
|
|
|
- {
|
|
|
- IButtonAssigner assigner;
|
|
|
-
|
|
|
- assigner = new KeyboardKeyAssigner((IKeyboard)(DataContext as KeyboardInputViewModel).ParentModel.SelectedGamepad);
|
|
|
-
|
|
|
- return assigner;
|
|
|
- }
|
|
|
-
|
|
|
protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)
|
|
|
{
|
|
|
base.OnDetachedFromVisualTree(e);
|