From 69a05641e70fd43496f84308241bcfd077b279c7 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Tue, 6 Oct 2020 09:13:16 +1000 Subject: [PATCH] Replace global config access in DirectInput wrapper with encapsulation fixes b01f52c01; this required a whole lot of rearchitecting for one obscure feature which will become obsolete with the move to .NET Core anyway, and I'm not happy about it --- src/BizHawk.Client.Common/input/HostInputAdapter.cs | 2 ++ src/BizHawk.Client.EmuHawk/Input/HostInputAdapters.cs | 8 +++++++- src/BizHawk.Client.EmuHawk/Input/Input.cs | 3 +++ src/BizHawk.Client.EmuHawk/Input/Keyboard.cs | 8 +++++--- src/BizHawk.Client.EmuHawk/Input/KeyboardMapping.cs | 1 - 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/BizHawk.Client.Common/input/HostInputAdapter.cs b/src/BizHawk.Client.Common/input/HostInputAdapter.cs index dda30a7f44..d3b635af4a 100644 --- a/src/BizHawk.Client.Common/input/HostInputAdapter.cs +++ b/src/BizHawk.Client.Common/input/HostInputAdapter.cs @@ -19,5 +19,7 @@ namespace BizHawk.Client.Common void ProcessHostGamepads(Action handleButton, Action handleAxis); IEnumerable ProcessHostKeyboards(); + + void UpdateConfig(Config config); } } diff --git a/src/BizHawk.Client.EmuHawk/Input/HostInputAdapters.cs b/src/BizHawk.Client.EmuHawk/Input/HostInputAdapters.cs index 70f41a8e4e..f61458036a 100644 --- a/src/BizHawk.Client.EmuHawk/Input/HostInputAdapters.cs +++ b/src/BizHawk.Client.EmuHawk/Input/HostInputAdapters.cs @@ -10,6 +10,8 @@ namespace BizHawk.Client.EmuHawk { internal sealed class DirectInputAdapter : HostInputAdapter { + private Config? _config; + public void DeInitAll() { KeyInput.Cleanup(); @@ -51,7 +53,9 @@ namespace BizHawk.Client.EmuHawk } } - public IEnumerable ProcessHostKeyboards() => KeyInput.Update().Concat(IPCKeyInput.Update()); + public IEnumerable ProcessHostKeyboards() => KeyInput.Update(_config).Concat(IPCKeyInput.Update()); + + public void UpdateConfig(Config config) => _config = config; } internal sealed class OpenTKInputAdapter : HostInputAdapter @@ -78,5 +82,7 @@ namespace BizHawk.Client.EmuHawk } public IEnumerable ProcessHostKeyboards() => OTK_Keyboard.Update(); + + public void UpdateConfig(Config config) {} } } diff --git a/src/BizHawk.Client.EmuHawk/Input/Input.cs b/src/BizHawk.Client.EmuHawk/Input/Input.cs index 392d5d2b65..fbfb87615e 100644 --- a/src/BizHawk.Client.EmuHawk/Input/Input.cs +++ b/src/BizHawk.Client.EmuHawk/Input/Input.cs @@ -120,6 +120,7 @@ namespace BizHawk.Client.EmuHawk private Input() { + Adapter.UpdateConfig(GlobalWin.Config); UpdateThread = new Thread(UpdateThreadProc) { IsBackground = true, @@ -331,6 +332,8 @@ namespace BizHawk.Client.EmuHawk { while (true) { + Adapter.UpdateConfig(GlobalWin.Config); + var keyEvents = Adapter.ProcessHostKeyboards(); Adapter.PreprocessHostGamepads(); diff --git a/src/BizHawk.Client.EmuHawk/Input/Keyboard.cs b/src/BizHawk.Client.EmuHawk/Input/Keyboard.cs index 1b75b4aeaf..09076acbd8 100644 --- a/src/BizHawk.Client.EmuHawk/Input/Keyboard.cs +++ b/src/BizHawk.Client.EmuHawk/Input/Keyboard.cs @@ -66,8 +66,10 @@ namespace BizHawk.Client.EmuHawk {Key.NumberPad0, OpenTK.Input.Key.Keypad0}, {Key.NumberPad1, OpenTK.Input.Key.Keypad1}, {Key.NumberPad2, OpenTK.Input.Key.Keypad2}, {Key.NumberPad3, OpenTK.Input.Key.Keypad3}, {Key.NumberPad4, OpenTK.Input.Key.Keypad4}, {Key.NumberPad5, OpenTK.Input.Key.Keypad5}, {Key.NumberPad6, OpenTK.Input.Key.Keypad6}, {Key.NumberPad7, OpenTK.Input.Key.Keypad7}, {Key.NumberPad8, OpenTK.Input.Key.Keypad8}, {Key.NumberPad9, OpenTK.Input.Key.Keypad9}, {Key.NumberPadPlus, OpenTK.Input.Key.KeypadAdd}, {Key.NumberPadPeriod, OpenTK.Input.Key.KeypadDecimal}, {Key.NumberPadSlash, OpenTK.Input.Key.KeypadDivide}, {Key.NumberPadEnter, OpenTK.Input.Key.KeypadEnter}, {Key.NumberPadStar, OpenTK.Input.Key.KeypadMultiply}, {Key.NumberPadMinus, OpenTK.Input.Key.KeypadSubtract} }; - public static IEnumerable Update() + public static IEnumerable Update(Config config) { + OpenTK.Input.Key Mapped(Key k) => KeyEnumMap[config.HandleAlternateKeyboardLayouts ? KeyboardMapping.Handle(k) : k]; + lock (SyncObj) { EventList.Clear(); @@ -83,9 +85,9 @@ namespace BizHawk.Client.EmuHawk foreach (var e in events) { foreach (var k in e.PressedKeys) - EventList.Add(new KeyEvent { Key = KeyEnumMap[KeyboardMapping.Handle(k)], Pressed = true }); + EventList.Add(new KeyEvent { Key = Mapped(k), Pressed = true }); foreach (var k in e.ReleasedKeys) - EventList.Add(new KeyEvent { Key = KeyEnumMap[KeyboardMapping.Handle(k)], Pressed = false }); + EventList.Add(new KeyEvent { Key = Mapped(k), Pressed = false }); } } diff --git a/src/BizHawk.Client.EmuHawk/Input/KeyboardMapping.cs b/src/BizHawk.Client.EmuHawk/Input/KeyboardMapping.cs index 4325054c02..3e2440eefa 100644 --- a/src/BizHawk.Client.EmuHawk/Input/KeyboardMapping.cs +++ b/src/BizHawk.Client.EmuHawk/Input/KeyboardMapping.cs @@ -11,7 +11,6 @@ namespace BizHawk.Client.EmuHawk public static Key Handle(Key key) { - if (!GlobalWin.Config.HandleAlternateKeyboardLayouts) return key; ScanCode inputScanCode = SlimDXScanCodeMap[(int)key]; Keys virtualKey = (Keys)BizHawk.Common.Win32Imports.MapVirtualKey((uint)inputScanCode, MAPVK_VSC_TO_VK_EX); ScanCode standardScanCode = GetStandardScanCode(virtualKey);