mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Merge branch 'main' of https://github.com/seerge/g-helper
This commit is contained in:
195
app/AsusMouseSettings.Designer.cs
generated
195
app/AsusMouseSettings.Designer.cs
generated
@@ -33,13 +33,20 @@
|
||||
labelProfile = new Label();
|
||||
panelPerformance = new Panel();
|
||||
panelPerformanceOther = new Panel();
|
||||
comboBoxLiftOffDistance = new UI.RComboBox();
|
||||
panelLiftOffDistance = new Panel();
|
||||
labelLiftOffDistance = new Label();
|
||||
labelAngleAdjustmentValue = new Label();
|
||||
comboBoxLiftOffDistance = new UI.RComboBox();
|
||||
panelDebounce = new Panel();
|
||||
labelButtonDebounce = new Label();
|
||||
sliderButtonDebounce = new UI.Slider();
|
||||
labelButtonDebounceValue = new Label();
|
||||
panelAngleSnapping = new Panel();
|
||||
sliderAngleAdjustment = new UI.Slider();
|
||||
checkBoxAngleSnapping = new CheckBox();
|
||||
comboBoxPollingRate = new UI.RComboBox();
|
||||
labelAngleAdjustmentValue = new Label();
|
||||
panelPollingRate = new Panel();
|
||||
labelPollingRate = new Label();
|
||||
comboBoxPollingRate = new UI.RComboBox();
|
||||
panelDPISettings = new Panel();
|
||||
sliderDPI = new UI.Slider();
|
||||
tableLayoutPanel1 = new TableLayoutPanel();
|
||||
@@ -101,6 +108,10 @@
|
||||
panelProfiles.SuspendLayout();
|
||||
panelPerformance.SuspendLayout();
|
||||
panelPerformanceOther.SuspendLayout();
|
||||
panelLiftOffDistance.SuspendLayout();
|
||||
panelDebounce.SuspendLayout();
|
||||
panelAngleSnapping.SuspendLayout();
|
||||
panelPollingRate.SuspendLayout();
|
||||
panelDPISettings.SuspendLayout();
|
||||
tableLayoutPanel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownCurrentDPI).BeginInit();
|
||||
@@ -171,27 +182,46 @@
|
||||
panelPerformance.Location = new Point(11, 68);
|
||||
panelPerformance.Name = "panelPerformance";
|
||||
panelPerformance.Padding = new Padding(0, 11, 0, 25);
|
||||
panelPerformance.Size = new Size(654, 408);
|
||||
panelPerformance.Size = new Size(654, 461);
|
||||
panelPerformance.TabIndex = 1;
|
||||
//
|
||||
// panelPerformanceOther
|
||||
//
|
||||
panelPerformanceOther.AutoSize = true;
|
||||
panelPerformanceOther.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelPerformanceOther.Controls.Add(comboBoxLiftOffDistance);
|
||||
panelPerformanceOther.Controls.Add(labelLiftOffDistance);
|
||||
panelPerformanceOther.Controls.Add(labelAngleAdjustmentValue);
|
||||
panelPerformanceOther.Controls.Add(sliderAngleAdjustment);
|
||||
panelPerformanceOther.Controls.Add(checkBoxAngleSnapping);
|
||||
panelPerformanceOther.Controls.Add(comboBoxPollingRate);
|
||||
panelPerformanceOther.Controls.Add(labelPollingRate);
|
||||
panelPerformanceOther.Controls.Add(panelLiftOffDistance);
|
||||
panelPerformanceOther.Controls.Add(panelDebounce);
|
||||
panelPerformanceOther.Controls.Add(panelAngleSnapping);
|
||||
panelPerformanceOther.Controls.Add(panelPollingRate);
|
||||
panelPerformanceOther.Dock = DockStyle.Top;
|
||||
panelPerformanceOther.Location = new Point(0, 240);
|
||||
panelPerformanceOther.Name = "panelPerformanceOther";
|
||||
panelPerformanceOther.Padding = new Padding(0, 11, 0, 11);
|
||||
panelPerformanceOther.Size = new Size(654, 143);
|
||||
panelPerformanceOther.Size = new Size(654, 196);
|
||||
panelPerformanceOther.TabIndex = 49;
|
||||
//
|
||||
// panelLiftOffDistance
|
||||
//
|
||||
panelLiftOffDistance.AutoSize = true;
|
||||
panelLiftOffDistance.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelLiftOffDistance.Controls.Add(labelLiftOffDistance);
|
||||
panelLiftOffDistance.Controls.Add(comboBoxLiftOffDistance);
|
||||
panelLiftOffDistance.Dock = DockStyle.Top;
|
||||
panelLiftOffDistance.Location = new Point(0, 142);
|
||||
panelLiftOffDistance.Name = "panelLiftOffDistance";
|
||||
panelLiftOffDistance.Padding = new Padding(5);
|
||||
panelLiftOffDistance.Size = new Size(654, 43);
|
||||
panelLiftOffDistance.TabIndex = 56;
|
||||
//
|
||||
// labelLiftOffDistance
|
||||
//
|
||||
labelLiftOffDistance.Location = new Point(5, 5);
|
||||
labelLiftOffDistance.Margin = new Padding(6, 0, 6, 0);
|
||||
labelLiftOffDistance.Name = "labelLiftOffDistance";
|
||||
labelLiftOffDistance.Size = new Size(348, 33);
|
||||
labelLiftOffDistance.TabIndex = 48;
|
||||
labelLiftOffDistance.Text = "Lift Off Distance";
|
||||
//
|
||||
// comboBoxLiftOffDistance
|
||||
//
|
||||
comboBoxLiftOffDistance.BorderColor = Color.White;
|
||||
@@ -199,35 +229,77 @@
|
||||
comboBoxLiftOffDistance.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboBoxLiftOffDistance.FlatStyle = FlatStyle.Flat;
|
||||
comboBoxLiftOffDistance.FormattingEnabled = true;
|
||||
comboBoxLiftOffDistance.Location = new Point(368, 99);
|
||||
comboBoxLiftOffDistance.Location = new Point(367, 5);
|
||||
comboBoxLiftOffDistance.Margin = new Padding(16, 0, 16, 0);
|
||||
comboBoxLiftOffDistance.Name = "comboBoxLiftOffDistance";
|
||||
comboBoxLiftOffDistance.Size = new Size(281, 33);
|
||||
comboBoxLiftOffDistance.TabIndex = 49;
|
||||
//
|
||||
// labelLiftOffDistance
|
||||
// panelDebounce
|
||||
//
|
||||
labelLiftOffDistance.Location = new Point(6, 99);
|
||||
labelLiftOffDistance.Margin = new Padding(6, 0, 6, 0);
|
||||
labelLiftOffDistance.Name = "labelLiftOffDistance";
|
||||
labelLiftOffDistance.Size = new Size(348, 33);
|
||||
labelLiftOffDistance.TabIndex = 48;
|
||||
labelLiftOffDistance.Text = "Lift Off Distance";
|
||||
panelDebounce.AutoSize = true;
|
||||
panelDebounce.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelDebounce.Controls.Add(labelButtonDebounce);
|
||||
panelDebounce.Controls.Add(sliderButtonDebounce);
|
||||
panelDebounce.Controls.Add(labelButtonDebounceValue);
|
||||
panelDebounce.Dock = DockStyle.Top;
|
||||
panelDebounce.Location = new Point(0, 95);
|
||||
panelDebounce.Name = "panelDebounce";
|
||||
panelDebounce.Padding = new Padding(5);
|
||||
panelDebounce.Size = new Size(654, 47);
|
||||
panelDebounce.TabIndex = 55;
|
||||
//
|
||||
// labelAngleAdjustmentValue
|
||||
// labelButtonDebounce
|
||||
//
|
||||
labelAngleAdjustmentValue.Location = new Point(598, 61);
|
||||
labelAngleAdjustmentValue.Margin = new Padding(6, 0, 6, 0);
|
||||
labelAngleAdjustmentValue.Name = "labelAngleAdjustmentValue";
|
||||
labelAngleAdjustmentValue.Size = new Size(48, 30);
|
||||
labelAngleAdjustmentValue.TabIndex = 47;
|
||||
labelAngleAdjustmentValue.Text = "0°";
|
||||
labelAngleAdjustmentValue.TextAlign = ContentAlignment.MiddleRight;
|
||||
labelButtonDebounce.Location = new Point(6, 7);
|
||||
labelButtonDebounce.Margin = new Padding(6, 0, 6, 0);
|
||||
labelButtonDebounce.Name = "labelButtonDebounce";
|
||||
labelButtonDebounce.Size = new Size(348, 33);
|
||||
labelButtonDebounce.TabIndex = 52;
|
||||
labelButtonDebounce.Text = "Button Response";
|
||||
//
|
||||
// sliderButtonDebounce
|
||||
//
|
||||
sliderButtonDebounce.AccessibleName = "DPI Slider";
|
||||
sliderButtonDebounce.Location = new Point(368, 9);
|
||||
sliderButtonDebounce.Max = 7;
|
||||
sliderButtonDebounce.Min = 2;
|
||||
sliderButtonDebounce.Name = "sliderButtonDebounce";
|
||||
sliderButtonDebounce.Size = new Size(213, 30);
|
||||
sliderButtonDebounce.Step = 1;
|
||||
sliderButtonDebounce.TabIndex = 50;
|
||||
sliderButtonDebounce.TabStop = false;
|
||||
sliderButtonDebounce.Text = "sliderBattery";
|
||||
sliderButtonDebounce.Value = 2;
|
||||
//
|
||||
// labelButtonDebounceValue
|
||||
//
|
||||
labelButtonDebounceValue.Location = new Point(590, 9);
|
||||
labelButtonDebounceValue.Margin = new Padding(6, 0, 6, 0);
|
||||
labelButtonDebounceValue.Name = "labelButtonDebounceValue";
|
||||
labelButtonDebounceValue.Size = new Size(60, 30);
|
||||
labelButtonDebounceValue.TabIndex = 51;
|
||||
labelButtonDebounceValue.Text = "12ms";
|
||||
labelButtonDebounceValue.TextAlign = ContentAlignment.MiddleRight;
|
||||
//
|
||||
// panelAngleSnapping
|
||||
//
|
||||
panelAngleSnapping.AutoSize = true;
|
||||
panelAngleSnapping.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelAngleSnapping.Controls.Add(sliderAngleAdjustment);
|
||||
panelAngleSnapping.Controls.Add(checkBoxAngleSnapping);
|
||||
panelAngleSnapping.Controls.Add(labelAngleAdjustmentValue);
|
||||
panelAngleSnapping.Dock = DockStyle.Top;
|
||||
panelAngleSnapping.Location = new Point(0, 51);
|
||||
panelAngleSnapping.Name = "panelAngleSnapping";
|
||||
panelAngleSnapping.Padding = new Padding(5);
|
||||
panelAngleSnapping.Size = new Size(654, 44);
|
||||
panelAngleSnapping.TabIndex = 54;
|
||||
//
|
||||
// sliderAngleAdjustment
|
||||
//
|
||||
sliderAngleAdjustment.AccessibleName = "DPI Slider";
|
||||
sliderAngleAdjustment.Location = new Point(397, 61);
|
||||
sliderAngleAdjustment.Location = new Point(396, 6);
|
||||
sliderAngleAdjustment.Max = 20;
|
||||
sliderAngleAdjustment.Min = -20;
|
||||
sliderAngleAdjustment.Name = "sliderAngleAdjustment";
|
||||
@@ -241,7 +313,7 @@
|
||||
// checkBoxAngleSnapping
|
||||
//
|
||||
checkBoxAngleSnapping.CheckAlign = ContentAlignment.MiddleRight;
|
||||
checkBoxAngleSnapping.Location = new Point(6, 61);
|
||||
checkBoxAngleSnapping.Location = new Point(5, 6);
|
||||
checkBoxAngleSnapping.Margin = new Padding(6, 0, 6, 0);
|
||||
checkBoxAngleSnapping.Name = "checkBoxAngleSnapping";
|
||||
checkBoxAngleSnapping.Size = new Size(384, 30);
|
||||
@@ -250,6 +322,38 @@
|
||||
checkBoxAngleSnapping.TextAlign = ContentAlignment.TopLeft;
|
||||
checkBoxAngleSnapping.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// labelAngleAdjustmentValue
|
||||
//
|
||||
labelAngleAdjustmentValue.Location = new Point(597, 6);
|
||||
labelAngleAdjustmentValue.Margin = new Padding(6, 0, 6, 0);
|
||||
labelAngleAdjustmentValue.Name = "labelAngleAdjustmentValue";
|
||||
labelAngleAdjustmentValue.Size = new Size(48, 30);
|
||||
labelAngleAdjustmentValue.TabIndex = 47;
|
||||
labelAngleAdjustmentValue.Text = "0°";
|
||||
labelAngleAdjustmentValue.TextAlign = ContentAlignment.MiddleRight;
|
||||
//
|
||||
// panelPollingRate
|
||||
//
|
||||
panelPollingRate.AutoSize = true;
|
||||
panelPollingRate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelPollingRate.Controls.Add(labelPollingRate);
|
||||
panelPollingRate.Controls.Add(comboBoxPollingRate);
|
||||
panelPollingRate.Dock = DockStyle.Top;
|
||||
panelPollingRate.Location = new Point(0, 11);
|
||||
panelPollingRate.Name = "panelPollingRate";
|
||||
panelPollingRate.Padding = new Padding(5);
|
||||
panelPollingRate.Size = new Size(654, 40);
|
||||
panelPollingRate.TabIndex = 53;
|
||||
//
|
||||
// labelPollingRate
|
||||
//
|
||||
labelPollingRate.Location = new Point(6, 5);
|
||||
labelPollingRate.Margin = new Padding(6, 0, 6, 0);
|
||||
labelPollingRate.Name = "labelPollingRate";
|
||||
labelPollingRate.Size = new Size(348, 30);
|
||||
labelPollingRate.TabIndex = 45;
|
||||
labelPollingRate.Text = "Polling Rate";
|
||||
//
|
||||
// comboBoxPollingRate
|
||||
//
|
||||
comboBoxPollingRate.BorderColor = Color.White;
|
||||
@@ -257,21 +361,12 @@
|
||||
comboBoxPollingRate.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboBoxPollingRate.FlatStyle = FlatStyle.Flat;
|
||||
comboBoxPollingRate.FormattingEnabled = true;
|
||||
comboBoxPollingRate.Location = new Point(368, 8);
|
||||
comboBoxPollingRate.Location = new Point(368, 2);
|
||||
comboBoxPollingRate.Margin = new Padding(16, 0, 16, 0);
|
||||
comboBoxPollingRate.Name = "comboBoxPollingRate";
|
||||
comboBoxPollingRate.Size = new Size(281, 33);
|
||||
comboBoxPollingRate.TabIndex = 44;
|
||||
//
|
||||
// labelPollingRate
|
||||
//
|
||||
labelPollingRate.Location = new Point(6, 9);
|
||||
labelPollingRate.Margin = new Padding(6, 0, 6, 0);
|
||||
labelPollingRate.Name = "labelPollingRate";
|
||||
labelPollingRate.Size = new Size(348, 30);
|
||||
labelPollingRate.TabIndex = 45;
|
||||
labelPollingRate.Text = "Polling Rate";
|
||||
//
|
||||
// panelDPISettings
|
||||
//
|
||||
panelDPISettings.AutoSize = true;
|
||||
@@ -561,7 +656,7 @@
|
||||
panelLighting.Controls.Add(panelLightingContent);
|
||||
panelLighting.Controls.Add(panelLightingHeader);
|
||||
panelLighting.Dock = DockStyle.Top;
|
||||
panelLighting.Location = new Point(11, 476);
|
||||
panelLighting.Location = new Point(11, 529);
|
||||
panelLighting.Name = "panelLighting";
|
||||
panelLighting.Padding = new Padding(0, 0, 0, 25);
|
||||
panelLighting.Size = new Size(654, 329);
|
||||
@@ -890,7 +985,7 @@
|
||||
panelEnergy.Controls.Add(labelAutoPowerOff);
|
||||
panelEnergy.Controls.Add(panelEnergyHeader);
|
||||
panelEnergy.Dock = DockStyle.Top;
|
||||
panelEnergy.Location = new Point(11, 805);
|
||||
panelEnergy.Location = new Point(11, 858);
|
||||
panelEnergy.Name = "panelEnergy";
|
||||
panelEnergy.Padding = new Padding(0, 0, 0, 25);
|
||||
panelEnergy.Size = new Size(654, 143);
|
||||
@@ -1071,7 +1166,7 @@
|
||||
panelBottomButtons.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelBottomButtons.Controls.Add(buttonSync);
|
||||
panelBottomButtons.Dock = DockStyle.Top;
|
||||
panelBottomButtons.Location = new Point(11, 948);
|
||||
panelBottomButtons.Location = new Point(11, 1001);
|
||||
panelBottomButtons.Name = "panelBottomButtons";
|
||||
panelBottomButtons.Size = new Size(654, 67);
|
||||
panelBottomButtons.TabIndex = 47;
|
||||
@@ -1144,7 +1239,7 @@
|
||||
AutoScroll = true;
|
||||
AutoSize = true;
|
||||
AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
ClientSize = new Size(676, 1072);
|
||||
ClientSize = new Size(676, 1183);
|
||||
Controls.Add(panelBottomButtons);
|
||||
Controls.Add(panelEnergy);
|
||||
Controls.Add(panelLighting);
|
||||
@@ -1164,6 +1259,11 @@
|
||||
panelPerformance.ResumeLayout(false);
|
||||
panelPerformance.PerformLayout();
|
||||
panelPerformanceOther.ResumeLayout(false);
|
||||
panelPerformanceOther.PerformLayout();
|
||||
panelLiftOffDistance.ResumeLayout(false);
|
||||
panelDebounce.ResumeLayout(false);
|
||||
panelAngleSnapping.ResumeLayout(false);
|
||||
panelPollingRate.ResumeLayout(false);
|
||||
panelDPISettings.ResumeLayout(false);
|
||||
panelDPISettings.PerformLayout();
|
||||
tableLayoutPanel1.ResumeLayout(false);
|
||||
@@ -1272,5 +1372,12 @@
|
||||
private TableLayoutPanel tableLayoutPanel2;
|
||||
private UI.RButton rButton1;
|
||||
private UI.RButton rButton2;
|
||||
private Label labelButtonDebounce;
|
||||
private Label labelButtonDebounceValue;
|
||||
private UI.Slider sliderButtonDebounce;
|
||||
private Panel panelPollingRate;
|
||||
private Panel panelAngleSnapping;
|
||||
private Panel panelLiftOffDistance;
|
||||
private Panel panelDebounce;
|
||||
}
|
||||
}
|
||||
@@ -45,6 +45,7 @@ namespace GHelper
|
||||
labelLiftOffDistance.Text = Properties.Strings.MouseLiftOffDistance;
|
||||
labelChargingState.Text = "(" + Properties.Strings.Charging + ")";
|
||||
labelProfile.Text = Properties.Strings.Profile;
|
||||
labelButtonDebounce.Text = Properties.Strings.MouseButtonResponse;
|
||||
|
||||
buttonLightingZoneLogo.Text = Properties.Strings.AuraZoneLogo;
|
||||
buttonLightingZoneScroll.Text = Properties.Strings.AuraZoneScroll;
|
||||
@@ -76,6 +77,8 @@ namespace GHelper
|
||||
sliderAngleAdjustment.ValueChanged += SliderAngleAdjustment_ValueChanged;
|
||||
sliderAngleAdjustment.MouseUp += SliderAngleAdjustment_MouseUp;
|
||||
comboBoxLiftOffDistance.DropDownClosed += ComboBoxLiftOffDistance_DropDownClosed;
|
||||
sliderButtonDebounce.ValueChanged += SliderButtonDebounce_ValueChanged;
|
||||
sliderButtonDebounce.MouseUp += SliderButtonDebounce_MouseUp;
|
||||
|
||||
buttonLightingColor.Click += ButtonLightingColor_Click;
|
||||
comboBoxLightingMode.DropDownClosed += ComboBoxLightingMode_DropDownClosed;
|
||||
@@ -100,6 +103,20 @@ namespace GHelper
|
||||
RefreshMouseData();
|
||||
}
|
||||
|
||||
private void SliderButtonDebounce_MouseUp(object? sender, MouseEventArgs e)
|
||||
{
|
||||
DebounceTime dbt = (DebounceTime)sliderButtonDebounce.Value;
|
||||
mouse.SetDebounce(dbt);
|
||||
}
|
||||
|
||||
private void SliderButtonDebounce_ValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
DebounceTime dbt = (DebounceTime)sliderButtonDebounce.Value;
|
||||
int time = mouse.DebounceTimeInMS(dbt);
|
||||
|
||||
labelButtonDebounceValue.Text = time + "ms";
|
||||
}
|
||||
|
||||
private void SwitchLightingZone(LightingZone zone)
|
||||
{
|
||||
if (!mouse.HasRGB())
|
||||
@@ -444,6 +461,11 @@ namespace GHelper
|
||||
numericUpDownCurrentDPI.Maximum = mouse.MaxDPI();
|
||||
numericUpDownCurrentDPI.Increment = mouse.DPIIncrements();
|
||||
|
||||
if (!mouse.HasDebounceSetting())
|
||||
{
|
||||
panelDebounce.Visible = false;
|
||||
}
|
||||
|
||||
|
||||
if (!mouse.HasDPIColors())
|
||||
{
|
||||
@@ -470,8 +492,7 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
comboBoxPollingRate.Visible = false;
|
||||
labelPollingRate.Visible = false;
|
||||
panelPollingRate.Visible = false;
|
||||
}
|
||||
|
||||
if (!mouse.HasAngleSnapping())
|
||||
@@ -485,6 +506,11 @@ namespace GHelper
|
||||
sliderAngleAdjustment.Visible = false;
|
||||
}
|
||||
|
||||
if (!mouse.HasAngleTuning() && !mouse.HasAngleSnapping())
|
||||
{
|
||||
panelAngleSnapping.Visible = false;
|
||||
}
|
||||
|
||||
if (mouse.HasLiftOffSetting())
|
||||
{
|
||||
comboBoxLiftOffDistance.Items.AddRange(new string[] {
|
||||
@@ -494,8 +520,7 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
comboBoxLiftOffDistance.Visible = false;
|
||||
labelLiftOffDistance.Visible = false;
|
||||
panelLiftOffDistance.Visible = false;
|
||||
}
|
||||
|
||||
if (mouse.DPIProfileCount() < 4)
|
||||
@@ -649,6 +674,11 @@ namespace GHelper
|
||||
{
|
||||
comboBoxLiftOffDistance.SelectedIndex = (int)mouse.LiftOffDistance;
|
||||
}
|
||||
|
||||
if (mouse.HasDebounceSetting())
|
||||
{
|
||||
sliderButtonDebounce.Value = (int)mouse.Debounce;
|
||||
}
|
||||
}
|
||||
|
||||
private void VisualizeBatteryState()
|
||||
|
||||
@@ -15,6 +15,17 @@ namespace GHelper.Peripherals.Mouse
|
||||
Never = 0xFF
|
||||
}
|
||||
|
||||
public enum DebounceTime
|
||||
{
|
||||
Disabled = 0x00, //?? not sure because mice with this setting have no "disabled". But the mouse accepts and stores 0x00 just fine
|
||||
MS12 = 0x02,
|
||||
MS16 = 0x03,
|
||||
MS20 = 0x04,
|
||||
MS24 = 0x05,
|
||||
MS28 = 0x06,
|
||||
MS32 = 0x07
|
||||
}
|
||||
|
||||
public enum PollingRate
|
||||
{
|
||||
PR125Hz = 0,
|
||||
@@ -168,6 +179,8 @@ namespace GHelper.Peripherals.Mouse
|
||||
public PollingRate PollingRate { get; protected set; }
|
||||
public bool AngleSnapping { get; protected set; }
|
||||
public short AngleAdjustmentDegrees { get; protected set; }
|
||||
public DebounceTime Debounce { get; protected set; }
|
||||
|
||||
|
||||
public AsusMouse(ushort vendorId, ushort productId, string path, bool wireless) : base(vendorId, productId)
|
||||
{
|
||||
@@ -372,6 +385,7 @@ namespace GHelper.Peripherals.Mouse
|
||||
ReadDPI();
|
||||
ReadPollingRate();
|
||||
ReadLiftOffDistance();
|
||||
ReadDebounce();
|
||||
ReadLightingSetting();
|
||||
}
|
||||
|
||||
@@ -809,6 +823,7 @@ namespace GHelper.Peripherals.Mouse
|
||||
{
|
||||
if (!CanChangeDPIProfile())
|
||||
{
|
||||
this.DpiProfile = profile;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1013,6 +1028,91 @@ namespace GHelper.Peripherals.Mouse
|
||||
this.LiftOffDistance = liftOffDistance;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Debounce
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
public virtual bool HasDebounceSetting()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual int DebounceTimeInMS(DebounceTime dbt)
|
||||
{
|
||||
switch (dbt)
|
||||
{
|
||||
case DebounceTime.MS12: return 12;
|
||||
case DebounceTime.MS16: return 16;
|
||||
case DebounceTime.MS20: return 20;
|
||||
case DebounceTime.MS24: return 24;
|
||||
case DebounceTime.MS28: return 28;
|
||||
case DebounceTime.MS32: return 32;
|
||||
|
||||
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual byte[] GetReadDebouncePacket()
|
||||
{
|
||||
return new byte[] { 0x00, 0x12, 0x04, 0x00 };
|
||||
}
|
||||
|
||||
|
||||
protected virtual byte[] GetUpdateDebouncePacket(DebounceTime debounce)
|
||||
{
|
||||
return new byte[] { 0x00, 0x51, 0x31, 0x05, 0x00, ((byte)debounce) };
|
||||
}
|
||||
|
||||
protected virtual DebounceTime ParseDebounce(byte[] packet)
|
||||
{
|
||||
if (packet[1] != 0x12 || packet[2] != 0x04 || packet[3] != 0x00)
|
||||
{
|
||||
return DebounceTime.MS12;
|
||||
}
|
||||
|
||||
if (packet[15] < 0x02)
|
||||
{
|
||||
return DebounceTime.MS12;
|
||||
}
|
||||
|
||||
if (packet[15] > 0x07)
|
||||
{
|
||||
return DebounceTime.MS32;
|
||||
}
|
||||
|
||||
return (DebounceTime)packet[15];
|
||||
}
|
||||
|
||||
public void ReadDebounce()
|
||||
{
|
||||
if (!HasDebounceSetting())
|
||||
{
|
||||
return;
|
||||
}
|
||||
byte[]? response = WriteForResponse(GetReadDebouncePacket());
|
||||
if (response is null) return;
|
||||
|
||||
Debounce = ParseDebounce(response);
|
||||
|
||||
|
||||
Logger.WriteLine(GetDisplayName() + ": Read Debouce Setting: " + Debounce);
|
||||
}
|
||||
|
||||
public void SetDebounce(DebounceTime debounce)
|
||||
{
|
||||
if (!HasDebounceSetting())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
WriteForResponse(GetUpdateDebouncePacket(debounce));
|
||||
FlushSettings();
|
||||
|
||||
Logger.WriteLine(GetDisplayName() + ": Set Debouce to " + debounce);
|
||||
this.Debounce = debounce;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// RGB
|
||||
// ------------------------------------------------------------------------------
|
||||
@@ -1208,7 +1308,7 @@ namespace GHelper.Peripherals.Mouse
|
||||
return setting;
|
||||
}
|
||||
|
||||
public void ReadLightingSetting()
|
||||
public virtual void ReadLightingSetting()
|
||||
{
|
||||
if (!HasRGB())
|
||||
{
|
||||
|
||||
@@ -50,6 +50,11 @@ namespace GHelper.Peripherals.Mouse.Models
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasDebounceSetting()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasLiftOffSetting()
|
||||
{
|
||||
return true;
|
||||
|
||||
@@ -45,6 +45,11 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasDebounceSetting()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasLiftOffSetting()
|
||||
{
|
||||
return true;
|
||||
|
||||
@@ -102,6 +102,10 @@
|
||||
{
|
||||
return 100;
|
||||
}
|
||||
public override bool HasDebounceSetting()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool CanChangeDPIProfile()
|
||||
{
|
||||
|
||||
226
app/Peripherals/Mouse/Models/StrixImpactIIWireless.cs
Normal file
226
app/Peripherals/Mouse/Models/StrixImpactIIWireless.cs
Normal file
@@ -0,0 +1,226 @@
|
||||
namespace GHelper.Peripherals.Mouse.Models
|
||||
{
|
||||
//P513
|
||||
public class StrixImpactIIWireless : AsusMouse
|
||||
{
|
||||
public StrixImpactIIWireless() : base(0x0B05, 0x1949, "mi_00", true)
|
||||
{
|
||||
}
|
||||
|
||||
protected StrixImpactIIWireless(ushort vendorId, bool wireless) : base(0x0B05, vendorId, "mi_00", wireless)
|
||||
{
|
||||
}
|
||||
|
||||
public override int DPIProfileCount()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
public override string GetDisplayName()
|
||||
{
|
||||
return "ROG Strix Impact II (Wireless)";
|
||||
}
|
||||
|
||||
|
||||
public override PollingRate[] SupportedPollingrates()
|
||||
{
|
||||
return new PollingRate[] {
|
||||
PollingRate.PR125Hz,
|
||||
PollingRate.PR250Hz,
|
||||
PollingRate.PR500Hz,
|
||||
PollingRate.PR1000Hz
|
||||
};
|
||||
}
|
||||
|
||||
public override int ProfileCount()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
public override int MaxDPI()
|
||||
{
|
||||
return 16_000;
|
||||
}
|
||||
|
||||
public override bool HasLiftOffSetting()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasRGB()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasAutoPowerOff()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasAngleSnapping()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasAngleTuning()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool HasLowBatteryWarning()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasDPIColors()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool IsLightingModeSupported(LightingMode lightingMode)
|
||||
{
|
||||
return lightingMode == LightingMode.Static
|
||||
|| lightingMode == LightingMode.Breathing
|
||||
|| lightingMode == LightingMode.ColorCycle
|
||||
|| lightingMode == LightingMode.React
|
||||
|| lightingMode == LightingMode.BatteryState
|
||||
|| lightingMode == LightingMode.Off;
|
||||
}
|
||||
|
||||
public override LightingZone[] SupportedLightingZones()
|
||||
{
|
||||
return new LightingZone[] { LightingZone.Logo, LightingZone.Scrollwheel };
|
||||
}
|
||||
|
||||
//Has 25% increments
|
||||
protected override int ParseBattery(byte[] packet)
|
||||
{
|
||||
if (packet[1] == 0x12 && packet[2] == 0x07)
|
||||
{
|
||||
return packet[5] * 25;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
public override int DPIIncrements()
|
||||
{
|
||||
return 100;
|
||||
}
|
||||
|
||||
public override bool CanChangeDPIProfile()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override byte[] GetUpdateEnergySettingsPacket(int lowBatteryWarning, PowerOffSetting powerOff)
|
||||
{
|
||||
return base.GetUpdateEnergySettingsPacket(lowBatteryWarning / 25, powerOff);
|
||||
}
|
||||
|
||||
protected override int ParseLowBatteryWarning(byte[] packet)
|
||||
{
|
||||
int lowBat = base.ParseLowBatteryWarning(packet);
|
||||
|
||||
return lowBat * 25;
|
||||
}
|
||||
|
||||
protected override LiftOffDistance ParseLiftOffDistance(byte[] packet)
|
||||
{
|
||||
if (packet[1] != 0x12 || packet[2] != 0x06)
|
||||
{
|
||||
return LiftOffDistance.Low;
|
||||
}
|
||||
|
||||
return (LiftOffDistance)packet[5];
|
||||
}
|
||||
|
||||
protected override byte[] GetUpdateLiftOffDistancePacket(LiftOffDistance liftOffDistance)
|
||||
{
|
||||
return new byte[] { 0x00, 0x51, 0x35, 0x00, 0x00, ((byte)liftOffDistance) };
|
||||
}
|
||||
|
||||
public override int MaxBrightness()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
public override bool HasDebounceSetting()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override byte IndexForLightingMode(LightingMode lightingMode)
|
||||
{
|
||||
if (lightingMode == LightingMode.Off)
|
||||
{
|
||||
return 0xFF;
|
||||
}
|
||||
return ((byte)lightingMode);
|
||||
}
|
||||
|
||||
protected override byte[] GetReadLightingModePacket(LightingZone zone)
|
||||
{
|
||||
return new byte[] { 0x00, 0x12, 0x03, 0x00 };
|
||||
}
|
||||
|
||||
protected LightingSetting? ParseLightingSetting(byte[] packet, LightingZone zone)
|
||||
{
|
||||
if (packet[1] != 0x12 || packet[2] != 0x03)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
int offset = 5 + (((int)zone) * 5);
|
||||
|
||||
LightingSetting setting = new LightingSetting();
|
||||
|
||||
setting.LightingMode = LightingModeForIndex(packet[offset + 0]);
|
||||
setting.Brightness = packet[offset + 1];
|
||||
|
||||
setting.RGBColor = Color.FromArgb(packet[offset + 2], packet[offset + 3], packet[offset + 4]);
|
||||
|
||||
|
||||
return setting;
|
||||
}
|
||||
|
||||
public override void ReadLightingSetting()
|
||||
{
|
||||
if (!HasRGB())
|
||||
{
|
||||
return;
|
||||
}
|
||||
//Mouse sends all lighting zones in one response
|
||||
//00 12 03 00 00 [00 04 ff 00 80] [00 04 00 ff ff] [00 04 ff ff ff] 00 00 00 00 00 00 00 00 00 00 00 00 00 0
|
||||
//No idea what the 3rd zone is as the mouse only has 2
|
||||
byte[]? response = WriteForResponse(GetReadLightingModePacket(LightingZone.All));
|
||||
if (response is null) return;
|
||||
|
||||
LightingZone[] lz = SupportedLightingZones();
|
||||
for (int i = 0; i < lz.Length; ++i)
|
||||
{
|
||||
LightingSetting? ls = ParseLightingSetting(response, lz[i]);
|
||||
if (ls is null)
|
||||
{
|
||||
Logger.WriteLine(GetDisplayName() + ": Failed to read RGB Setting for Zone " + lz[i].ToString());
|
||||
continue;
|
||||
}
|
||||
|
||||
Logger.WriteLine(GetDisplayName() + ": Read RGB Setting for Zone " + lz[i].ToString() + ": " + ls.ToString());
|
||||
LightingSetting[i] = ls;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class StrixImpactIIWirelessWired : StrixImpactIIWireless
|
||||
{
|
||||
public StrixImpactIIWirelessWired() : base(0x1947, false)
|
||||
{
|
||||
}
|
||||
|
||||
public override string GetDisplayName()
|
||||
{
|
||||
return "ROG Strix Impact II (Wired)";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -42,6 +42,11 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool HasDebounceSetting()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasAutoPowerOff()
|
||||
{
|
||||
return true;
|
||||
|
||||
@@ -190,6 +190,8 @@ namespace GHelper.Peripherals
|
||||
DetectMouse(new ROGKerisWireless());
|
||||
DetectMouse(new ROGKerisWirelessWired());
|
||||
DetectMouse(new TUFM4Wirelss());
|
||||
DetectMouse(new StrixImpactIIWireless());
|
||||
DetectMouse(new StrixImpactIIWirelessWired());
|
||||
}
|
||||
|
||||
public static void DetectMouse(AsusMouse am)
|
||||
|
||||
9
app/Properties/Strings.Designer.cs
generated
9
app/Properties/Strings.Designer.cs
generated
@@ -1061,6 +1061,15 @@ namespace GHelper.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Button Response.
|
||||
/// </summary>
|
||||
internal static string MouseButtonResponse {
|
||||
get {
|
||||
return ResourceManager.GetString("MouseButtonResponse", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Lift Off Distance.
|
||||
/// </summary>
|
||||
|
||||
@@ -452,6 +452,9 @@ Trotzdem fortfahren?</value>
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>Automatisch abschalten nach</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Lift Off Distance</value>
|
||||
</data>
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
<value>Rápido</value>
|
||||
</data>
|
||||
<data name="AuraLightingMode" xml:space="preserve">
|
||||
<value>Lighting Mode</value>
|
||||
<value>Modo de iluminación</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>Normal</value>
|
||||
@@ -208,7 +208,7 @@
|
||||
<value>Estroboscópico</value>
|
||||
</data>
|
||||
<data name="AuraZoneAll" xml:space="preserve">
|
||||
<value>All</value>
|
||||
<value>Todo</value>
|
||||
</data>
|
||||
<data name="AuraZoneDock" xml:space="preserve">
|
||||
<value>Dock</value>
|
||||
@@ -217,7 +217,7 @@
|
||||
<value>Logo</value>
|
||||
</data>
|
||||
<data name="AuraZoneScroll" xml:space="preserve">
|
||||
<value>Scrollwheel</value>
|
||||
<value>Rueda de desplazamiento</value>
|
||||
</data>
|
||||
<data name="AuraZoneUnderglow" xml:space="preserve">
|
||||
<value>Underglow</value>
|
||||
|
||||
@@ -452,6 +452,9 @@ Voulez-vous continuer ?</value>
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>Arrêt automatique après</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Lift Off Distance</value>
|
||||
</data>
|
||||
|
||||
@@ -452,6 +452,9 @@
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>Auto Power Off After</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Lift Off Distance</value>
|
||||
</data>
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
<value>Ratukas</value>
|
||||
</data>
|
||||
<data name="AuraZoneUnderglow" xml:space="preserve">
|
||||
<value>Underglow</value>
|
||||
<value>Apatinis apšvietimas</value>
|
||||
</data>
|
||||
<data name="AutoApply" xml:space="preserve">
|
||||
<value>Taikyti automatiškai</value>
|
||||
@@ -452,6 +452,9 @@ Vis tiek norite tęsti?</value>
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>Automatiškai išjungti po</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Pakilimo atstumas</value>
|
||||
</data>
|
||||
|
||||
@@ -452,6 +452,9 @@ Do you still want to continue?</value>
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>Auto Power Off After</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Lift Off Distance</value>
|
||||
</data>
|
||||
|
||||
@@ -452,6 +452,9 @@ Do you still want to continue?</value>
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>Auto Power Off After</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Lift Off Distance</value>
|
||||
</data>
|
||||
|
||||
@@ -452,6 +452,9 @@
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>Auto Power Off After</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Lift Off Distance</value>
|
||||
</data>
|
||||
|
||||
@@ -452,6 +452,9 @@ Do you still want to continue?</value>
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>Auto Power Off After</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Lift Off Distance</value>
|
||||
</data>
|
||||
|
||||
@@ -452,6 +452,9 @@ Do you still want to continue?</value>
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>Auto Power Off After</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Lift Off Distance</value>
|
||||
</data>
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
<value>快速</value>
|
||||
</data>
|
||||
<data name="AuraLightingMode" xml:space="preserve">
|
||||
<value>Lighting Mode</value>
|
||||
<value>灯效模式</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>正常</value>
|
||||
@@ -208,7 +208,7 @@
|
||||
<value>闪烁</value>
|
||||
</data>
|
||||
<data name="AuraZoneAll" xml:space="preserve">
|
||||
<value>All</value>
|
||||
<value>全部</value>
|
||||
</data>
|
||||
<data name="AuraZoneDock" xml:space="preserve">
|
||||
<value>Dock</value>
|
||||
@@ -217,7 +217,7 @@
|
||||
<value>Logo</value>
|
||||
</data>
|
||||
<data name="AuraZoneScroll" xml:space="preserve">
|
||||
<value>Scrollwheel</value>
|
||||
<value>滚轮</value>
|
||||
</data>
|
||||
<data name="AuraZoneUnderglow" xml:space="preserve">
|
||||
<value>Underglow</value>
|
||||
@@ -336,7 +336,7 @@
|
||||
<value>风扇</value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>风扇 + 电源</value>
|
||||
<value>风扇 + 功率</value>
|
||||
</data>
|
||||
<data name="FnLock" xml:space="preserve">
|
||||
<value>打开FnLock (无需按下FN使用FN+(F1-F12)热键)</value>
|
||||
@@ -452,6 +452,9 @@
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>自动关闭时间</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>静默高度</value>
|
||||
</data>
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
<value>快速</value>
|
||||
</data>
|
||||
<data name="AuraLightingMode" xml:space="preserve">
|
||||
<value>Lighting Mode</value>
|
||||
<value>燈效模式</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>正常</value>
|
||||
@@ -208,7 +208,7 @@
|
||||
<value>閃爍</value>
|
||||
</data>
|
||||
<data name="AuraZoneAll" xml:space="preserve">
|
||||
<value>All</value>
|
||||
<value>全部</value>
|
||||
</data>
|
||||
<data name="AuraZoneDock" xml:space="preserve">
|
||||
<value>Dock</value>
|
||||
@@ -217,7 +217,7 @@
|
||||
<value>Logo</value>
|
||||
</data>
|
||||
<data name="AuraZoneScroll" xml:space="preserve">
|
||||
<value>Scrollwheel</value>
|
||||
<value>滾輪</value>
|
||||
</data>
|
||||
<data name="AuraZoneUnderglow" xml:space="preserve">
|
||||
<value>Underglow</value>
|
||||
@@ -452,6 +452,9 @@
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>自動關閉電源</value>
|
||||
</data>
|
||||
<data name="MouseButtonResponse" xml:space="preserve">
|
||||
<value>Button Response</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>響應高度(LOD)</value>
|
||||
</data>
|
||||
|
||||
Reference in New Issue
Block a user