SettingsHotkeysView.axaml.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Avalonia.Controls;
  2. using Avalonia.Controls.Primitives;
  3. using Avalonia.Input;
  4. using Avalonia.Interactivity;
  5. using Ryujinx.Ava.Input;
  6. using Ryujinx.Ava.UI.Helpers;
  7. using Ryujinx.Input;
  8. using Ryujinx.Input.Assigner;
  9. namespace Ryujinx.Ava.UI.Views.Settings
  10. {
  11. public partial class SettingsHotkeysView : UserControl
  12. {
  13. private ButtonKeyAssigner _currentAssigner;
  14. private IGamepadDriver AvaloniaKeyboardDriver;
  15. public SettingsHotkeysView()
  16. {
  17. InitializeComponent();
  18. AvaloniaKeyboardDriver = new AvaloniaKeyboardDriver(this);
  19. }
  20. private void MouseClick(object sender, PointerPressedEventArgs e)
  21. {
  22. bool shouldUnbind = e.GetCurrentPoint(this).Properties.IsMiddleButtonPressed;
  23. _currentAssigner?.Cancel(shouldUnbind);
  24. PointerPressed -= MouseClick;
  25. }
  26. private void Button_Checked(object sender, RoutedEventArgs e)
  27. {
  28. if (sender is ToggleButton button)
  29. {
  30. if (_currentAssigner != null && button == _currentAssigner.ToggledButton)
  31. {
  32. return;
  33. }
  34. if (_currentAssigner == null && button.IsChecked != null && (bool)button.IsChecked)
  35. {
  36. _currentAssigner = new ButtonKeyAssigner(button);
  37. FocusManager.Instance?.Focus(this, NavigationMethod.Pointer);
  38. PointerPressed += MouseClick;
  39. var keyboard = (IKeyboard)AvaloniaKeyboardDriver.GetGamepad(AvaloniaKeyboardDriver.GamepadsIds[0]);
  40. IButtonAssigner assigner = new KeyboardKeyAssigner(keyboard);
  41. _currentAssigner.GetInputAndAssign(assigner);
  42. }
  43. else
  44. {
  45. if (_currentAssigner != null)
  46. {
  47. ToggleButton oldButton = _currentAssigner.ToggledButton;
  48. _currentAssigner.Cancel();
  49. _currentAssigner = null;
  50. button.IsChecked = false;
  51. }
  52. }
  53. }
  54. }
  55. private void Button_Unchecked(object sender, RoutedEventArgs e)
  56. {
  57. _currentAssigner?.Cancel();
  58. _currentAssigner = null;
  59. }
  60. public void Dispose()
  61. {
  62. _currentAssigner?.Cancel();
  63. _currentAssigner = null;
  64. }
  65. }
  66. }