summaryrefslogtreecommitdiff
path: root/src/Noddybox.Emulation.Xna.Input/Keyboard
diff options
context:
space:
mode:
Diffstat (limited to 'src/Noddybox.Emulation.Xna.Input/Keyboard')
-rw-r--r--src/Noddybox.Emulation.Xna.Input/Keyboard/KeyboardDriver.cs26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/Noddybox.Emulation.Xna.Input/Keyboard/KeyboardDriver.cs b/src/Noddybox.Emulation.Xna.Input/Keyboard/KeyboardDriver.cs
index 4fa265a..6379dd8 100644
--- a/src/Noddybox.Emulation.Xna.Input/Keyboard/KeyboardDriver.cs
+++ b/src/Noddybox.Emulation.Xna.Input/Keyboard/KeyboardDriver.cs
@@ -153,18 +153,40 @@ namespace Noddybox.Emulation.Xna.Input.Keyboard
#region Public members
/// <summary>
- /// Stops consuming inputs.
+ /// Stops consuming inputs and releases all keys.
/// </summary>
- public void StopKeyboardUpdates()
+ /// <param name="generateEvents">Generates events for cleared keys.</param>
+ public void StopKeyboardUpdates(bool generateEvents)
{
if (subscribed)
{
manager.TouchEvent -= TouchScreenHandler;
subscribed = false;
+
+ foreach (KeyState key in keymapState)
+ {
+ if (key.IsPressed)
+ {
+ key.IsPressed = false;
+
+ if (generateEvents && KeyEvent != null)
+ {
+ KeyEvent(this, new KeyPressEventArgs() {Key = key.Symbol, Pressed = key.IsPressed});
+ }
+ }
+ }
}
}
/// <summary>
+ /// Stops consuming inputs and releases all keys. Generates events for released keys.
+ /// </summary>
+ public void StopKeyboardUpdates()
+ {
+ StopKeyboardUpdates(true);
+ }
+
+ /// <summary>
/// Starts consuming inputs.
/// </summary>
public void StartKeyboardUpdates()