aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs')
-rw-r--r--src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs117
1 files changed, 90 insertions, 27 deletions
diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs
index b006d703..fb0fe2bb 100644
--- a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs
+++ b/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs
@@ -2,10 +2,13 @@ using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Input;
using Avalonia.Interactivity;
+using Avalonia.LogicalTree;
using Ryujinx.Ava.Input;
using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.Input;
using Ryujinx.Input.Assigner;
+using Key = Ryujinx.Common.Configuration.Hid.Key;
namespace Ryujinx.Ava.UI.Views.Settings
{
@@ -17,9 +20,28 @@ namespace Ryujinx.Ava.UI.Views.Settings
public SettingsHotkeysView()
{
InitializeComponent();
+
+ foreach (ILogical visual in SettingButtons.GetLogicalDescendants())
+ {
+ if (visual is ToggleButton button and not CheckBox)
+ {
+ button.IsCheckedChanged += Button_IsCheckedChanged;
+ }
+ }
+
_avaloniaKeyboardDriver = new AvaloniaKeyboardDriver(this);
}
+ protected override void OnPointerReleased(PointerReleasedEventArgs e)
+ {
+ base.OnPointerReleased(e);
+
+ if (!_currentAssigner?.ToggledButton?.IsPointerOver ?? false)
+ {
+ _currentAssigner.Cancel();
+ }
+ }
+
private void MouseClick(object sender, PointerPressedEventArgs e)
{
bool shouldUnbind = e.GetCurrentPoint(this).Properties.IsMiddleButtonPressed;
@@ -29,53 +51,94 @@ namespace Ryujinx.Ava.UI.Views.Settings
PointerPressed -= MouseClick;
}
- private void Button_Checked(object sender, RoutedEventArgs e)
+ private void Button_IsCheckedChanged(object sender, RoutedEventArgs e)
{
if (sender is ToggleButton button)
{
- if (_currentAssigner != null && button == _currentAssigner.ToggledButton)
+ if ((bool)button.IsChecked)
{
- return;
- }
+ if (_currentAssigner != null && button == _currentAssigner.ToggledButton)
+ {
+ return;
+ }
- if (_currentAssigner == null && button.IsChecked != null && (bool)button.IsChecked)
- {
- _currentAssigner = new ButtonKeyAssigner(button);
+ if (_currentAssigner == null)
+ {
+ _currentAssigner = new ButtonKeyAssigner(button);
- this.Focus(NavigationMethod.Pointer);
+ this.Focus(NavigationMethod.Pointer);
- PointerPressed += MouseClick;
+ PointerPressed += MouseClick;
- var keyboard = (IKeyboard)_avaloniaKeyboardDriver.GetGamepad(_avaloniaKeyboardDriver.GamepadsIds[0]);
- IButtonAssigner assigner = new KeyboardKeyAssigner(keyboard);
+ var keyboard = (IKeyboard)_avaloniaKeyboardDriver.GetGamepad("0");
+ IButtonAssigner assigner = new KeyboardKeyAssigner(keyboard);
- _currentAssigner.GetInputAndAssign(assigner);
- }
- else
- {
- if (_currentAssigner != null)
- {
- ToggleButton oldButton = _currentAssigner.ToggledButton;
+ _currentAssigner.ButtonAssigned += (sender, e) =>
+ {
+ if (e.ButtonValue.HasValue)
+ {
+ var viewModel = (DataContext) as SettingsViewModel;
+ var buttonValue = e.ButtonValue.Value;
- _currentAssigner.Cancel();
- _currentAssigner = null;
+ switch (button.Name)
+ {
+ case "ToggleVsync":
+ viewModel.KeyboardHotkey.ToggleVsync = buttonValue.AsHidType<Key>();
+ break;
+ case "Screenshot":
+ viewModel.KeyboardHotkey.Screenshot = buttonValue.AsHidType<Key>();
+ break;
+ case "ShowUI":
+ viewModel.KeyboardHotkey.ShowUI = buttonValue.AsHidType<Key>();
+ break;
+ case "Pause":
+ viewModel.KeyboardHotkey.Pause = buttonValue.AsHidType<Key>();
+ break;
+ case "ToggleMute":
+ viewModel.KeyboardHotkey.ToggleMute = buttonValue.AsHidType<Key>();
+ break;
+ case "ResScaleUp":
+ viewModel.KeyboardHotkey.ResScaleUp = buttonValue.AsHidType<Key>();
+ break;
+ case "ResScaleDown":
+ viewModel.KeyboardHotkey.ResScaleDown = buttonValue.AsHidType<Key>();
+ break;
+ case "VolumeUp":
+ viewModel.KeyboardHotkey.VolumeUp = buttonValue.AsHidType<Key>();
+ break;
+ case "VolumeDown":
+ viewModel.KeyboardHotkey.VolumeDown = buttonValue.AsHidType<Key>();
+ break;
+ }
+ }
+ };
- button.IsChecked = false;
+ _currentAssigner.GetInputAndAssign(assigner, keyboard);
+ }
+ else
+ {
+ if (_currentAssigner != null)
+ {
+ _currentAssigner.Cancel();
+ _currentAssigner = null;
+ button.IsChecked = false;
+ }
}
}
+ else
+ {
+ _currentAssigner?.Cancel();
+ _currentAssigner = null;
+ }
}
}
- private void Button_Unchecked(object sender, RoutedEventArgs e)
- {
- _currentAssigner?.Cancel();
- _currentAssigner = null;
- }
-
public void Dispose()
{
_currentAssigner?.Cancel();
_currentAssigner = null;
+
+ _avaloniaKeyboardDriver.Dispose();
}
}
}