mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
173 lines
5.5 KiB
C#
173 lines
5.5 KiB
C#
using System.Diagnostics;
|
|
|
|
namespace GHelper.Display
|
|
{
|
|
public class ScreenControl
|
|
{
|
|
|
|
public const int MAX_REFRESH = 1000;
|
|
|
|
|
|
public void AutoScreen(bool force = false)
|
|
{
|
|
if (force || AppConfig.Is("screen_auto"))
|
|
{
|
|
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
|
|
SetScreen(MAX_REFRESH, 1);
|
|
else
|
|
SetScreen(60, 0);
|
|
}
|
|
else
|
|
{
|
|
SetScreen(overdrive: AppConfig.Get("overdrive"));
|
|
}
|
|
}
|
|
|
|
public void ToggleScreenRate()
|
|
{
|
|
var laptopScreen = ScreenNative.FindLaptopScreen(true);
|
|
var refreshRate = ScreenNative.GetRefreshRate(laptopScreen);
|
|
if (refreshRate < 0) return;
|
|
|
|
ScreenNative.SetRefreshRate(laptopScreen, refreshRate > 60 ? 60 : ScreenNative.GetMaxRefreshRate(laptopScreen));
|
|
InitScreen();
|
|
}
|
|
|
|
|
|
public void SetScreen(int frequency = -1, int overdrive = -1, int miniled = -1)
|
|
{
|
|
var laptopScreen = ScreenNative.FindLaptopScreen(true);
|
|
var refreshRate = ScreenNative.GetRefreshRate(laptopScreen);
|
|
|
|
if (refreshRate < 0) return;
|
|
|
|
if (frequency >= MAX_REFRESH)
|
|
{
|
|
frequency = ScreenNative.GetMaxRefreshRate(laptopScreen);
|
|
}
|
|
|
|
if (frequency > 0 && frequency != refreshRate)
|
|
{
|
|
ScreenNative.SetRefreshRate(laptopScreen, frequency);
|
|
}
|
|
|
|
if (Program.acpi.IsOverdriveSupported() && overdrive >= 0)
|
|
{
|
|
if (AppConfig.IsNoOverdrive()) overdrive = 0;
|
|
if (overdrive != Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive))
|
|
{
|
|
Program.acpi.DeviceSet(AsusACPI.ScreenOverdrive, overdrive, "ScreenOverdrive");
|
|
}
|
|
}
|
|
|
|
if (miniled >= 0)
|
|
{
|
|
if (Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1) >= 0)
|
|
Program.acpi.DeviceSet(AsusACPI.ScreenMiniled1, miniled, "Miniled1");
|
|
else
|
|
{
|
|
Program.acpi.DeviceSet(AsusACPI.ScreenMiniled2, miniled, "Miniled2");
|
|
Thread.Sleep(100);
|
|
}
|
|
}
|
|
|
|
InitScreen();
|
|
}
|
|
|
|
public void ToogleFHD()
|
|
{
|
|
int fhd = Program.acpi.DeviceGet(AsusACPI.ScreenFHD);
|
|
Logger.WriteLine($"FHD Toggle: {fhd}");
|
|
|
|
DialogResult dialogResult = MessageBox.Show("Changing display mode requires reboot", Properties.Strings.AlertUltimateTitle, MessageBoxButtons.YesNo);
|
|
if (dialogResult == DialogResult.Yes)
|
|
{
|
|
Program.acpi.DeviceSet(AsusACPI.ScreenFHD, (fhd == 1) ? 0 : 1, "FHD");
|
|
Process.Start("shutdown", "/r /t 1");
|
|
}
|
|
}
|
|
|
|
public int ToogleMiniled()
|
|
{
|
|
int miniled1 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1);
|
|
int miniled2 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled2);
|
|
|
|
Logger.WriteLine($"MiniledToggle: {miniled1} {miniled2}");
|
|
|
|
int miniled;
|
|
|
|
if (miniled1 >= 0)
|
|
{
|
|
miniled = (miniled1 == 1) ? 0 : 1;
|
|
}
|
|
else
|
|
{
|
|
switch (miniled2)
|
|
{
|
|
case 1: miniled = 2; break;
|
|
case 2: miniled = 0; break;
|
|
default: miniled = 1; break;
|
|
}
|
|
}
|
|
|
|
AppConfig.Set("miniled", miniled);
|
|
SetScreen(miniled: miniled);
|
|
return miniled;
|
|
}
|
|
|
|
public void InitScreen()
|
|
{
|
|
var laptopScreen = ScreenNative.FindLaptopScreen();
|
|
int frequency = ScreenNative.GetRefreshRate(laptopScreen);
|
|
int maxFrequency = ScreenNative.GetMaxRefreshRate(laptopScreen);
|
|
|
|
bool screenAuto = AppConfig.Is("screen_auto");
|
|
bool overdriveSetting = Program.acpi.IsOverdriveSupported() && !AppConfig.IsNoOverdrive();
|
|
|
|
int overdrive = AppConfig.IsNoOverdrive() ? 0 : Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive);
|
|
|
|
int miniled1 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1);
|
|
int miniled2 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled2);
|
|
|
|
int miniled = (miniled1 >= 0) ? miniled1 : miniled2;
|
|
bool hdr = false;
|
|
|
|
if (miniled >= 0)
|
|
{
|
|
Logger.WriteLine($"Miniled: {miniled1} {miniled2}");
|
|
AppConfig.Set("miniled", miniled);
|
|
}
|
|
|
|
hdr = ScreenCCD.GetHDRStatus();
|
|
|
|
bool screenEnabled = (frequency >= 0);
|
|
|
|
int fhd = -1;
|
|
if (AppConfig.IsDUO())
|
|
{
|
|
fhd = Program.acpi.DeviceGet(AsusACPI.ScreenFHD);
|
|
}
|
|
|
|
AppConfig.Set("frequency", frequency);
|
|
AppConfig.Set("overdrive", overdrive);
|
|
|
|
Program.settingsForm.Invoke(delegate
|
|
{
|
|
Program.settingsForm.VisualiseScreen(
|
|
screenEnabled: screenEnabled,
|
|
screenAuto: screenAuto,
|
|
frequency: frequency,
|
|
maxFrequency: maxFrequency,
|
|
overdrive: overdrive,
|
|
overdriveSetting: overdriveSetting,
|
|
miniled1: miniled1,
|
|
miniled2: miniled2,
|
|
hdr: hdr,
|
|
fhd: fhd
|
|
);
|
|
});
|
|
|
|
}
|
|
}
|
|
}
|