aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Gtk3
diff options
context:
space:
mode:
authorIsaac Marovitz <42140194+IsaacMarovitz@users.noreply.github.com>2024-04-17 22:52:12 +0100
committerGitHub <noreply@github.com>2024-04-17 18:52:12 -0300
commit446f2854a5af18aef7151f95d64e0fe66a3498b8 (patch)
tree2d92deeffc089cdad97ed49d13b0e858ddabd404 /src/Ryujinx.Gtk3
parent8884d1fd732c9ba788f0ab711e6a9f507d934ac8 (diff)
Ava UI: Input Menu Refactor (#5826)
* Refactor * Apply suggestions from code review Co-authored-by: Ac_K <Acoustik666@gmail.com> * Update src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs Co-authored-by: Ac_K <Acoustik666@gmail.com> * Update src/Ryujinx.Input/ButtonValueType.cs Co-authored-by: Ac_K <Acoustik666@gmail.com> * Add empty line * Requested renames * Update src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs Co-authored-by: gdkchan <gab.dark.100@gmail.com> * Make parent models private readonly * Fix ControllerInputView * Make line shorter * Mac keys in locale * Double line break * Fix build * Get rid of _isValid * Fix potential race condition * Rename HasAnyButtonPressed to IsAnyButtonPressed * Use switches * Simplify enumeration --------- Co-authored-by: Ac_K <Acoustik666@gmail.com> Co-authored-by: gdkchan <gab.dark.100@gmail.com> Co-authored-by: TSR Berry <20988865+TSRBerry@users.noreply.github.com>
Diffstat (limited to 'src/Ryujinx.Gtk3')
-rw-r--r--src/Ryujinx.Gtk3/UI/Helper/ButtonHelper.cs158
-rw-r--r--src/Ryujinx.Gtk3/UI/Windows/ControllerWindow.cs6
2 files changed, 162 insertions, 2 deletions
diff --git a/src/Ryujinx.Gtk3/UI/Helper/ButtonHelper.cs b/src/Ryujinx.Gtk3/UI/Helper/ButtonHelper.cs
new file mode 100644
index 00000000..5a8ca96a
--- /dev/null
+++ b/src/Ryujinx.Gtk3/UI/Helper/ButtonHelper.cs
@@ -0,0 +1,158 @@
+using Ryujinx.Common.Configuration.Hid.Controller;
+using Ryujinx.Input;
+using System;
+using System.Collections.Generic;
+using Key = Ryujinx.Common.Configuration.Hid.Key;
+using StickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId;
+
+namespace Ryujinx.UI.Helper
+{
+ public static class ButtonHelper
+ {
+ private static readonly Dictionary<Key, string> _keysMap = new()
+ {
+ { Key.Unknown, "Unknown" },
+ { Key.ShiftLeft, "ShiftLeft" },
+ { Key.ShiftRight, "ShiftRight" },
+ { Key.ControlLeft, "CtrlLeft" },
+ { Key.ControlRight, "CtrlRight" },
+ { Key.AltLeft, OperatingSystem.IsMacOS() ? "OptLeft" : "AltLeft" },
+ { Key.AltRight, OperatingSystem.IsMacOS() ? "OptRight" : "AltRight" },
+ { Key.WinLeft, OperatingSystem.IsMacOS() ? "CmdLeft" : "WinLeft" },
+ { Key.WinRight, OperatingSystem.IsMacOS() ? "CmdRight" : "WinRight" },
+ { Key.Up, "Up" },
+ { Key.Down, "Down" },
+ { Key.Left, "Left" },
+ { Key.Right, "Right" },
+ { Key.Enter, "Enter" },
+ { Key.Escape, "Escape" },
+ { Key.Space, "Space" },
+ { Key.Tab, "Tab" },
+ { Key.BackSpace, "Backspace" },
+ { Key.Insert, "Insert" },
+ { Key.Delete, "Delete" },
+ { Key.PageUp, "PageUp" },
+ { Key.PageDown, "PageDown" },
+ { Key.Home, "Home" },
+ { Key.End, "End" },
+ { Key.CapsLock, "CapsLock" },
+ { Key.ScrollLock, "ScrollLock" },
+ { Key.PrintScreen, "PrintScreen" },
+ { Key.Pause, "Pause" },
+ { Key.NumLock, "NumLock" },
+ { Key.Clear, "Clear" },
+ { Key.Keypad0, "Keypad0" },
+ { Key.Keypad1, "Keypad1" },
+ { Key.Keypad2, "Keypad2" },
+ { Key.Keypad3, "Keypad3" },
+ { Key.Keypad4, "Keypad4" },
+ { Key.Keypad5, "Keypad5" },
+ { Key.Keypad6, "Keypad6" },
+ { Key.Keypad7, "Keypad7" },
+ { Key.Keypad8, "Keypad8" },
+ { Key.Keypad9, "Keypad9" },
+ { Key.KeypadDivide, "KeypadDivide" },
+ { Key.KeypadMultiply, "KeypadMultiply" },
+ { Key.KeypadSubtract, "KeypadSubtract" },
+ { Key.KeypadAdd, "KeypadAdd" },
+ { Key.KeypadDecimal, "KeypadDecimal" },
+ { Key.KeypadEnter, "KeypadEnter" },
+ { Key.Number0, "0" },
+ { Key.Number1, "1" },
+ { Key.Number2, "2" },
+ { Key.Number3, "3" },
+ { Key.Number4, "4" },
+ { Key.Number5, "5" },
+ { Key.Number6, "6" },
+ { Key.Number7, "7" },
+ { Key.Number8, "8" },
+ { Key.Number9, "9" },
+ { Key.Tilde, "~" },
+ { Key.Grave, "`" },
+ { Key.Minus, "-" },
+ { Key.Plus, "+" },
+ { Key.BracketLeft, "[" },
+ { Key.BracketRight, "]" },
+ { Key.Semicolon, ";" },
+ { Key.Quote, "'" },
+ { Key.Comma, "," },
+ { Key.Period, "." },
+ { Key.Slash, "/" },
+ { Key.BackSlash, "\\" },
+ { Key.Unbound, "Unbound" },
+ };
+
+ private static readonly Dictionary<GamepadInputId, string> _gamepadInputIdMap = new()
+ {
+ { GamepadInputId.LeftStick, "LeftStick" },
+ { GamepadInputId.RightStick, "RightStick" },
+ { GamepadInputId.LeftShoulder, "LeftShoulder" },
+ { GamepadInputId.RightShoulder, "RightShoulder" },
+ { GamepadInputId.LeftTrigger, "LeftTrigger" },
+ { GamepadInputId.RightTrigger, "RightTrigger" },
+ { GamepadInputId.DpadUp, "DpadUp" },
+ { GamepadInputId.DpadDown, "DpadDown" },
+ { GamepadInputId.DpadLeft, "DpadLeft" },
+ { GamepadInputId.DpadRight, "DpadRight" },
+ { GamepadInputId.Minus, "Minus" },
+ { GamepadInputId.Plus, "Plus" },
+ { GamepadInputId.Guide, "Guide" },
+ { GamepadInputId.Misc1, "Misc1" },
+ { GamepadInputId.Paddle1, "Paddle1" },
+ { GamepadInputId.Paddle2, "Paddle2" },
+ { GamepadInputId.Paddle3, "Paddle3" },
+ { GamepadInputId.Paddle4, "Paddle4" },
+ { GamepadInputId.Touchpad, "Touchpad" },
+ { GamepadInputId.SingleLeftTrigger0, "SingleLeftTrigger0" },
+ { GamepadInputId.SingleRightTrigger0, "SingleRightTrigger0" },
+ { GamepadInputId.SingleLeftTrigger1, "SingleLeftTrigger1" },
+ { GamepadInputId.SingleRightTrigger1, "SingleRightTrigger1" },
+ { GamepadInputId.Unbound, "Unbound" },
+ };
+
+ private static readonly Dictionary<StickInputId, string> _stickInputIdMap = new()
+ {
+ { StickInputId.Left, "StickLeft" },
+ { StickInputId.Right, "StickRight" },
+ { StickInputId.Unbound, "Unbound" },
+ };
+
+ public static string ToString(Button button)
+ {
+ string keyString = "";
+
+ switch (button.Type)
+ {
+ case ButtonType.Key:
+ var key = button.AsHidType<Key>();
+
+ if (!_keysMap.TryGetValue(button.AsHidType<Key>(), out keyString))
+ {
+ keyString = key.ToString();
+ }
+
+ break;
+ case ButtonType.GamepadButtonInputId:
+ var gamepadButton = button.AsHidType<GamepadInputId>();
+
+ if (!_gamepadInputIdMap.TryGetValue(button.AsHidType<GamepadInputId>(), out keyString))
+ {
+ keyString = gamepadButton.ToString();
+ }
+
+ break;
+ case ButtonType.StickId:
+ var stickInput = button.AsHidType<StickInputId>();
+
+ if (!_stickInputIdMap.TryGetValue(button.AsHidType<StickInputId>(), out keyString))
+ {
+ keyString = stickInput.ToString();
+ }
+
+ break;
+ }
+
+ return keyString;
+ }
+ }
+}
diff --git a/src/Ryujinx.Gtk3/UI/Windows/ControllerWindow.cs b/src/Ryujinx.Gtk3/UI/Windows/ControllerWindow.cs
index 6712657f..d0b8266f 100644
--- a/src/Ryujinx.Gtk3/UI/Windows/ControllerWindow.cs
+++ b/src/Ryujinx.Gtk3/UI/Windows/ControllerWindow.cs
@@ -10,6 +10,7 @@ using Ryujinx.Input;
using Ryujinx.Input.Assigner;
using Ryujinx.Input.GTK3;
using Ryujinx.UI.Common.Configuration;
+using Ryujinx.UI.Helper;
using Ryujinx.UI.Widgets;
using System;
using System.Collections.Generic;
@@ -17,6 +18,7 @@ using System.IO;
using System.Reflection;
using System.Text.Json;
using System.Threading;
+using Button = Ryujinx.Input.Button;
using ConfigGamepadInputId = Ryujinx.Common.Configuration.Hid.Controller.GamepadInputId;
using ConfigStickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId;
using GUI = Gtk.Builder.ObjectAttribute;
@@ -887,13 +889,13 @@ namespace Ryujinx.UI.Windows
Thread.Sleep(10);
assigner.ReadInput();
- if (_mousePressed || keyboard.IsPressed(Ryujinx.Input.Key.Escape) || assigner.HasAnyButtonPressed() || assigner.ShouldCancel())
+ if (_mousePressed || keyboard.IsPressed(Ryujinx.Input.Key.Escape) || assigner.IsAnyButtonPressed() || assigner.ShouldCancel())
{
break;
}
}
- string pressedButton = assigner.GetPressedButton();
+ string pressedButton = ButtonHelper.ToString(assigner.GetPressedButton() ?? new Button(Input.Key.Unknown));
Application.Invoke(delegate
{