aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx/Input/GTK3/GTK3MappingHelper.cs
diff options
context:
space:
mode:
authorCaian Benedicto <caianbene@gmail.com>2021-10-12 16:54:21 -0300
committerGitHub <noreply@github.com>2021-10-12 21:54:21 +0200
commit380b95bc59e7dc419f89df951cdc086e792cb0ff (patch)
tree59a636b48db991d8e13132d7d3f41464d9b04b24 /Ryujinx/Input/GTK3/GTK3MappingHelper.cs
parent69093cf2d69490862aff974f170cee63a0016fd0 (diff)
Inline software keyboard without input pop up dialog (#2180)
* Initial implementation * Refactor dynamic text input keys out to facilitate configuration via UI * Fix code styling * Add per applet indirect layer handles * Remove static functions from SoftwareKeyboardRenderer * Remove inline keyboard reset delay * Remove inline keyboard V2 responses * Add inline keyboard soft-lock recovering * Add comments * Forward accept and cancel key names to the keyboard and add soft-lock prevention line * Add dummy window to handle paste events * Rework inline keyboard state machine and graphics * Implement IHostUiHandler interfaces on headless WindowBase class * Add inline keyboard assets * Fix coding style * Fix coding style * Change mode cycling shortcut to F6 * Fix invalid calc size error in games using extended calc * Remove unnecessary namespaces
Diffstat (limited to 'Ryujinx/Input/GTK3/GTK3MappingHelper.cs')
-rw-r--r--Ryujinx/Input/GTK3/GTK3MappingHelper.cs32
1 files changed, 31 insertions, 1 deletions
diff --git a/Ryujinx/Input/GTK3/GTK3MappingHelper.cs b/Ryujinx/Input/GTK3/GTK3MappingHelper.cs
index 8bab0dc0..49ea0d15 100644
--- a/Ryujinx/Input/GTK3/GTK3MappingHelper.cs
+++ b/Ryujinx/Input/GTK3/GTK3MappingHelper.cs
@@ -1,4 +1,6 @@
-using System.Runtime.CompilerServices;
+using System;
+using System.Collections.Generic;
+using System.Runtime.CompilerServices;
using GtkKey = Gdk.Key;
namespace Ryujinx.Input.GTK3
@@ -144,11 +146,39 @@ namespace Ryujinx.Input.GTK3
GtkKey.blank,
};
+ private static readonly Dictionary<GtkKey, Key> _gtkKeyMapping;
+
+ static GTK3MappingHelper()
+ {
+ var inputKeys = Enum.GetValues(typeof(Key));
+
+ // GtkKey is not contiguous and quite large, so use a dictionary instead of an array.
+ _gtkKeyMapping = new Dictionary<GtkKey, Key>();
+
+ foreach (var key in inputKeys)
+ {
+ try
+ {
+ var index = ToGtkKey((Key)key);
+ _gtkKeyMapping[index] = (Key)key;
+ }
+ catch
+ {
+ // Skip invalid mappings.
+ }
+ }
+ }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static GtkKey ToGtkKey(Key key)
{
return _keyMapping[(int)key];
}
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static Key ToInputKey(GtkKey key)
+ {
+ return _gtkKeyMapping.GetValueOrDefault(key, Key.Unknown);
+ }
}
}