diff --git a/src/BizHawk.Client.Common/input/ClientInputFocus.cs b/src/BizHawk.Client.Common/input/ClientInputFocus.cs new file mode 100644 index 0000000000..94578ba98d --- /dev/null +++ b/src/BizHawk.Client.Common/input/ClientInputFocus.cs @@ -0,0 +1,15 @@ +#nullable enable + +using System; + +namespace BizHawk.Client.Common +{ + [Flags] + public enum ClientInputFocus + { + None = 0, + Mouse = 1, + Keyboard = 2, + Pad = 4 + } +} diff --git a/src/BizHawk.Client.Common/input/HostInputAdapter.cs b/src/BizHawk.Client.Common/input/HostInputAdapter.cs new file mode 100644 index 0000000000..dda30a7f44 --- /dev/null +++ b/src/BizHawk.Client.Common/input/HostInputAdapter.cs @@ -0,0 +1,23 @@ +#nullable enable + +using System; +using System.Collections.Generic; + +namespace BizHawk.Client.Common +{ + /// this was easier than trying to make static classes instantiable... + public interface HostInputAdapter + { + void DeInitAll(); + + void FirstInitAll(IntPtr mainFormHandle); + + void ReInitGamepads(IntPtr mainFormHandle); + + void PreprocessHostGamepads(); + + void ProcessHostGamepads(Action handleButton, Action handleAxis); + + IEnumerable ProcessHostKeyboards(); + } +} diff --git a/src/BizHawk.Client.Common/input/KeyEvent.cs b/src/BizHawk.Client.Common/input/KeyEvent.cs new file mode 100644 index 0000000000..84ef594322 --- /dev/null +++ b/src/BizHawk.Client.Common/input/KeyEvent.cs @@ -0,0 +1,13 @@ +#nullable enable + +using OpenTK.Input; + +namespace BizHawk.Client.Common +{ + public struct KeyEvent + { + public Key Key; + + public bool Pressed; + } +} diff --git a/src/BizHawk.Client.EmuHawk/Input/HostInputAdapters.cs b/src/BizHawk.Client.EmuHawk/Input/HostInputAdapters.cs index 1deb46b213..70f41a8e4e 100644 --- a/src/BizHawk.Client.EmuHawk/Input/HostInputAdapters.cs +++ b/src/BizHawk.Client.EmuHawk/Input/HostInputAdapters.cs @@ -4,26 +4,10 @@ using System; using System.Collections.Generic; using System.Linq; -using static BizHawk.Client.EmuHawk.Input; +using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk { - /// this was easier than trying to make static classes instantiable... - public interface HostInputAdapter - { - void DeInitAll(); - - void FirstInitAll(IntPtr mainFormHandle); - - void ReInitGamepads(IntPtr mainFormHandle); - - void PreprocessHostGamepads(); - - void ProcessHostGamepads(Action handleButton, Action handleAxis); - - IEnumerable ProcessHostKeyboards(); - } - internal sealed class DirectInputAdapter : HostInputAdapter { public void DeInitAll() @@ -51,18 +35,18 @@ namespace BizHawk.Client.EmuHawk GamePad360.UpdateAll(); } - public void ProcessHostGamepads(Action handleButton, Action handleAxis) + public void ProcessHostGamepads(Action handleButton, Action handleAxis) { foreach (var pad in GamePad360.EnumerateDevices()) { var inputNamePrefix = $"X{pad.PlayerNumber} "; - for (int b = 0, n = pad.NumButtons; b < n; b++) handleButton(inputNamePrefix + pad.ButtonName(b), pad.Pressed(b), InputFocus.Pad); + for (int b = 0, n = pad.NumButtons; b < n; b++) handleButton(inputNamePrefix + pad.ButtonName(b), pad.Pressed(b), ClientInputFocus.Pad); foreach (var (axisName, f) in pad.GetAxes()) handleAxis(inputNamePrefix + axisName, (int) f); } foreach (var pad in GamePad.EnumerateDevices()) { var inputNamePrefix = $"J{pad.PlayerNumber} "; - for (int b = 0, n = pad.NumButtons; b < n; b++) handleButton(inputNamePrefix + pad.ButtonName(b), pad.Pressed(b), InputFocus.Pad); + for (int b = 0, n = pad.NumButtons; b < n; b++) handleButton(inputNamePrefix + pad.ButtonName(b), pad.Pressed(b), ClientInputFocus.Pad); foreach (var (axisName, f) in pad.GetAxes()) handleAxis(inputNamePrefix + axisName, (int) f); } } @@ -84,11 +68,11 @@ namespace BizHawk.Client.EmuHawk public void PreprocessHostGamepads() => OTK_GamePad.UpdateAll(); - public void ProcessHostGamepads(Action handleButton, Action handleAxis) + public void ProcessHostGamepads(Action handleButton, Action handleAxis) { foreach (var pad in OTK_GamePad.EnumerateDevices()) { - foreach (var but in pad.buttonObjects) handleButton(pad.InputNamePrefix + but.ButtonName, but.ButtonAction(), InputFocus.Pad); + foreach (var but in pad.buttonObjects) handleButton(pad.InputNamePrefix + but.ButtonName, but.ButtonAction(), ClientInputFocus.Pad); foreach (var (axisID, f) in pad.GetAxes()) handleAxis($"{pad.InputNamePrefix}{axisID} Axis", (int) f); } } diff --git a/src/BizHawk.Client.EmuHawk/Input/IPCKeyInput.cs b/src/BizHawk.Client.EmuHawk/Input/IPCKeyInput.cs index b4389ce871..c9c65c3698 100644 --- a/src/BizHawk.Client.EmuHawk/Input/IPCKeyInput.cs +++ b/src/BizHawk.Client.EmuHawk/Input/IPCKeyInput.cs @@ -2,6 +2,9 @@ using System.IO; using System.Threading; using System.IO.Pipes; + +using BizHawk.Client.Common; + using SlimDX.DirectInput; // this is not a very safe or pretty protocol, I'm not proud of it diff --git a/src/BizHawk.Client.EmuHawk/Input/Input.cs b/src/BizHawk.Client.EmuHawk/Input/Input.cs index a3685b1443..392d5d2b65 100644 --- a/src/BizHawk.Client.EmuHawk/Input/Input.cs +++ b/src/BizHawk.Client.EmuHawk/Input/Input.cs @@ -60,15 +60,6 @@ namespace BizHawk.Client.EmuHawk public class Input { - [Flags] - public enum InputFocus - { - None = 0, - Mouse = 1, - Keyboard = 2, - Pad = 4 - } - public enum AllowInput { None = 0, @@ -82,10 +73,10 @@ namespace BizHawk.Client.EmuHawk /// Why is this receiving a control, but actually using it as a Form (where the WantingMouseFocus is checked?) /// Because later we might change it to work off the control, specifically, if a control is supplied (normally actually a Form will be supplied) /// - public void ControlInputFocus(Control c, InputFocus types, bool wants) + public void ControlInputFocus(Control c, ClientInputFocus types, bool wants) { - if (types.HasFlag(InputFocus.Mouse) && wants) _wantingMouseFocus.Add(c); - if (types.HasFlag(InputFocus.Mouse) && !wants) _wantingMouseFocus.Remove(c); + if (types.HasFlag(ClientInputFocus.Mouse) && wants) _wantingMouseFocus.Add(c); + if (types.HasFlag(ClientInputFocus.Mouse) && !wants) _wantingMouseFocus.Remove(c); } private readonly HashSet _wantingMouseFocus = new HashSet(); @@ -191,7 +182,7 @@ namespace BizHawk.Client.EmuHawk { public LogicalButton LogicalButton; public InputEventType EventType; - public InputFocus Source; + public ClientInputFocus Source; public override string ToString() { return $"{EventType}:{LogicalButton}"; @@ -205,7 +196,7 @@ namespace BizHawk.Client.EmuHawk private bool _trackDeltas; private bool _ignoreEventsNextPoll; - private void HandleButton(string button, bool newState, InputFocus source) + private void HandleButton(string button, bool newState, ClientInputFocus source) { ModifierKey currentModifier = ButtonToModifierKey(button); if (EnableIgnoreModifiers && currentModifier != ModifierKey.None) return; @@ -350,7 +341,7 @@ namespace BizHawk.Client.EmuHawk //analyze keys foreach (var ke in keyEvents) - HandleButton(ke.Key.ToString(), ke.Pressed, InputFocus.Keyboard); + HandleButton(ke.Key.ToString(), ke.Pressed, ClientInputFocus.Keyboard); lock (_axisValues) { @@ -373,21 +364,21 @@ namespace BizHawk.Client.EmuHawk _axisValues["WMouse Y"] = mousePos.Y; var mouseBtns = Control.MouseButtons; - HandleButton("WMouse L", (mouseBtns & MouseButtons.Left) != 0, InputFocus.Mouse); - HandleButton("WMouse C", (mouseBtns & MouseButtons.Middle) != 0, InputFocus.Mouse); - HandleButton("WMouse R", (mouseBtns & MouseButtons.Right) != 0, InputFocus.Mouse); - HandleButton("WMouse 1", (mouseBtns & MouseButtons.XButton1) != 0, InputFocus.Mouse); - HandleButton("WMouse 2", (mouseBtns & MouseButtons.XButton2) != 0, InputFocus.Mouse); + HandleButton("WMouse L", (mouseBtns & MouseButtons.Left) != 0, ClientInputFocus.Mouse); + HandleButton("WMouse C", (mouseBtns & MouseButtons.Middle) != 0, ClientInputFocus.Mouse); + HandleButton("WMouse R", (mouseBtns & MouseButtons.Right) != 0, ClientInputFocus.Mouse); + HandleButton("WMouse 1", (mouseBtns & MouseButtons.XButton1) != 0, ClientInputFocus.Mouse); + HandleButton("WMouse 2", (mouseBtns & MouseButtons.XButton2) != 0, ClientInputFocus.Mouse); } else { #if false // don't do this: for now, it will interfere with the virtualpad. don't do something similar for the mouse position either // unpress all buttons - HandleButton("WMouse L", false, InputFocus.Mouse); - HandleButton("WMouse C", false, InputFocus.Mouse); - HandleButton("WMouse R", false, InputFocus.Mouse); - HandleButton("WMouse 1", false, InputFocus.Mouse); - HandleButton("WMouse 2", false, InputFocus.Mouse); + HandleButton("WMouse L", false, ClientInputFocus.Mouse); + HandleButton("WMouse C", false, ClientInputFocus.Mouse); + HandleButton("WMouse R", false, ClientInputFocus.Mouse); + HandleButton("WMouse 1", false, ClientInputFocus.Mouse); + HandleButton("WMouse 2", false, ClientInputFocus.Mouse); #endif } } @@ -419,7 +410,7 @@ namespace BizHawk.Client.EmuHawk private static bool ShouldSwallow(AllowInput allowInput, InputEvent inputEvent) { - return allowInput == AllowInput.None || (allowInput == AllowInput.OnlyController && inputEvent.Source != InputFocus.Pad); + return allowInput == AllowInput.None || (allowInput == AllowInput.OnlyController && inputEvent.Source != ClientInputFocus.Pad); } public void StartListeningForAxisEvents() diff --git a/src/BizHawk.Client.EmuHawk/Input/Keyboard.cs b/src/BizHawk.Client.EmuHawk/Input/Keyboard.cs index dbd3aed819..1b75b4aeaf 100644 --- a/src/BizHawk.Client.EmuHawk/Input/Keyboard.cs +++ b/src/BizHawk.Client.EmuHawk/Input/Keyboard.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using BizHawk.Client.Common; + using SlimDX; using SlimDX.DirectInput; diff --git a/src/BizHawk.Client.EmuHawk/Input/OTK_Keyboard.cs b/src/BizHawk.Client.EmuHawk/Input/OTK_Keyboard.cs index 4353860c3e..98375a427f 100644 --- a/src/BizHawk.Client.EmuHawk/Input/OTK_Keyboard.cs +++ b/src/BizHawk.Client.EmuHawk/Input/OTK_Keyboard.cs @@ -1,4 +1,7 @@ using System.Collections.Generic; + +using BizHawk.Client.Common; + using OpenTK.Input; namespace BizHawk.Client.EmuHawk @@ -102,10 +105,4 @@ namespace BizHawk.Client.EmuHawk } } } - - public struct KeyEvent - { - public Key Key; - public bool Pressed; - } } diff --git a/src/BizHawk.Client.EmuHawk/MainForm.cs b/src/BizHawk.Client.EmuHawk/MainForm.cs index 12d1130da5..b26b2119ff 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.cs @@ -891,12 +891,12 @@ namespace BizHawk.Client.EmuHawk protected override void OnActivated(EventArgs e) { base.OnActivated(e); - Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, true); + Input.Instance.ControlInputFocus(this, ClientInputFocus.Mouse, true); } protected override void OnDeactivate(EventArgs e) { - Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, false); + Input.Instance.ControlInputFocus(this, ClientInputFocus.Mouse, false); base.OnDeactivate(e); } diff --git a/src/BizHawk.Client.EmuHawk/config/ControllerConfig.cs b/src/BizHawk.Client.EmuHawk/config/ControllerConfig.cs index 4c08eec0f0..4cd2798f23 100644 --- a/src/BizHawk.Client.EmuHawk/config/ControllerConfig.cs +++ b/src/BizHawk.Client.EmuHawk/config/ControllerConfig.cs @@ -54,13 +54,13 @@ namespace BizHawk.Client.EmuHawk protected override void OnActivated(EventArgs e) { base.OnActivated(e); - Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, true); + Input.Instance.ControlInputFocus(this, ClientInputFocus.Mouse, true); } protected override void OnDeactivate(EventArgs e) { base.OnDeactivate(e); - Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, false); + Input.Instance.ControlInputFocus(this, ClientInputFocus.Mouse, false); } private void ControllerConfig_Load(object sender, EventArgs e) diff --git a/src/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs b/src/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs index 15f402f15f..3fd2078788 100644 --- a/src/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs +++ b/src/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs @@ -23,13 +23,13 @@ namespace BizHawk.Client.EmuHawk protected override void OnActivated(EventArgs e) { base.OnActivated(e); - Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, true); + Input.Instance.ControlInputFocus(this, ClientInputFocus.Mouse, true); } protected override void OnDeactivate(EventArgs e) { base.OnDeactivate(e); - Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, false); + Input.Instance.ControlInputFocus(this, ClientInputFocus.Mouse, false); } private void HotkeyConfig_Load(object sender, EventArgs e)