diff options
| author | Jacob Palecki <[email protected]> | 2021-01-20 00:42:24 -0800 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2021-01-20 00:42:24 -0800 |
| commit | 77b4c7876918cac82494ec8fc15a22fdab5cf714 (patch) | |
| tree | 66b2c7d86cecf0846c3b5cdaa69c6991858ed931 /grapher | |
| parent | Remove debug statement (diff) | |
| parent | show custom dialog on bad input (#63) (diff) | |
| download | rawaccel-77b4c7876918cac82494ec8fc15a22fdab5cf714.tar.xz rawaccel-77b4c7876918cac82494ec8fc15a22fdab5cf714.zip | |
merge with master builds
Diffstat (limited to 'grapher')
| -rw-r--r-- | grapher/Form1.Designer.cs | 23 | ||||
| -rw-r--r-- | grapher/Form1.cs | 22 | ||||
| -rw-r--r-- | grapher/MessageDialog.Designer.cs | 98 | ||||
| -rw-r--r-- | grapher/MessageDialog.cs | 24 | ||||
| -rw-r--r-- | grapher/Models/AccelGUI.cs | 20 | ||||
| -rw-r--r-- | grapher/Models/AccelGUIFactory.cs | 11 | ||||
| -rw-r--r-- | grapher/Models/Devices/DeviceIDItem.cs | 73 | ||||
| -rw-r--r-- | grapher/Models/Devices/DeviceIDManager.cs | 86 | ||||
| -rw-r--r-- | grapher/Models/Mouse/MouseData.cs | 17 | ||||
| -rw-r--r-- | grapher/Models/Mouse/MouseWatcher.cs | 33 | ||||
| -rw-r--r-- | grapher/Models/Mouse/PointData.cs | 13 | ||||
| -rw-r--r-- | grapher/Models/Serialized/RawAccelSettings.cs | 3 | ||||
| -rw-r--r-- | grapher/Models/Serialized/SettingsManager.cs | 8 | ||||
| -rw-r--r-- | grapher/grapher.csproj | 10 |
14 files changed, 384 insertions, 57 deletions
diff --git a/grapher/Form1.Designer.cs b/grapher/Form1.Designer.cs index d5dc37f..13aefb7 100644 --- a/grapher/Form1.Designer.cs +++ b/grapher/Form1.Designer.cs @@ -180,6 +180,7 @@ namespace grapher this.gainOffsetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.legacyOffsetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.AutoWriteMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.UseSpecificDeviceMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.chartsPanel = new System.Windows.Forms.Panel(); this.GainChartY = new System.Windows.Forms.DataVisualization.Charting.Chart(); this.VelocityChartY = new System.Windows.Forms.DataVisualization.Charting.Chart(); @@ -281,7 +282,6 @@ namespace grapher this.optionsPanel.Name = "optionsPanel"; this.optionsPanel.Size = new System.Drawing.Size(483, 956); this.optionsPanel.TabIndex = 34; - this.optionsPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.optionsPanel_Paint); // // FakeBox // @@ -1178,7 +1178,8 @@ namespace grapher this.advancedToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.capStyleToolStripMenuItem, this.offsetStyleToolStripMenuItem, - this.AutoWriteMenuItem}); + this.AutoWriteMenuItem, + this.UseSpecificDeviceMenuItem}); this.advancedToolStripMenuItem.Name = "advancedToolStripMenuItem"; this.advancedToolStripMenuItem.Size = new System.Drawing.Size(72, 20); this.advancedToolStripMenuItem.Text = "Advanced"; @@ -1236,6 +1237,21 @@ namespace grapher this.AutoWriteMenuItem.Size = new System.Drawing.Size(210, 22); this.AutoWriteMenuItem.Text = "Apply Settings On Startup"; // + // AutoWriteMenuItem + // + this.AutoWriteMenuItem.Checked = true; + this.AutoWriteMenuItem.CheckOnClick = true; + this.AutoWriteMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.AutoWriteMenuItem.Name = "AutoWriteMenuItem"; + this.AutoWriteMenuItem.Size = new System.Drawing.Size(210, 22); + this.AutoWriteMenuItem.Text = "Apply Settings On Startup"; + // + // UseSpecificDeviceMenuItem + // + this.UseSpecificDeviceMenuItem.Name = "UseSpecificDeviceMenuItem"; + this.UseSpecificDeviceMenuItem.Size = new System.Drawing.Size(210, 22); + this.UseSpecificDeviceMenuItem.Text = "Use Specific Device"; + // // chartsPanel // this.chartsPanel.AutoScroll = true; @@ -1498,8 +1514,6 @@ namespace grapher this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "RawAcceleration"; this.Text = "Raw Accel"; - this.Load += new System.EventHandler(this.Form1_Load); - this.Paint += new System.Windows.Forms.PaintEventHandler(this.RawAcceleration_Paint); this.optionsPanel.ResumeLayout(false); this.optionsPanel.PerformLayout(); this.DirectionalityPanel.ResumeLayout(false); @@ -1636,6 +1650,7 @@ namespace grapher private System.Windows.Forms.Label LpNormActiveValue; private System.Windows.Forms.Label RangeActiveValueY; private System.Windows.Forms.CheckBox FakeBox; + private System.Windows.Forms.ToolStripMenuItem UseSpecificDeviceMenuItem; } } diff --git a/grapher/Form1.cs b/grapher/Form1.cs index 06f76f1..71a5e01 100644 --- a/grapher/Form1.cs +++ b/grapher/Form1.cs @@ -69,6 +69,7 @@ namespace grapher gainOffsetToolStripMenuItem, legacyOffsetToolStripMenuItem, AutoWriteMenuItem, + UseSpecificDeviceMenuItem, ScaleMenuItem, DPITextBox, PollRateTextBox, @@ -173,19 +174,18 @@ namespace grapher protected override void WndProc(ref Message m) { - if (m.Msg == 0x00ff) + if (m.Msg == 0x00ff) // WM_INPUT { AccelGUI.MouseWatcher.ReadMouseMove(m); } + else if (m.Msg == 0x00fe) // WM_INPUT_DEVICE_CHANGE + { + AccelGUI.UpdateInputManagers(); + } base.WndProc(ref m); } - private void Form1_Load(object sender, EventArgs e) - { - - } - public void ResetAutoScroll() { chartsPanel.AutoScrollPosition = Constants.Origin; @@ -205,16 +205,6 @@ namespace grapher }; } - private void RawAcceleration_Paint(object sender, PaintEventArgs e) - { - //AccelGUI.AccelCharts.DrawLastMovement(); - } - #endregion Method - - private void optionsPanel_Paint(object sender, PaintEventArgs e) - { - - } } } diff --git a/grapher/MessageDialog.Designer.cs b/grapher/MessageDialog.Designer.cs new file mode 100644 index 0000000..f7fa8d6 --- /dev/null +++ b/grapher/MessageDialog.Designer.cs @@ -0,0 +1,98 @@ + +namespace grapher +{ + partial class MessageDialog + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.okButton = new System.Windows.Forms.Button(); + this.messageLabel = new System.Windows.Forms.Label(); + this.tableLayoutPanel.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel + // + this.tableLayoutPanel.AutoSize = true; + this.tableLayoutPanel.ColumnCount = 1; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.Controls.Add(this.okButton, 0, 1); + this.tableLayoutPanel.Controls.Add(this.messageLabel, 0, 0); + this.tableLayoutPanel.ForeColor = System.Drawing.SystemColors.ControlText; + this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel.RowCount = 2; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(224, 61); + this.tableLayoutPanel.TabIndex = 2; + // + // okButton + // + this.okButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.okButton.Location = new System.Drawing.Point(74, 30); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 4; + this.okButton.Text = "&OK"; + this.okButton.UseVisualStyleBackColor = true; + // + // messageLabel + // + this.messageLabel.AutoSize = true; + this.messageLabel.Location = new System.Drawing.Point(8, 5); + this.messageLabel.Name = "messageLabel"; + this.messageLabel.Size = new System.Drawing.Size(35, 13); + this.messageLabel.TabIndex = 3; + this.messageLabel.Text = "label1"; + // + // MessageDialog + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.CancelButton = this.okButton; + this.ClientSize = new System.Drawing.Size(224, 61); + this.Controls.Add(this.tableLayoutPanel); + this.Name = "MessageDialog"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Label messageLabel; + } +}
\ No newline at end of file diff --git a/grapher/MessageDialog.cs b/grapher/MessageDialog.cs new file mode 100644 index 0000000..0e153f8 --- /dev/null +++ b/grapher/MessageDialog.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace grapher +{ + public partial class MessageDialog : Form + { + public MessageDialog(string message, string title = "") + { + InitializeComponent(); + Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath); + Text = title; + messageLabel.Text = message; + } + + } +} diff --git a/grapher/Models/AccelGUI.cs b/grapher/Models/AccelGUI.cs index e125310..5f05798 100644 --- a/grapher/Models/AccelGUI.cs +++ b/grapher/Models/AccelGUI.cs @@ -1,4 +1,5 @@ using grapher.Models.Calculations; +using grapher.Models.Devices; using grapher.Models.Mouse; using grapher.Models.Options; using grapher.Models.Serialized; @@ -23,7 +24,8 @@ namespace grapher Button writeButton, ButtonBase toggleButton, MouseWatcher mouseWatcher, - ToolStripMenuItem scaleMenuItem) + ToolStripMenuItem scaleMenuItem, + DeviceIDManager deviceIDManager) { AccelForm = accelForm; AccelCalculator = accelCalculator; @@ -36,6 +38,7 @@ namespace grapher DefaultButtonFont = WriteButton.Font; SmallButtonFont = new Font(WriteButton.Font.Name, WriteButton.Font.Size * Constants.SmallButtonSizeFactor); MouseWatcher = mouseWatcher; + DeviceIDManager = deviceIDManager; ScaleMenuItem.Click += new System.EventHandler(OnScaleMenuItemClick); WriteButton.Click += new System.EventHandler(OnWriteButtonClick); @@ -95,6 +98,10 @@ namespace grapher public ToolStripMenuItem ScaleMenuItem { get; } + public DeviceIDManager DeviceIDManager { get; } + + public Action UpdateInputManagers { get; private set; } + private Timer ChartRefresh { get; } private Font SmallButtonFont { get; } @@ -144,6 +151,7 @@ namespace grapher directionalMultipliers = driverSettings.directionalMultipliers, domainArgs = ApplyOptions.Directionality.GetDomainArgs(), rangeXY = ApplyOptions.Directionality.GetRangeXY(), + deviceID = DeviceIDManager.ID, }; ButtonDelay(WriteButton); @@ -156,7 +164,7 @@ namespace grapher } else { - throw new Exception($"Bad arguments:\n\n{errors}"); + new MessageDialog(errors.ToString(), "bad input").ShowDialog(); } } @@ -164,6 +172,14 @@ namespace grapher { UpdateShownActiveValues(args); UpdateGraph(args); + + UpdateInputManagers = () => + { + MouseWatcher.UpdateHandles(args.deviceID); + DeviceIDManager.Update(args.deviceID); + }; + + UpdateInputManagers(); } public void UpdateGraph(DriverSettings args) diff --git a/grapher/Models/AccelGUIFactory.cs b/grapher/Models/AccelGUIFactory.cs index 802ce4b..9ca1578 100644 --- a/grapher/Models/AccelGUIFactory.cs +++ b/grapher/Models/AccelGUIFactory.cs @@ -1,4 +1,5 @@ using grapher.Models.Calculations; +using grapher.Models.Devices; using grapher.Models.Mouse; using grapher.Models.Options; using grapher.Models.Options.Directionality; @@ -33,6 +34,7 @@ namespace grapher.Models ToolStripMenuItem gainOffsetToolStripMenuItem, ToolStripMenuItem legacyOffsetToolStripMenuItem, ToolStripMenuItem autoWriteMenuItem, + ToolStripMenuItem useSpecificDeviceMenuItem, ToolStripMenuItem scaleMenuItem, ToolStripTextBox dpiTextBox, ToolStripTextBox pollRateTextBox, @@ -391,16 +393,20 @@ namespace grapher.Models lockXYLabel, accelCharts); + var deviceIdManager = new DeviceIDManager(useSpecificDeviceMenuItem); + var settings = new SettingsManager( activeAccel, accelCalculator.DPI, accelCalculator.PollRate, autoWriteMenuItem, showLastMouseMoveMenuItem, - showVelocityGainToolStripMenuItem); + showVelocityGainToolStripMenuItem, + deviceIdManager); var mouseWatcher = new MouseWatcher(form, mouseLabel, accelCharts, settings); + return new AccelGUI( form, accelCalculator, @@ -410,7 +416,8 @@ namespace grapher.Models writeButton, toggleButton, mouseWatcher, - scaleMenuItem); + scaleMenuItem, + deviceIdManager); } #endregion Methods diff --git a/grapher/Models/Devices/DeviceIDItem.cs b/grapher/Models/Devices/DeviceIDItem.cs new file mode 100644 index 0000000..63c2761 --- /dev/null +++ b/grapher/Models/Devices/DeviceIDItem.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace grapher.Models.Devices +{ + public class DeviceIDItem + { + public DeviceIDItem(string name, string id, DeviceIDManager manager) + { + Name = name; + ID = id; + Manager = manager; + DeviceIDMenuItem = new ToolStripMenuItem(); + DeviceIDMenuItem.Checked = false; + DeviceIDMenuItem.Text = MenuItemText(); + DeviceIDMenuItem.Click += OnClicked; + manager.DeviceIDsMenuItem.DropDownItems.Add(DeviceIDMenuItem); + } + + private ToolStripMenuItem DeviceIDMenuItem { get; } + + public string Name { get; } + + public string ID { get; } + + private DeviceIDManager Manager { get; } + + public void SetActivated() + { + DeviceIDMenuItem.Checked = true; + } + + public void SetDeactivated() + { + DeviceIDMenuItem.Checked = false; + } + + private string MenuItemText() => string.IsNullOrEmpty(ID) ? $"{Name}" : $"{Name}: {ID}"; + + private string DisconnectedText() => $"Disconnected: {ID}"; + + public void SetDisconnected() + { + DeviceIDMenuItem.ForeColor = Color.DarkGray; + DeviceIDMenuItem.Text = DisconnectedText(); + } + + public void OnClicked(object sender, EventArgs e) + { + Manager.SetActive(this); + } + + public override bool Equals(object obj) + { + return obj is DeviceIDItem item && + Name == item.Name && + ID == item.ID; + } + + public override int GetHashCode() + { + int hashCode = -1692744877; + hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Name); + hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(ID); + return hashCode; + } + } +} diff --git a/grapher/Models/Devices/DeviceIDManager.cs b/grapher/Models/Devices/DeviceIDManager.cs new file mode 100644 index 0000000..c50cda8 --- /dev/null +++ b/grapher/Models/Devices/DeviceIDManager.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Management; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace grapher.Models.Devices +{ + public class DeviceIDManager + { + public DeviceIDManager(ToolStripMenuItem deviceIDs) + { + DeviceIDsMenuItem = deviceIDs; + DeviceIDsMenuItem.Checked = false; + } + + public ToolStripMenuItem DeviceIDsMenuItem { get; } + + public string ID { get => SelectedDeviceID.ID; } + + public DeviceIDItem SelectedDeviceID { get; private set; } + + public Dictionary<string, DeviceIDItem> DeviceIDs { get; private set; } + + public static IEnumerable<(string, string)> GetDeviceIDs(string PNPClass = "Mouse") + { + ManagementObjectSearcher searcher = new ManagementObjectSearcher(new SelectQuery("Win32_PnPEntity")); + + foreach (ManagementObject obj in searcher.Get()) + { + if (obj["PNPClass"] != null && obj["PNPClass"].ToString().Equals(PNPClass) && obj["DeviceID"] != null) + { + string name = obj["Name"].ToString(); + + string devInstanceID = obj["DeviceID"].ToString(); + string devID = devInstanceID.Remove(devInstanceID.LastIndexOf('\\')); + + yield return (name, devID); + } + } + } + + public void SetActive(DeviceIDItem deviceIDItem) + { + if (SelectedDeviceID != null) + { + SelectedDeviceID.SetDeactivated(); + } + + SelectedDeviceID = deviceIDItem; + SelectedDeviceID.SetActivated(); + } + + public void Update(string devID) + { + DeviceIDsMenuItem.DropDownItems.Clear(); + + bool found = string.IsNullOrEmpty(devID); + + var anyDevice = new DeviceIDItem("Any", string.Empty, this); + + if (found) SetActive(anyDevice); + + foreach (var device in GetDeviceIDs().Distinct()) + { + var deviceItem = new DeviceIDItem(device.Item1, device.Item2, this); + if (!found && deviceItem.ID.Equals(devID)) + { + SetActive(deviceItem); + found = true; + } + } + + if (!found) + { + var deviceItem = new DeviceIDItem(string.Empty, devID, this); + deviceItem.SetDisconnected(); + SetActive(deviceItem); + } + } + + } +} diff --git a/grapher/Models/Mouse/MouseData.cs b/grapher/Models/Mouse/MouseData.cs index e59a969..5944fe4 100644 --- a/grapher/Models/Mouse/MouseData.cs +++ b/grapher/Models/Mouse/MouseData.cs @@ -8,7 +8,6 @@ namespace grapher.Models.Mouse public MouseData() { - Lock = new Object(); X = 0; Y = 0; } @@ -17,18 +16,13 @@ namespace grapher.Models.Mouse #region Properties - public Object Lock { get; } - private int X { get; set; } private int Y { get; set; } public void Set(int x, int y) { - lock (Lock) - { - X = x; - Y = y; - } + X = x; + Y = y; } #endregion Properties @@ -37,11 +31,8 @@ namespace grapher.Models.Mouse public void Get(out int x, out int y) { - lock (Lock) - { - x = X; - y = Y; - } + x = X; + y = Y; } #endregion Methods diff --git a/grapher/Models/Mouse/MouseWatcher.cs b/grapher/Models/Mouse/MouseWatcher.cs index 3cc8bd0..163829f 100644 --- a/grapher/Models/Mouse/MouseWatcher.cs +++ b/grapher/Models/Mouse/MouseWatcher.cs @@ -1,5 +1,6 @@ using grapher.Models.Serialized; using System; +using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using System.Windows.Forms; @@ -398,7 +399,11 @@ namespace grapher.Models.Mouse /// <summary>If set, the application-defined keyboard device hotkeys are not handled. However, the system hotkeys; for example, ALT+TAB and CTRL+ALT+DEL, are still handled. By default, all keyboard hotkeys are handled. NoHotKeys can be specified even if NoLegacy is not specified and WindowHandle is NULL.</summary> NoHotKeys = 0x00000200, /// <summary>If set, application keys are handled. NoLegacy must be specified. Keyboard only.</summary> - AppKeys = 0x00000400 + AppKeys = 0x00000400, + /// <summary>If set, this enables the caller to receive input in the background only if the foreground application does not process it. In other words, if the foreground application is not registered for raw input, then the background application that is registered will receive the input.</summary> + ExInputSink = 0x00001000, + /// <summary>If set, this enables the caller to receive WM_INPUT_DEVICE_CHANGE notifications for device arrival and device removal.</summary> + DevNotify = 0x00002000 } /// <summary>Value type for raw input devices.</summary> @@ -686,12 +691,13 @@ namespace grapher.Models.Mouse AccelCharts = accelCharts; SettingsManager = setMngr; MouseData = new MouseData(); + DeviceHandles = new List<IntPtr>(); RAWINPUTDEVICE device = new RAWINPUTDEVICE(); device.WindowHandle = ContainingForm.Handle; device.UsagePage = HIDUsagePage.Generic; device.Usage = HIDUsage.Mouse; - device.Flags = RawInputDeviceFlags.InputSink; + device.Flags = RawInputDeviceFlags.InputSink | RawInputDeviceFlags.DevNotify; RAWINPUTDEVICE[] devices = new RAWINPUTDEVICE[1]; devices[0] = device; @@ -716,6 +722,10 @@ namespace grapher.Models.Mouse private Stopwatch Stopwatch { get; } + private List<IntPtr> DeviceHandles { get; } + + private bool AnyDevice { get; set; } + private double PollTime { get => 1000 / SettingsManager.PollRateField.Data; @@ -725,6 +735,16 @@ namespace grapher.Models.Mouse #region Methods + public void UpdateHandles(string devID) + { + DeviceHandles.Clear(); + AnyDevice = string.IsNullOrEmpty(devID); + if (!AnyDevice) + { + RawInputInterop.AddHandlesFromID(devID, DeviceHandles); + } + } + public void UpdateLastMove() { MouseData.Get(out var x, out var y); @@ -733,15 +753,14 @@ namespace grapher.Models.Mouse public void ReadMouseMove(Message message) { - RawInput rawInput = new RawInput(); - int outSize = 0; + RawInput rawInput; int size = Marshal.SizeOf(typeof(RawInput)); - - outSize = GetRawInputData((IntPtr)message.LParam, RawInputCommand.Input, out rawInput, ref size, Marshal.SizeOf(typeof(RAWINPUTHEADER))); + _ = GetRawInputData(message.LParam, RawInputCommand.Input, out rawInput, ref size, Marshal.SizeOf(typeof(RAWINPUTHEADER))); bool relative = !rawInput.Data.Mouse.Flags.HasFlag(RawMouseFlags.MoveAbsolute); + bool deviceMatch = AnyDevice || DeviceHandles.Contains(rawInput.Header.Device); - if (relative && (rawInput.Data.Mouse.LastX != 0 || rawInput.Data.Mouse.LastY != 0)) + if (relative && deviceMatch && (rawInput.Data.Mouse.LastX != 0 || rawInput.Data.Mouse.LastY != 0)) { var time = Stopwatch.Elapsed.TotalMilliseconds; Stopwatch.Restart(); diff --git a/grapher/Models/Mouse/PointData.cs b/grapher/Models/Mouse/PointData.cs index e3f44ea..87bfc62 100644 --- a/grapher/Models/Mouse/PointData.cs +++ b/grapher/Models/Mouse/PointData.cs @@ -8,7 +8,6 @@ namespace grapher.Models.Mouse public PointData() { - Lock = new Object(); X = new double[] { 0.01 }; Y = new double[] { 0.01 }; } @@ -17,18 +16,13 @@ namespace grapher.Models.Mouse #region Properties - public Object Lock { get; } - private double[] X { get; set; } private double[] Y { get; set; } public void Set(double x, double y) { - lock(Lock) - { - X[0] = x; - Y[0] = y; - } + X[0] = x; + Y[0] = y; } #endregion Properties @@ -37,11 +31,8 @@ namespace grapher.Models.Mouse public void Get(out double[] x, out double[] y) { - lock(Lock) - { x = X; y = Y; - } } #endregion Methods diff --git a/grapher/Models/Serialized/RawAccelSettings.cs b/grapher/Models/Serialized/RawAccelSettings.cs index dcaf864..f4fb1e2 100644 --- a/grapher/Models/Serialized/RawAccelSettings.cs +++ b/grapher/Models/Serialized/RawAccelSettings.cs @@ -125,7 +125,8 @@ namespace grapher.Models.Serialized bool wholeOrNoY = accelSettings.combineMagnitudes || accelSettings.modes.y == AccelMode.noaccel; - return accelSettings.sensitivity.x == 1 && + return string.IsNullOrEmpty(accelSettings.deviceID) && + accelSettings.sensitivity.x == 1 && accelSettings.sensitivity.y == 1 && accelSettings.directionalMultipliers.x <= 0 && accelSettings.directionalMultipliers.y <= 0 && diff --git a/grapher/Models/Serialized/SettingsManager.cs b/grapher/Models/Serialized/SettingsManager.cs index 41ebcb5..40652dd 100644 --- a/grapher/Models/Serialized/SettingsManager.cs +++ b/grapher/Models/Serialized/SettingsManager.cs @@ -3,6 +3,8 @@ using System; using System.Windows.Forms; using System.Threading; using System.Text; +using System.Drawing; +using grapher.Models.Devices; namespace grapher.Models.Serialized { @@ -16,7 +18,8 @@ namespace grapher.Models.Serialized Field pollRateField, ToolStripMenuItem autoWrite, ToolStripMenuItem showLastMouseMove, - ToolStripMenuItem showVelocityAndGain) + ToolStripMenuItem showVelocityAndGain, + DeviceIDManager deviceIDManager) { ActiveAccel = activeAccel; DpiField = dpiField; @@ -24,6 +27,7 @@ namespace grapher.Models.Serialized AutoWriteMenuItem = autoWrite; ShowLastMouseMoveMenuItem = showLastMouseMove; ShowVelocityAndGainMoveMenuItem = showVelocityAndGain; + DeviceIDManager = deviceIDManager; } #endregion Constructors @@ -38,6 +42,8 @@ namespace grapher.Models.Serialized public Field PollRateField { get; private set; } + public DeviceIDManager DeviceIDManager { get; } + private ToolStripMenuItem AutoWriteMenuItem { get; set; } private ToolStripMenuItem ShowLastMouseMoveMenuItem { get; set; } diff --git a/grapher/grapher.csproj b/grapher/grapher.csproj index 88e7752..8673325 100644 --- a/grapher/grapher.csproj +++ b/grapher/grapher.csproj @@ -59,6 +59,7 @@ </Reference> <Reference Include="System" /> <Reference Include="System.Core" /> + <Reference Include="System.Management" /> <Reference Include="System.Windows.Forms.DataVisualization" /> <Reference Include="System.Xml.Linq" /> <Reference Include="System.Data.DataSetExtensions" /> @@ -80,6 +81,12 @@ <Compile Include="Constants\Constants.cs" /> <Compile Include="Layouts\MotivityLayout.cs" /> <Compile Include="Layouts\NaturalGainLayout.cs" /> + <Compile Include="MessageDialog.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="MessageDialog.Designer.cs"> + <DependentUpon>MessageDialog.cs</DependentUpon> + </Compile> <Compile Include="Models\AccelGUIFactory.cs" /> <Compile Include="Models\Calculations\AccelCalculator.cs" /> <Compile Include="Models\Calculations\AccelChartData.cs" /> @@ -95,6 +102,8 @@ <Compile Include="Models\Charts\EstimatedPoints.cs" /> <Compile Include="Models\Charts\ChartState\XYOneGraphState.cs" /> <Compile Include="Models\Charts\ChartState\XYTwoGraphState.cs" /> + <Compile Include="Models\Devices\DeviceIDItem.cs" /> + <Compile Include="Models\Devices\DeviceIDManager.cs" /> <Compile Include="Models\Mouse\MouseData.cs" /> <Compile Include="Models\Mouse\MouseWatcher.cs" /> <Compile Include="Models\Mouse\PointData.cs" /> @@ -134,6 +143,7 @@ <Compile Include="Properties\AssemblyInfo.cs" /> <EmbeddedResource Include="AboutBox.resx"> <DependentUpon>AboutBox.cs</DependentUpon> + <SubType>Designer</SubType> </EmbeddedResource> <EmbeddedResource Include="Form1.resx"> <DependentUpon>Form1.cs</DependentUpon> |