From 5657d5a54c0a8e980c9b0cac39e2d16e452f302e Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Thu, 3 Dec 2020 20:00:31 -0500 Subject: add directional multipliers adds multipliers for movement in negative directions (up & left by default, can be flipped by rot or sens) avoid division by user input in mousewatcher --- grapher/Models/Mouse/MouseWatcher.cs | 46 +++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 16 deletions(-) (limited to 'grapher/Models/Mouse') diff --git a/grapher/Models/Mouse/MouseWatcher.cs b/grapher/Models/Mouse/MouseWatcher.cs index 6209445..66e72bb 100644 --- a/grapher/Models/Mouse/MouseWatcher.cs +++ b/grapher/Models/Mouse/MouseWatcher.cs @@ -1,4 +1,5 @@ -using System; +using grapher.Models.Serialized; +using System; using System.Runtime.InteropServices; using System.Windows.Forms; @@ -677,12 +678,12 @@ namespace grapher.Models.Mouse #region Constructors - public MouseWatcher(Form containingForm, Label display, AccelCharts accelCharts, Field pollRate) + public MouseWatcher(Form containingForm, Label display, AccelCharts accelCharts, SettingsManager setMngr) { ContainingForm = containingForm; Display = display; AccelCharts = accelCharts; - PollRateField = pollRate; + SettingsManager = setMngr; MouseData = new MouseData(); RAWINPUTDEVICE device = new RAWINPUTDEVICE(); @@ -694,7 +695,7 @@ namespace grapher.Models.Mouse RAWINPUTDEVICE[] devices = new RAWINPUTDEVICE[1]; devices[0] = device; RegisterRawInputDevices(devices, 1, Marshal.SizeOf(typeof(RAWINPUTDEVICE))); - PollTime = 1; + PollTimeRecip = 1; PollRate = 1000; } @@ -708,24 +709,18 @@ namespace grapher.Models.Mouse private AccelCharts AccelCharts { get; } - private Field PollRateField { get; set; } + private SettingsManager SettingsManager { get; } private MouseData MouseData { get; } private double PollRate { get; set; } - private double PollTime { get; set; } + private double PollTimeRecip { get; set; } #endregion Properties #region Methods - public void OnMouseMove(int x, int y, double timeInMs) - { - MouseData.Set(x,y); - AccelCharts.MakeDots(x, y, timeInMs); - } - public void UpdateLastMove() { MouseData.Get(out var x, out var y); @@ -740,15 +735,34 @@ namespace grapher.Models.Mouse outSize = GetRawInputData((IntPtr)message.LParam, RawInputCommand.Input, out rawInput, ref size, Marshal.SizeOf(typeof(RAWINPUTHEADER))); - if (PollRateField.Data != PollRate) + if (SettingsManager.PollRateField.Data != PollRate) { - PollRate = PollRateField.Data; - PollTime = 1000 / PollRate; + PollRate = SettingsManager.PollRateField.Data; + PollTimeRecip = Math.Abs(SettingsManager.PollRateField.Data) / 1000; } if (rawInput.Data.Mouse.LastX != 0 || rawInput.Data.Mouse.LastY != 0) { - OnMouseMove(rawInput.Data.Mouse.LastX, rawInput.Data.Mouse.LastY, PollTime); + double x = rawInput.Data.Mouse.LastX; + double y = rawInput.Data.Mouse.LastY; + + // strip negative multipliers, charts calculated from positive input + + Vec2 negMults = SettingsManager.RawAccelSettings + .AccelerationSettings.negativeMultipliers; + + if (negMults.x > 0 && x < 0) + { + x /= negMults.x; + } + + if (negMults.y > 0 && y < 0) + { + y /= negMults.y; + } + + MouseData.Set(rawInput.Data.Mouse.LastX, rawInput.Data.Mouse.LastY); + AccelCharts.MakeDots(x, y, PollTimeRecip); } } -- cgit v1.2.3 From c5c3c2a8a841d664a422380ab31497b3f741f07f Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Thu, 3 Dec 2020 20:01:49 -0500 Subject: filter out abs move raw input --- grapher/Models/Mouse/MouseWatcher.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'grapher/Models/Mouse') diff --git a/grapher/Models/Mouse/MouseWatcher.cs b/grapher/Models/Mouse/MouseWatcher.cs index 66e72bb..68b56e5 100644 --- a/grapher/Models/Mouse/MouseWatcher.cs +++ b/grapher/Models/Mouse/MouseWatcher.cs @@ -741,7 +741,9 @@ namespace grapher.Models.Mouse PollTimeRecip = Math.Abs(SettingsManager.PollRateField.Data) / 1000; } - if (rawInput.Data.Mouse.LastX != 0 || rawInput.Data.Mouse.LastY != 0) + bool relative = !rawInput.Data.Mouse.Flags.HasFlag(RawMouseFlags.MoveAbsolute); + + if (relative && (rawInput.Data.Mouse.LastX != 0 || rawInput.Data.Mouse.LastY != 0)) { double x = rawInput.Data.Mouse.LastX; double y = rawInput.Data.Mouse.LastY; -- cgit v1.2.3 From c221eb3d62ccbd7f2a5203abd3e0eae8e9bf31e8 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Thu, 3 Dec 2020 22:42:29 -0500 Subject: add changes from review rename some vars prefer exceptions over assert refactor poll rate field usage in MouseWatcher --- grapher/Models/Mouse/MouseWatcher.cs | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) (limited to 'grapher/Models/Mouse') diff --git a/grapher/Models/Mouse/MouseWatcher.cs b/grapher/Models/Mouse/MouseWatcher.cs index 68b56e5..ae48a76 100644 --- a/grapher/Models/Mouse/MouseWatcher.cs +++ b/grapher/Models/Mouse/MouseWatcher.cs @@ -695,8 +695,6 @@ namespace grapher.Models.Mouse RAWINPUTDEVICE[] devices = new RAWINPUTDEVICE[1]; devices[0] = device; RegisterRawInputDevices(devices, 1, Marshal.SizeOf(typeof(RAWINPUTDEVICE))); - PollTimeRecip = 1; - PollRate = 1000; } #endregion Constructors @@ -713,9 +711,10 @@ namespace grapher.Models.Mouse private MouseData MouseData { get; } - private double PollRate { get; set; } - - private double PollTimeRecip { get; set; } + private double PollTimeReciprocal + { + get => Math.Abs(SettingsManager.PollRateField.Data) * 0.001; + } #endregion Properties @@ -735,12 +734,6 @@ namespace grapher.Models.Mouse outSize = GetRawInputData((IntPtr)message.LParam, RawInputCommand.Input, out rawInput, ref size, Marshal.SizeOf(typeof(RAWINPUTHEADER))); - if (SettingsManager.PollRateField.Data != PollRate) - { - PollRate = SettingsManager.PollRateField.Data; - PollTimeRecip = Math.Abs(SettingsManager.PollRateField.Data) / 1000; - } - bool relative = !rawInput.Data.Mouse.Flags.HasFlag(RawMouseFlags.MoveAbsolute); if (relative && (rawInput.Data.Mouse.LastX != 0 || rawInput.Data.Mouse.LastY != 0)) @@ -748,23 +741,23 @@ namespace grapher.Models.Mouse double x = rawInput.Data.Mouse.LastX; double y = rawInput.Data.Mouse.LastY; - // strip negative multipliers, charts calculated from positive input + // strip negative directional multipliers, charts calculated from positive input - Vec2 negMults = SettingsManager.RawAccelSettings - .AccelerationSettings.negativeMultipliers; + Vec2 dirMults = SettingsManager.RawAccelSettings + .AccelerationSettings.directionalMultipliers; - if (negMults.x > 0 && x < 0) + if (dirMults.x > 0 && x < 0) { - x /= negMults.x; + x /= dirMults.x; } - if (negMults.y > 0 && y < 0) + if (dirMults.y > 0 && y < 0) { - y /= negMults.y; + y /= dirMults.y; } MouseData.Set(rawInput.Data.Mouse.LastX, rawInput.Data.Mouse.LastY); - AccelCharts.MakeDots(x, y, PollTimeRecip); + AccelCharts.MakeDots(x, y, PollTimeReciprocal); } } -- cgit v1.2.3 From 2c7c24ee1513616dc6260849bf97340d8484b6b4 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Sat, 5 Dec 2020 01:21:03 -0500 Subject: add more changes from review improve version error messages revert poll time changes add range validation after text parse --- grapher/Models/Mouse/MouseWatcher.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'grapher/Models/Mouse') diff --git a/grapher/Models/Mouse/MouseWatcher.cs b/grapher/Models/Mouse/MouseWatcher.cs index ae48a76..cbfc119 100644 --- a/grapher/Models/Mouse/MouseWatcher.cs +++ b/grapher/Models/Mouse/MouseWatcher.cs @@ -711,9 +711,9 @@ namespace grapher.Models.Mouse private MouseData MouseData { get; } - private double PollTimeReciprocal + private double PollTime { - get => Math.Abs(SettingsManager.PollRateField.Data) * 0.001; + get => 1000 / SettingsManager.PollRateField.Data; } #endregion Properties @@ -757,7 +757,7 @@ namespace grapher.Models.Mouse } MouseData.Set(rawInput.Data.Mouse.LastX, rawInput.Data.Mouse.LastY); - AccelCharts.MakeDots(x, y, PollTimeReciprocal); + AccelCharts.MakeDots(x, y, PollTime); } } -- cgit v1.2.3