From 140aec6a4d67c52a5be45e6135a52c3f538f16df Mon Sep 17 00:00:00 2001 From: zeromus Date: Sun, 22 Jun 2014 23:20:36 +0000 Subject: [PATCH] add system for controlling which forms can generate mouse input --- BizHawk.Client.EmuHawk/Input/Input.cs | 35 ++++++++++++++++++- BizHawk.Client.EmuHawk/MainForm.cs | 14 ++++++++ .../config/ControllerConfig.cs | 12 +++++++ BizHawk.Client.EmuHawk/config/HotkeyConfig.cs | 13 +++++++ .../tools/VirtualPads/VirtualpadTool.cs | 12 +++++++ 5 files changed, 85 insertions(+), 1 deletion(-) diff --git a/BizHawk.Client.EmuHawk/Input/Input.cs b/BizHawk.Client.EmuHawk/Input/Input.cs index dff7771a1f..d75b77e23f 100644 --- a/BizHawk.Client.EmuHawk/Input/Input.cs +++ b/BizHawk.Client.EmuHawk/Input/Input.cs @@ -62,6 +62,29 @@ namespace BizHawk.Client.EmuHawk public class Input { + [Flags] + public enum InputFocus + { + None = 0, + Mouse = 1, + Keyboard = 2, + Pad = 4 + } + + /// + /// If your form needs this kind of input focus, be sure to say so. + /// Really, this only makes sense for mouse, but I've started building it out for other things + /// 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(System.Windows.Forms.Control c, InputFocus types, bool wants) + { + if (types.HasFlag(InputFocus.Mouse) && wants) WantingMouseFocus.Add(c); + if (types.HasFlag(InputFocus.Mouse) && !wants) WantingMouseFocus.Remove(c); + } + + HashSet WantingMouseFocus = new HashSet(); + [Flags] public enum ModifierKey { @@ -352,6 +375,7 @@ namespace BizHawk.Client.EmuHawk // analyse moose // other sorts of mouse api (raw input) could easily be added as a separate listing under a different class + if (WantingMouseFocus.Contains(System.Windows.Forms.Form.ActiveForm)) { var P = System.Windows.Forms.Control.MousePosition; if (trackdeltas) @@ -366,11 +390,20 @@ namespace BizHawk.Client.EmuHawk var B = System.Windows.Forms.Control.MouseButtons; HandleButton("WMouse L", (B & System.Windows.Forms.MouseButtons.Left) != 0); - HandleButton("WMouse M", (B & System.Windows.Forms.MouseButtons.Middle) != 0); + HandleButton("WMouse C", (B & System.Windows.Forms.MouseButtons.Middle) != 0); HandleButton("WMouse R", (B & System.Windows.Forms.MouseButtons.Right) != 0); HandleButton("WMouse 1", (B & System.Windows.Forms.MouseButtons.XButton1) != 0); HandleButton("WMouse 2", (B & System.Windows.Forms.MouseButtons.XButton2) != 0); } + else + { + //unpress all buttons + HandleButton("WMouse L", false); + HandleButton("WMouse C", false); + HandleButton("WMouse R", false); + HandleButton("WMouse 1", false); + HandleButton("WMouse 2", false); + } } diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index f4088381df..d4e91318a6 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -623,6 +623,20 @@ namespace BizHawk.Client.EmuHawk } } + + + protected override void OnActivated(EventArgs e) + { + base.OnActivated(e); + Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, true); + } + + protected override void OnDeactivate(EventArgs e) + { + base.OnDeactivate(e); + Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, false); + } + public void ProcessInput() { ControllerInputCoalescer conInput = Global.ControllerInputCoalescer as ControllerInputCoalescer; diff --git a/BizHawk.Client.EmuHawk/config/ControllerConfig.cs b/BizHawk.Client.EmuHawk/config/ControllerConfig.cs index 68d114af88..98cb72e3ee 100644 --- a/BizHawk.Client.EmuHawk/config/ControllerConfig.cs +++ b/BizHawk.Client.EmuHawk/config/ControllerConfig.cs @@ -42,6 +42,18 @@ namespace BizHawk.Client.EmuHawk ControllerImages.Add("WonderSwan Controller", Properties.Resources.WonderSwanColor); } + protected override void OnActivated(EventArgs e) + { + base.OnActivated(e); + Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, true); + } + + protected override void OnDeactivate(EventArgs e) + { + base.OnDeactivate(e); + Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, false); + } + private ControllerConfig() { InitializeComponent(); diff --git a/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs b/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs index 20f84e3bc6..9ace3b4bc7 100644 --- a/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs +++ b/BizHawk.Client.EmuHawk/config/HotkeyConfig.cs @@ -18,6 +18,19 @@ namespace BizHawk.Client.EmuHawk { IDB_SAVE.Focus(); // A very dirty hack to avoid https://code.google.com/p/bizhawk/issues/detail?id=161 }; + + } + + protected override void OnActivated(EventArgs e) + { + base.OnActivated(e); + Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, true); + } + + protected override void OnDeactivate(EventArgs e) + { + base.OnDeactivate(e); + Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, false); } private void NewHotkeyWindow_Load(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadTool.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadTool.cs index 437a6b28e6..9ccd3097d8 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadTool.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadTool.cs @@ -30,6 +30,18 @@ namespace BizHawk.Client.EmuHawk TopMost = Global.Config.VirtualPadSettings.TopMost; } + protected override void OnActivated(EventArgs e) + { + base.OnActivated(e); + Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, true); + } + + protected override void OnDeactivate(EventArgs e) + { + base.OnDeactivate(e); + Input.Instance.ControlInputFocus(this, Input.InputFocus.Mouse, false); + } + private void VirtualpadTool_Load(object sender, EventArgs e) { _defaultWidth = Size.Width;