aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Input/IKeyboard.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Input/IKeyboard.cs')
-rw-r--r--src/Ryujinx.Input/IKeyboard.cs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/Ryujinx.Input/IKeyboard.cs b/src/Ryujinx.Input/IKeyboard.cs
new file mode 100644
index 00000000..506ec099
--- /dev/null
+++ b/src/Ryujinx.Input/IKeyboard.cs
@@ -0,0 +1,41 @@
+using System.Runtime.CompilerServices;
+
+namespace Ryujinx.Input
+{
+ /// <summary>
+ /// Represent an emulated keyboard.
+ /// </summary>
+ public interface IKeyboard : IGamepad
+ {
+ /// <summary>
+ /// Check if a given key is pressed on the keyboard.
+ /// </summary>
+ /// <param name="key">The key</param>
+ /// <returns>True if the given key is pressed on the keyboard</returns>
+ bool IsPressed(Key key);
+
+ /// <summary>
+ /// Get a snaphost of the state of the keyboard.
+ /// </summary>
+ /// <returns>A snaphost of the state of the keyboard.</returns>
+ KeyboardStateSnapshot GetKeyboardStateSnapshot();
+
+ /// <summary>
+ /// Get a snaphost of the state of a keyboard.
+ /// </summary>
+ /// <param name="keyboard">The keyboard to do a snapshot of</param>
+ /// <returns>A snaphost of the state of the keyboard.</returns>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ static KeyboardStateSnapshot GetStateSnapshot(IKeyboard keyboard)
+ {
+ bool[] keysState = new bool[(int)Key.Count];
+
+ for (Key key = 0; key < Key.Count; key++)
+ {
+ keysState[(int)key] = keyboard.IsPressed(key);
+ }
+
+ return new KeyboardStateSnapshot(keysState);
+ }
+ }
+}