diff --git a/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogStickPanel.cs b/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogStickPanel.cs
index 949ed4d211..a21ce7d810 100644
--- a/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogStickPanel.cs
+++ b/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogStickPanel.cs
@@ -63,10 +63,17 @@ namespace BizHawk.Client.EmuHawk
public void Init(StickyXorAdapter stickyXorAdapter, string nameX, AxisSpec rangeX, string nameY, AxisSpec rangeY)
{
_stickyXorAdapter = stickyXorAdapter;
+
+ var scaleBase = Math.Min(Size.Width, Size.Height) - 10.0; // be circular when control is stretched
+
Name = XName = nameX;
_fullRangeX = rangeX;
+ ScaleX = scaleBase / rangeX.Range.Count();
+
YName = nameY;
_fullRangeY = rangeY;
+ ScaleY = scaleBase / rangeY.Range.Count();
+
Rerange();
}
@@ -93,12 +100,9 @@ namespace BizHawk.Client.EmuHawk
SetAnalog();
}
- ///
- /// never tested, assuming it works --zeromus
- ///
- private const float ScaleX = 0.60f;
- ///
- private const float ScaleY = 0.60f;
+ private double ScaleX = 0.6;
+
+ private double ScaleY = 0.6;
///
/// min + (max - i) == max - (i - min) == min + max - i
@@ -140,7 +144,6 @@ namespace BizHawk.Client.EmuHawk
public AnalogStickPanel()
{
- Size = new Size(PixelSizeX + 1, PixelSizeY + 1);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
diff --git a/src/BizHawk.Common/Extensions/NumberExtensions.cs b/src/BizHawk.Common/Extensions/NumberExtensions.cs
index de6eb56362..6d86c46aac 100644
--- a/src/BizHawk.Common/Extensions/NumberExtensions.cs
+++ b/src/BizHawk.Common/Extensions/NumberExtensions.cs
@@ -122,7 +122,9 @@ namespace BizHawk.Common.NumberExtensions
return val;
}
-
+
+ public static int RoundToInt(this double d) => (int) Math.Round(d);
+
public static int RoundToInt(this float f) => (int) Math.Round(f);
/// 2^-53