diff --git a/app/Keyboard.Designer.cs b/app/Keyboard.Designer.cs index e48598ff..a0bdb733 100644 --- a/app/Keyboard.Designer.cs +++ b/app/Keyboard.Designer.cs @@ -50,6 +50,7 @@ namespace GHelper groupOther = new GroupBox(); checkKeyboardAuto = new CheckBox(); checkTopmost = new CheckBox(); + checkNoOverdrive = new CheckBox(); groupBox1.SuspendLayout(); groupLight.SuspendLayout(); groupOther.SuspendLayout(); @@ -234,12 +235,13 @@ namespace GHelper // // groupOther // + groupOther.Controls.Add(checkNoOverdrive); groupOther.Controls.Add(checkKeyboardAuto); groupOther.Controls.Add(checkTopmost); groupOther.Dock = DockStyle.Top; groupOther.Location = new Point(10, 556); groupOther.Name = "groupOther"; - groupOther.Size = new Size(756, 167); + groupOther.Size = new Size(756, 225); groupOther.TabIndex = 2; groupOther.TabStop = false; groupOther.Text = "Other"; @@ -264,6 +266,16 @@ namespace GHelper checkTopmost.Text = "Keep app window always on top"; checkTopmost.UseVisualStyleBackColor = true; // + // checkNoOverdrive + // + checkNoOverdrive.AutoSize = true; + checkNoOverdrive.Location = new Point(25, 156); + checkNoOverdrive.Name = "checkNoOverdrive"; + checkNoOverdrive.Size = new Size(307, 36); + checkNoOverdrive.TabIndex = 3; + checkNoOverdrive.Text = "Disable screen overdrive"; + checkNoOverdrive.UseVisualStyleBackColor = true; + // // Keyboard // AutoScaleDimensions = new SizeF(13F, 32F); @@ -312,5 +324,6 @@ namespace GHelper private GroupBox groupOther; private CheckBox checkTopmost; private CheckBox checkKeyboardAuto; + private CheckBox checkNoOverdrive; } } \ No newline at end of file diff --git a/app/Keyboard.cs b/app/Keyboard.cs index e8060e6a..687fbf39 100644 --- a/app/Keyboard.cs +++ b/app/Keyboard.cs @@ -84,9 +84,17 @@ namespace GHelper checkKeyboardAuto.Checked = (Program.config.getConfig("keyboard_auto") == 1); checkKeyboardAuto.CheckedChanged += CheckKeyboardAuto_CheckedChanged; + checkNoOverdrive.Checked = (Program.config.getConfig("no_overdrive") == 1); + checkNoOverdrive.CheckedChanged += CheckNoOverdrive_CheckedChanged; } + private void CheckNoOverdrive_CheckedChanged(object? sender, EventArgs e) + { + Program.config.setConfig("no_overdrive", (checkNoOverdrive.Checked ? 1 : 0)); + Program.settingsForm.AutoScreen(true); + } + private void CheckKeyboardAuto_CheckedChanged(object? sender, EventArgs e) { Program.config.setConfig("keyboard_auto", (checkKeyboardAuto.Checked ? 1 : 0)); diff --git a/app/Program.cs b/app/Program.cs index 37709b48..5532f38c 100644 --- a/app/Program.cs +++ b/app/Program.cs @@ -120,27 +120,22 @@ namespace GHelper - public static void SetAutoModes(bool wait = false) + public static void SetAutoModes() { if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAuto) < 2000) return; lastAuto = DateTimeOffset.Now.ToUnixTimeMilliseconds(); isPlugged = SystemInformation.PowerStatus.PowerLineStatus; - Logger.WriteLine("AutoSetting for " + isPlugged.ToString()); settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit")); + settingsForm.AutoPerformance(); - settingsForm.AutoPerformance(isPlugged); + bool switched = settingsForm.AutoGPUMode(); + if (!switched) settingsForm.AutoScreen(); - // waiting a bit before turning off dGPU - // if (wait && isPlugged != PowerLineStatus.Online) Thread.Sleep(3000); - - bool switched = settingsForm.AutoGPUMode(isPlugged); - if (!switched) settingsForm.AutoScreen(isPlugged); - - settingsForm.SetMatrix(isPlugged); + settingsForm.SetMatrix(); } private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) @@ -148,8 +143,8 @@ namespace GHelper if (SystemInformation.PowerStatus.PowerLineStatus == isPlugged) return; Logger.WriteLine("Windows - Power Mode Changed"); - settingsForm.AutoKeyboard(SystemInformation.PowerStatus.PowerLineStatus); - SetAutoModes(true); + settingsForm.AutoKeyboard(); + SetAutoModes(); } diff --git a/app/Settings.cs b/app/Settings.cs index d028a84f..d98dd839 100644 --- a/app/Settings.cs +++ b/app/Settings.cs @@ -204,7 +204,7 @@ namespace GHelper private void Button120Hz_MouseHover(object? sender, EventArgs e) { - labelTipScreen.Text = "Max refresh rate + screen overdrive for lower latency"; + labelTipScreen.Text = "Max refresh rate for lower latency"; } private void Button60Hz_MouseHover(object? sender, EventArgs e) @@ -252,14 +252,14 @@ namespace GHelper { Program.config.setConfig("gpu_auto", (Program.config.getConfig("gpu_auto") == 1) ? 0 : 1); VisualiseGPUMode(); - AutoGPUMode(SystemInformation.PowerStatus.PowerLineStatus); + AutoGPUMode(); } private void ButtonScreenAuto_Click(object? sender, EventArgs e) { Program.config.setConfig("screen_auto", 1); InitScreen(); - AutoScreen(SystemInformation.PowerStatus.PowerLineStatus); + AutoScreen(); } protected override void WndProc(ref Message m) @@ -458,7 +458,7 @@ namespace GHelper SetMatrix(); } - public void SetMatrix(PowerLineStatus Plugged = PowerLineStatus.Online) + public void SetMatrix() { if (mat is null) return; @@ -481,7 +481,7 @@ namespace GHelper mat.SetProvider(); - if (brightness == 0 || (auto && Plugged != PowerLineStatus.Online)) + if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)) { mat.SetDisplayState(false); } @@ -700,8 +700,12 @@ namespace GHelper } if (overdrive >= 0) + { + if (Program.config.getConfig("no_overdrive") == 1) overdrive = 0; Program.wmi.DeviceSet(ASUSWmi.ScreenOverdrive, overdrive); + } + if (miniled >= 0) { Program.wmi.DeviceSet(ASUSWmi.ScreenMiniled, miniled); @@ -719,8 +723,10 @@ namespace GHelper int maxFrequency = NativeMethods.GetRefreshRate(true); bool screenAuto = (Program.config.getConfig("screen_auto") == 1); + bool overdriveSetting = (Program.config.getConfig("no_overdrive") != 1); int overdrive = Program.wmi.DeviceGet(ASUSWmi.ScreenOverdrive); + int miniled = Program.wmi.DeviceGet(ASUSWmi.ScreenMiniled); bool screenEnabled = (frequency >= 0); @@ -753,7 +759,7 @@ namespace GHelper if (maxFrequency > 60) { - button120Hz.Text = maxFrequency.ToString() + "Hz + OD"; + button120Hz.Text = maxFrequency.ToString() + "Hz" + (overdriveSetting ? " + OD" : ""); } if (miniled >= 0) @@ -998,11 +1004,11 @@ namespace GHelper } - public void AutoKeyboard(PowerLineStatus Plugged = PowerLineStatus.Online) + public void AutoKeyboard() { if (Program.config.getConfig("keyboard_auto") != 1) return; - if (Plugged == PowerLineStatus.Online) + if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online) Program.wmi.DeviceSet(ASUSWmi.UniversalControl, ASUSWmi.KB_Light_Up); else Program.wmi.DeviceSet(ASUSWmi.UniversalControl, ASUSWmi.KB_Light_Down); @@ -1010,8 +1016,10 @@ namespace GHelper } - public void AutoPerformance(PowerLineStatus Plugged = PowerLineStatus.Online) + public void AutoPerformance() { + var Plugged = SystemInformation.PowerStatus.PowerLineStatus; + int mode = Program.config.getConfig("performance_" + (int)Plugged); if (mode != -1) SetPerformanceMode(mode, true); @@ -1020,11 +1028,11 @@ namespace GHelper } - public void AutoScreen(PowerLineStatus Plugged = PowerLineStatus.Online) + public void AutoScreen(bool force = false) { - if (Program.config.getConfig("screen_auto") != 1) return; + if (!force && Program.config.getConfig("screen_auto") != 1) return; - if (Plugged == PowerLineStatus.Online) + if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online) SetScreen(1000, 1); else SetScreen(60, 0); @@ -1032,9 +1040,11 @@ namespace GHelper } - public bool AutoGPUMode(PowerLineStatus Plugged = PowerLineStatus.Online) + public bool AutoGPUMode() { + var Plugged = SystemInformation.PowerStatus.PowerLineStatus; + bool GpuAuto = Program.config.getConfig("gpu_auto") == 1; if (!GpuAuto) return false; @@ -1139,7 +1149,7 @@ namespace GHelper InitGPUMode(); HardwareMonitor.RecreateGpuTemperatureProviderWithDelay(); Thread.Sleep(500); - AutoScreen(SystemInformation.PowerStatus.PowerLineStatus); + AutoScreen(); }); });