From 9210b4d9a1e776c0e1aa5b11ea78a2592d5210b8 Mon Sep 17 00:00:00 2001 From: adelikat Date: Sat, 26 Jul 2014 17:11:47 +0000 Subject: [PATCH] Greatly improve performance of the virtualpad tool, most configurations will have no speed cost unless there is no movie, movie speeds are much improved. --- .../tools/VirtualPads/VirtualPad.cs | 5 +++++ .../tools/VirtualPads/VirtualpadsTool.cs | 2 +- .../VirtualPads/controls/IVirtualPadControl.cs | 2 ++ .../controls/VirtualPadAnalogButton.cs | 15 +++++++++++++-- .../VirtualPads/controls/VirtualPadAnalogStick.cs | 6 ++++++ .../VirtualPads/controls/VirtualPadButton.cs | 6 ++++++ .../controls/VirtualPadTargetScreen.cs | 5 +++++ 7 files changed, 38 insertions(+), 3 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs index 610cd09768..0a56cb46d2 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs @@ -13,6 +13,11 @@ namespace BizHawk.Client.EmuHawk private readonly PadSchema _schema; private bool _readOnly; + public void UpdateValues() + { + PadControls.ForEach(c => c.UpdateValues()); + } + private List PadControls { get diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs index 826a85bdf7..4399383296 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs @@ -195,7 +195,7 @@ namespace BizHawk.Client.EmuHawk Pads.ForEach(pad => pad.Clear()); } - Pads.ForEach(pad => pad.Refresh()); + Pads.ForEach(pad => pad.UpdateValues()); } public void FastUpdate() diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/IVirtualPadControl.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/IVirtualPadControl.cs index b003bf8285..23678e9c72 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/IVirtualPadControl.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/IVirtualPadControl.cs @@ -9,6 +9,8 @@ namespace BizHawk.Client.EmuHawk /// void Clear(); + void UpdateValues(); + /// /// Sets the state of the control based on the given controller state /// diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogButton.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogButton.cs index 0c81da9ba6..fb986edc18 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogButton.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogButton.cs @@ -36,6 +36,14 @@ namespace BizHawk.Client.EmuHawk #region IVirtualPadControl Implementation + public void UpdateValues() + { + if (AnalogTrackBar.Value != (int)Global.StickyXORAdapter.GetFloat(Name)) + { + RefreshWidgets(); + } + } + public void Clear() { Global.StickyXORAdapter.Unset(Name); @@ -168,7 +176,7 @@ namespace BizHawk.Client.EmuHawk } } - protected override void OnPaint(PaintEventArgs e) + private void RefreshWidgets() { if (!_isSet) { @@ -177,7 +185,10 @@ namespace BizHawk.Client.EmuHawk ValueLabel.Text = AnalogTrackBar.Value.ToString(); _programmaticallyChangingValue = false; } - + } + protected override void OnPaint(PaintEventArgs e) + { + RefreshWidgets(); base.OnPaint(e); } } diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs index cba52ebebe..2f35d530de 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs @@ -46,6 +46,12 @@ namespace BizHawk.Client.EmuHawk #region IVirtualPadControl Implementation + public void UpdateValues() + { + // Nothing to do + // This tool already draws as necessary + } + public void Set(IController controller) { AnalogStick.Set(controller); diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadButton.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadButton.cs index b5bfe3f8cc..0ba0ee631e 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadButton.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadButton.cs @@ -36,6 +36,12 @@ namespace BizHawk.Client.EmuHawk } } + public void UpdateValues() + { + // Nothing to do + // This tool already draws as necessary + } + public void Set(IController controller) { var newVal = controller.IsPressed(Name); diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs index 6af7e9eead..757f0a96f1 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs @@ -35,6 +35,11 @@ namespace BizHawk.Client.EmuHawk #region IVirtualPadControl Implementation + public void UpdateValues() + { + TargetPanel.Refresh(); + } + public void Clear() { Global.StickyXORAdapter.Unset(XName);