Move some host input internals to Client.Common
This commit is contained in:
parent
4c8bdf9851
commit
02e0804712
|
@ -0,0 +1,15 @@
|
|||
#nullable enable
|
||||
|
||||
using System;
|
||||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
[Flags]
|
||||
public enum ClientInputFocus
|
||||
{
|
||||
None = 0,
|
||||
Mouse = 1,
|
||||
Keyboard = 2,
|
||||
Pad = 4
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
/// <remarks>this was easier than trying to make static classes instantiable...</remarks>
|
||||
public interface HostInputAdapter
|
||||
{
|
||||
void DeInitAll();
|
||||
|
||||
void FirstInitAll(IntPtr mainFormHandle);
|
||||
|
||||
void ReInitGamepads(IntPtr mainFormHandle);
|
||||
|
||||
void PreprocessHostGamepads();
|
||||
|
||||
void ProcessHostGamepads(Action<string?, bool, ClientInputFocus> handleButton, Action<string?, int> handleAxis);
|
||||
|
||||
IEnumerable<KeyEvent> ProcessHostKeyboards();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#nullable enable
|
||||
|
||||
using OpenTK.Input;
|
||||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public struct KeyEvent
|
||||
{
|
||||
public Key Key;
|
||||
|
||||
public bool Pressed;
|
||||
}
|
||||
}
|
|
@ -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
|
||||
{
|
||||
/// <remarks>this was easier than trying to make static classes instantiable...</remarks>
|
||||
public interface HostInputAdapter
|
||||
{
|
||||
void DeInitAll();
|
||||
|
||||
void FirstInitAll(IntPtr mainFormHandle);
|
||||
|
||||
void ReInitGamepads(IntPtr mainFormHandle);
|
||||
|
||||
void PreprocessHostGamepads();
|
||||
|
||||
void ProcessHostGamepads(Action<string?, bool, InputFocus> handleButton, Action<string?, int> handleAxis);
|
||||
|
||||
IEnumerable<KeyEvent> ProcessHostKeyboards();
|
||||
}
|
||||
|
||||
internal sealed class DirectInputAdapter : HostInputAdapter
|
||||
{
|
||||
public void DeInitAll()
|
||||
|
@ -51,18 +35,18 @@ namespace BizHawk.Client.EmuHawk
|
|||
GamePad360.UpdateAll();
|
||||
}
|
||||
|
||||
public void ProcessHostGamepads(Action<string?, bool, InputFocus> handleButton, Action<string?, int> handleAxis)
|
||||
public void ProcessHostGamepads(Action<string?, bool, ClientInputFocus> handleButton, Action<string?, int> 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<string?, bool, InputFocus> handleButton, Action<string?, int> handleAxis)
|
||||
public void ProcessHostGamepads(Action<string?, bool, ClientInputFocus> handleButton, Action<string?, int> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
/// </summary>
|
||||
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<Control> _wantingMouseFocus = new HashSet<Control>();
|
||||
|
@ -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()
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using BizHawk.Client.Common;
|
||||
|
||||
using SlimDX;
|
||||
using SlimDX.DirectInput;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue