summaryrefslogtreecommitdiff
path: root/grapher/Models/Mouse/MouseWatcher.cs
diff options
context:
space:
mode:
Diffstat (limited to 'grapher/Models/Mouse/MouseWatcher.cs')
-rw-r--r--grapher/Models/Mouse/MouseWatcher.cs53
1 files changed, 31 insertions, 22 deletions
diff --git a/grapher/Models/Mouse/MouseWatcher.cs b/grapher/Models/Mouse/MouseWatcher.cs
index 6209445..cbfc119 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,8 +695,6 @@ namespace grapher.Models.Mouse
RAWINPUTDEVICE[] devices = new RAWINPUTDEVICE[1];
devices[0] = device;
RegisterRawInputDevices(devices, 1, Marshal.SizeOf(typeof(RAWINPUTDEVICE)));
- PollTime = 1;
- PollRate = 1000;
}
#endregion Constructors
@@ -708,24 +707,19 @@ 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 PollTime
+ {
+ get => 1000 / SettingsManager.PollRateField.Data;
+ }
#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 +734,30 @@ namespace grapher.Models.Mouse
outSize = GetRawInputData((IntPtr)message.LParam, RawInputCommand.Input, out rawInput, ref size, Marshal.SizeOf(typeof(RAWINPUTHEADER)));
- if (PollRateField.Data != PollRate)
- {
- PollRate = PollRateField.Data;
- PollTime = 1000 / PollRate;
- }
+ bool relative = !rawInput.Data.Mouse.Flags.HasFlag(RawMouseFlags.MoveAbsolute);
- if (rawInput.Data.Mouse.LastX != 0 || rawInput.Data.Mouse.LastY != 0)
+ if (relative && (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 directional multipliers, charts calculated from positive input
+
+ Vec2<double> dirMults = SettingsManager.RawAccelSettings
+ .AccelerationSettings.directionalMultipliers;
+
+ if (dirMults.x > 0 && x < 0)
+ {
+ x /= dirMults.x;
+ }
+
+ if (dirMults.y > 0 && y < 0)
+ {
+ y /= dirMults.y;
+ }
+
+ MouseData.Set(rawInput.Data.Mouse.LastX, rawInput.Data.Mouse.LastY);
+ AccelCharts.MakeDots(x, y, PollTime);
}
}