aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Ava/Input/AvaloniaKeyboardMappingHelper.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Ava/Input/AvaloniaKeyboardMappingHelper.cs')
-rw-r--r--Ryujinx.Ava/Input/AvaloniaKeyboardMappingHelper.cs186
1 files changed, 186 insertions, 0 deletions
diff --git a/Ryujinx.Ava/Input/AvaloniaKeyboardMappingHelper.cs b/Ryujinx.Ava/Input/AvaloniaKeyboardMappingHelper.cs
new file mode 100644
index 00000000..8400ddad
--- /dev/null
+++ b/Ryujinx.Ava/Input/AvaloniaKeyboardMappingHelper.cs
@@ -0,0 +1,186 @@
+using Ryujinx.Input;
+using System;
+using System.Collections.Generic;
+using AvaKey = Avalonia.Input.Key;
+
+namespace Ryujinx.Ava.Input
+{
+ internal static class AvaloniaKeyboardMappingHelper
+ {
+ private static readonly AvaKey[] _keyMapping = new AvaKey[(int)Key.Count]
+ {
+ // NOTE: Invalid
+ AvaKey.None,
+
+ AvaKey.LeftShift,
+ AvaKey.RightShift,
+ AvaKey.LeftCtrl,
+ AvaKey.RightCtrl,
+ AvaKey.LeftAlt,
+ AvaKey.RightAlt,
+ AvaKey.LWin,
+ AvaKey.RWin,
+ AvaKey.Apps,
+ AvaKey.F1,
+ AvaKey.F2,
+ AvaKey.F3,
+ AvaKey.F4,
+ AvaKey.F5,
+ AvaKey.F6,
+ AvaKey.F7,
+ AvaKey.F8,
+ AvaKey.F9,
+ AvaKey.F10,
+ AvaKey.F11,
+ AvaKey.F12,
+ AvaKey.F13,
+ AvaKey.F14,
+ AvaKey.F15,
+ AvaKey.F16,
+ AvaKey.F17,
+ AvaKey.F18,
+ AvaKey.F19,
+ AvaKey.F20,
+ AvaKey.F21,
+ AvaKey.F22,
+ AvaKey.F23,
+ AvaKey.F24,
+
+ AvaKey.None,
+ AvaKey.None,
+ AvaKey.None,
+ AvaKey.None,
+ AvaKey.None,
+ AvaKey.None,
+ AvaKey.None,
+ AvaKey.None,
+ AvaKey.None,
+ AvaKey.None,
+ AvaKey.None,
+
+ AvaKey.Up,
+ AvaKey.Down,
+ AvaKey.Left,
+ AvaKey.Right,
+ AvaKey.Return,
+ AvaKey.Escape,
+ AvaKey.Space,
+ AvaKey.Tab,
+ AvaKey.Back,
+ AvaKey.Insert,
+ AvaKey.Delete,
+ AvaKey.PageUp,
+ AvaKey.PageDown,
+ AvaKey.Home,
+ AvaKey.End,
+ AvaKey.CapsLock,
+ AvaKey.Scroll,
+ AvaKey.Print,
+ AvaKey.Pause,
+ AvaKey.NumLock,
+ AvaKey.Clear,
+ AvaKey.NumPad0,
+ AvaKey.NumPad1,
+ AvaKey.NumPad2,
+ AvaKey.NumPad3,
+ AvaKey.NumPad4,
+ AvaKey.NumPad5,
+ AvaKey.NumPad6,
+ AvaKey.NumPad7,
+ AvaKey.NumPad8,
+ AvaKey.NumPad9,
+ AvaKey.Divide,
+ AvaKey.Multiply,
+ AvaKey.Subtract,
+ AvaKey.Add,
+ AvaKey.Decimal,
+ AvaKey.Enter,
+ AvaKey.A,
+ AvaKey.B,
+ AvaKey.C,
+ AvaKey.D,
+ AvaKey.E,
+ AvaKey.F,
+ AvaKey.G,
+ AvaKey.H,
+ AvaKey.I,
+ AvaKey.J,
+ AvaKey.K,
+ AvaKey.L,
+ AvaKey.M,
+ AvaKey.N,
+ AvaKey.O,
+ AvaKey.P,
+ AvaKey.Q,
+ AvaKey.R,
+ AvaKey.S,
+ AvaKey.T,
+ AvaKey.U,
+ AvaKey.V,
+ AvaKey.W,
+ AvaKey.X,
+ AvaKey.Y,
+ AvaKey.Z,
+ AvaKey.D0,
+ AvaKey.D1,
+ AvaKey.D2,
+ AvaKey.D3,
+ AvaKey.D4,
+ AvaKey.D5,
+ AvaKey.D6,
+ AvaKey.D7,
+ AvaKey.D8,
+ AvaKey.D9,
+ AvaKey.OemTilde,
+ AvaKey.OemTilde,AvaKey.OemMinus,
+ AvaKey.OemPlus,
+ AvaKey.OemOpenBrackets,
+ AvaKey.OemCloseBrackets,
+ AvaKey.OemSemicolon,
+ AvaKey.OemQuotes,
+ AvaKey.OemComma,
+ AvaKey.OemPeriod,
+ AvaKey.OemQuestion,
+ AvaKey.OemBackslash,
+
+ // NOTE: invalid
+ AvaKey.None
+ };
+
+ private static readonly Dictionary<AvaKey, Key> _avaKeyMapping;
+
+ static AvaloniaKeyboardMappingHelper()
+ {
+ var inputKeys = Enum.GetValues(typeof(Key));
+
+ // NOTE: Avalonia.Input.Key is not contiguous and quite large, so use a dictionary instead of an array.
+ _avaKeyMapping = new Dictionary<AvaKey, Key>();
+
+ foreach (var key in inputKeys)
+ {
+ if (TryGetAvaKey((Key)key, out var index))
+ {
+ _avaKeyMapping[index] = (Key)key;
+ }
+ }
+ }
+
+ public static bool TryGetAvaKey(Key key, out AvaKey avaKey)
+ {
+ avaKey = AvaKey.None;
+
+ bool keyExist = (int)key < _keyMapping.Length;
+ if (keyExist)
+ {
+ avaKey = _keyMapping[(int)key];
+ }
+
+ return keyExist;
+ }
+
+ public static Key ToInputKey(AvaKey key)
+ {
+ return _avaKeyMapping.GetValueOrDefault(key, Key.Unknown);
+ }
+ }
+} \ No newline at end of file