From dc8fa8bd8789abe76b671530ed1d0c6d8a524449 Mon Sep 17 00:00:00 2001 From: adelikat Date: Sat, 26 Jul 2014 17:22:58 +0000 Subject: [PATCH] Virtualpad - another performance improvement for Analogstick controls --- .../controls/VirtualPadAnalogStick.cs | 23 +++++++++++++++---- .../controls/components/AnalogSticklPanel.cs | 12 ++++++---- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs index 2f35d530de..3d25fbc5f5 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs @@ -154,13 +154,28 @@ namespace BizHawk.Client.EmuHawk { if (AnalogStick.HasValue) { - ManualX.Value = AnalogStick.X; - ManualY.Value = AnalogStick.Y; + // Setting .Value of a numeric causes a draw, so avoid it unless necessary + if (ManualX.Value != AnalogStick.X) + { + ManualX.Value = AnalogStick.X; + } + + if (ManualY.Value != AnalogStick.Y) + { + ManualY.Value = AnalogStick.Y; + } } else { - ManualX.Value = 0; - ManualY.Value = 0; + if (ManualX.Value != 0) + { + ManualX.Value = 0; + } + + if (ManualY.Value != 0) + { + ManualY.Value = 0; + } } } diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogSticklPanel.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogSticklPanel.cs index 33aae7930b..6d02fb3907 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogSticklPanel.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogSticklPanel.cs @@ -158,6 +158,7 @@ namespace BizHawk.Client.EmuHawk private int MidX { get { return (int)((MaxX + 0.5) / 2); } } private int MidY { get { return (int)((MaxY + 0.5) / 2); } } + private void AnalogControlPanel_Paint(object sender, PaintEventArgs e) { unchecked @@ -247,10 +248,13 @@ namespace BizHawk.Client.EmuHawk public void Clear() { - X = Y = 0; - HasValue = false; - DoClearCallback(); - Refresh(); + if (X != 0 || Y != 0 || HasValue) + { + X = Y = 0; + HasValue = false; + DoClearCallback(); + Refresh(); + } } public void Set(IController controller)