UI Tweaks

This commit is contained in:
Serge
2024-03-08 09:48:46 +01:00
parent f749bfc888
commit a05eaea343
9 changed files with 274 additions and 250 deletions

View File

@@ -539,7 +539,7 @@ public static class AppConfig
public static bool IsAMDLight()
{
return ContainsModel("GA402X") || ContainsModel("GU605") || ContainsModel("GA403") || ContainsModel("FA507N") || ContainsModel("FA507X") || ContainsModel("FA707N") || ContainsModel("FA707X");
return ContainsModel("GA402X") || ContainsModel("GA403") || ContainsModel("FA507N") || ContainsModel("FA507X") || ContainsModel("FA707N") || ContainsModel("FA707X");
}
public static bool IsPowerRequired()

View File

@@ -1,182 +1,15 @@
using GHelper.Helpers;
using GHelper.Mode;
using GHelper.USB;
using System.Management;
namespace GHelper.Display
{
public enum SplendidGamut : int
{
Native = 50,
sRGB = 51,
DCIP3 = 53,
DisplayP3 = 54
}
public enum SplendidCommand: int
{
Init = 10,
DimmingAsus = 9,
DimmingVisual = 19,
GamutMode = 200,
Default = 11,
Racing = 21,
Scenery = 22,
RTS = 23,
FPS = 24,
Cinema = 25,
Vivid = 13,
Eyecare = 17,
}
public static class ScreenControl
public class ScreenControl
{
public const int MAX_REFRESH = 1000;
public static DisplayGammaRamp? gammaRamp;
private static int _brightness = 100;
private static bool _init = true;
private static string? _splendidPath = null;
private static System.Timers.Timer brightnessTimer = new System.Timers.Timer(100);
static ScreenControl () {
brightnessTimer.Elapsed += BrightnessTimerTimer_Elapsed;
}
public static Dictionary<SplendidGamut, string> GetGamutModes ()
{
Dictionary<SplendidGamut, string> _modes = new Dictionary<SplendidGamut, string>();
if (!Directory.Exists("C:\\ProgramData\\ASUS\\GameVisual")) return _modes;
try
{
DirectoryInfo d = new DirectoryInfo("C:\\ProgramData\\ASUS\\GameVisual");
FileInfo[] icms = d.GetFiles("*.icm");
if (icms.Length == 0) return _modes;
_modes.Add(SplendidGamut.Native, "Gamut - Native");
foreach (FileInfo icm in icms)
{
if (icm.Name.Contains("sRGB")) _modes.Add(SplendidGamut.sRGB, "Gamut - sRGB");
if (icm.Name.Contains("DCIP3")) _modes.Add(SplendidGamut.DCIP3, "Gamut - DCIP3");
if (icm.Name.Contains("DisplayP3")) _modes.Add(SplendidGamut.DisplayP3, "Gamut - DisplayP3");
}
return _modes;
}
catch {
return _modes;
}
}
public static Dictionary<SplendidCommand, string> GetVisualModes()
{
return new Dictionary<SplendidCommand, string>
{
{ SplendidCommand.Default, "Default"},
{ SplendidCommand.Racing, "Racing"},
{ SplendidCommand.Scenery, "Scenery"},
{ SplendidCommand.RTS, "RTS/RPG"},
{ SplendidCommand.FPS, "FPS"},
{ SplendidCommand.Cinema, "Cinema"},
{ SplendidCommand.Vivid, "Vivid" },
{ SplendidCommand.Eyecare, "Eyecare"}
};
}
public static void SetGamut(int mode = 50)
{
if (RunSplendid(SplendidCommand.GamutMode, 0, mode)) return;
if (_init)
{
_init = false;
RunSplendid(SplendidCommand.Init);
RunSplendid(SplendidCommand.GamutMode, 0, mode);
}
}
public static void SetVisual(SplendidCommand mode = SplendidCommand.Default, int whiteBalance = 50)
{
int balance = mode == SplendidCommand.Eyecare ? 2 : whiteBalance;
RunSplendid(mode, 0, balance);
if (_init)
{
_init = false;
RunSplendid(SplendidCommand.Init);
RunSplendid(mode, 0, balance);
}
}
private static string GetSplendidPath()
{
if (_splendidPath == null)
{
try
{
using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_SystemDriver WHERE Name='ATKWMIACPIIO'"))
{
foreach (var driver in searcher.Get())
{
string path = driver["PathName"].ToString();
_splendidPath = Path.GetDirectoryName(path) + "\\AsusSplendid.exe";
break;
}
}
}
catch (Exception ex)
{
Logger.WriteLine(ex.Message);
}
}
return _splendidPath;
}
private static bool RunSplendid(SplendidCommand command, int? param1 = null, int? param2 = null)
{
var splendid = GetSplendidPath();
bool isGameVisual = Directory.Exists("C:\\ProgramData\\ASUS\\GameVisual");
bool isSplenddid = File.Exists(splendid);
if (isSplenddid)
{
if (command == SplendidCommand.DimmingVisual && !isGameVisual) command = SplendidCommand.DimmingAsus;
var result = ProcessHelper.RunCMD(splendid, (int)command + " " + param1 + " " + param2);
if (result.Contains("file not exist") || (result.Length == 0 && isGameVisual)) return false;
}
return true;
}
private static void BrightnessTimerTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
brightnessTimer.Stop();
if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return;
if (_init)
{
_init = false;
RunSplendid(SplendidCommand.Init);
RunSplendid(SplendidCommand.Init, 4);
if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return;
}
// GammaRamp Fallback
SetGamma(_brightness);
}
public static void AutoScreen(bool force = false)
public void AutoScreen(bool force = false)
{
if (force || AppConfig.Is("screen_auto"))
{
@@ -191,67 +24,8 @@ namespace GHelper.Display
}
}
public static int SetBrightness(int brightness = -1, int delta = 0)
{
if (!AppConfig.IsOLED()) return -1;
if (brightness < 0) brightness = AppConfig.Get("brightness", 100);
_brightness = Math.Max(0, Math.Min(100, brightness + delta));
AppConfig.Set("brightness", _brightness);
brightnessTimer.Start();
Program.settingsForm.VisualiseBrightness();
return _brightness;
}
public static void SetGamma(int brightness = 100)
{
var bright = Math.Round((float)brightness / 200 + 0.5, 2);
var screenName = ScreenNative.FindLaptopScreen();
if (screenName is null) return;
try
{
var handle = ScreenNative.CreateDC(screenName, screenName, null, IntPtr.Zero);
if (gammaRamp is null)
{
var gammaDump = new GammaRamp();
if (ScreenNative.GetDeviceGammaRamp(handle, ref gammaDump))
{
gammaRamp = new DisplayGammaRamp(gammaDump);
//Logger.WriteLine("Gamma R: " + string.Join("-", gammaRamp.Red));
//Logger.WriteLine("Gamma G: " + string.Join("-", gammaRamp.Green));
//Logger.WriteLine("Gamma B: " + string.Join("-", gammaRamp.Blue));
}
}
if (gammaRamp is null || !gammaRamp.IsOriginal())
{
Logger.WriteLine("Not default Gamma");
gammaRamp = new DisplayGammaRamp();
}
var ramp = gammaRamp.AsBrightnessRamp(bright);
bool result = ScreenNative.SetDeviceGammaRamp(handle, ref ramp);
Logger.WriteLine("Gamma " + bright.ToString() + ": " + result);
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
//ScreenBrightness.Set(60 + (int)(40 * bright));
}
public static void SetScreen(int frequency = -1, int overdrive = -1, int miniled = -1)
public void SetScreen(int frequency = -1, int overdrive = -1, int miniled = -1)
{
var laptopScreen = ScreenNative.FindLaptopScreen(true);
@@ -288,7 +62,7 @@ namespace GHelper.Display
}
public static int ToogleMiniled()
public int ToogleMiniled()
{
int miniled1 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1);
int miniled2 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled2);
@@ -316,7 +90,7 @@ namespace GHelper.Display
return miniled;
}
public static void InitScreen()
public void InitScreen()
{
var laptopScreen = ScreenNative.FindLaptopScreen();

View File

@@ -0,0 +1,245 @@
using GHelper.Helpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading.Tasks;
namespace GHelper.Display
{
public enum SplendidGamut : int
{
Native = 50,
sRGB = 51,
DCIP3 = 53,
DisplayP3 = 54
}
public enum SplendidCommand : int
{
Init = 10,
DimmingAsus = 9,
DimmingVisual = 19,
GamutMode = 200,
Default = 11,
Racing = 21,
Scenery = 22,
RTS = 23,
FPS = 24,
Cinema = 25,
Vivid = 13,
Eyecare = 17,
}
public static class VisualControl
{
public static DisplayGammaRamp? gammaRamp;
private static int _brightness = 100;
private static bool _init = true;
private static string? _splendidPath = null;
private static System.Timers.Timer brightnessTimer = new System.Timers.Timer(100);
static VisualControl ()
{
brightnessTimer.Elapsed += BrightnessTimerTimer_Elapsed;
}
private static string GetGameVisualPath()
{
return "C:\\ProgramData\\ASUS\\GameVisual";
}
public static Dictionary<SplendidGamut, string> GetGamutModes()
{
Dictionary<SplendidGamut, string> _modes = new Dictionary<SplendidGamut, string>();
if (!Directory.Exists(GetGameVisualPath())) return _modes;
try
{
DirectoryInfo d = new DirectoryInfo(GetGameVisualPath());
FileInfo[] icms = d.GetFiles("*.icm");
if (icms.Length == 0) return _modes;
_modes.Add(SplendidGamut.Native, "Gamut: Native");
foreach (FileInfo icm in icms)
{
if (icm.Name.Contains("sRGB")) _modes.Add(SplendidGamut.sRGB, "Gamut: sRGB");
if (icm.Name.Contains("DCIP3")) _modes.Add(SplendidGamut.DCIP3, "Gamut: DCIP3");
if (icm.Name.Contains("DisplayP3")) _modes.Add(SplendidGamut.DisplayP3, "Gamut: DisplayP3");
}
return _modes;
}
catch
{
return _modes;
}
}
public static Dictionary<SplendidCommand, string> GetVisualModes()
{
return new Dictionary<SplendidCommand, string>
{
{ SplendidCommand.Default, "Default"},
{ SplendidCommand.Racing, "Racing"},
{ SplendidCommand.Scenery, "Scenery"},
{ SplendidCommand.RTS, "RTS/RPG"},
{ SplendidCommand.FPS, "FPS"},
{ SplendidCommand.Cinema, "Cinema"},
{ SplendidCommand.Vivid, "Vivid" },
{ SplendidCommand.Eyecare, "Eyecare"}
};
}
public static void SetGamut(int mode = 50)
{
if (RunSplendid(SplendidCommand.GamutMode, 0, mode)) return;
if (_init)
{
_init = false;
RunSplendid(SplendidCommand.Init);
RunSplendid(SplendidCommand.GamutMode, 0, mode);
}
}
public static void SetVisual(SplendidCommand mode = SplendidCommand.Default, int whiteBalance = 50)
{
int balance = mode == SplendidCommand.Eyecare ? 2 : whiteBalance;
if (RunSplendid(mode, 0, balance)) return;
if (_init)
{
_init = false;
RunSplendid(SplendidCommand.Init);
RunSplendid(mode, 0, balance);
}
}
private static string GetSplendidPath()
{
if (_splendidPath == null)
{
try
{
using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_SystemDriver WHERE Name='ATKWMIACPIIO'"))
{
foreach (var driver in searcher.Get())
{
string path = driver["PathName"].ToString();
_splendidPath = Path.GetDirectoryName(path) + "\\AsusSplendid.exe";
break;
}
}
}
catch (Exception ex)
{
Logger.WriteLine(ex.Message);
}
}
return _splendidPath;
}
private static bool RunSplendid(SplendidCommand command, int? param1 = null, int? param2 = null)
{
var splendid = GetSplendidPath();
bool isGameVisual = Directory.Exists(GetGameVisualPath());
bool isSplenddid = File.Exists(splendid);
if (isSplenddid)
{
if (command == SplendidCommand.DimmingVisual && !isGameVisual) command = SplendidCommand.DimmingAsus;
var result = ProcessHelper.RunCMD(splendid, (int)command + " " + param1 + " " + param2);
if (result.Contains("file not exist") || (result.Length == 0 && isGameVisual)) return false;
}
return true;
}
private static void BrightnessTimerTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
brightnessTimer.Stop();
if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return;
if (_init)
{
_init = false;
RunSplendid(SplendidCommand.Init);
RunSplendid(SplendidCommand.Init, 4);
if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return;
}
// GammaRamp Fallback
SetGamma(_brightness);
}
public static int SetBrightness(int brightness = -1, int delta = 0)
{
if (!AppConfig.IsOLED()) return -1;
if (brightness < 0) brightness = AppConfig.Get("brightness", 100);
_brightness = Math.Max(0, Math.Min(100, brightness + delta));
AppConfig.Set("brightness", _brightness);
brightnessTimer.Start();
Program.settingsForm.VisualiseBrightness();
return _brightness;
}
public static void SetGamma(int brightness = 100)
{
var bright = Math.Round((float)brightness / 200 + 0.5, 2);
var screenName = ScreenNative.FindLaptopScreen();
if (screenName is null) return;
try
{
var handle = ScreenNative.CreateDC(screenName, screenName, null, IntPtr.Zero);
if (gammaRamp is null)
{
var gammaDump = new GammaRamp();
if (ScreenNative.GetDeviceGammaRamp(handle, ref gammaDump))
{
gammaRamp = new DisplayGammaRamp(gammaDump);
//Logger.WriteLine("Gamma R: " + string.Join("-", gammaRamp.Red));
//Logger.WriteLine("Gamma G: " + string.Join("-", gammaRamp.Green));
//Logger.WriteLine("Gamma B: " + string.Join("-", gammaRamp.Blue));
}
}
if (gammaRamp is null || !gammaRamp.IsOriginal())
{
Logger.WriteLine("Not default Gamma");
gammaRamp = new DisplayGammaRamp();
}
var ramp = gammaRamp.AsBrightnessRamp(bright);
bool result = ScreenNative.SetDeviceGammaRamp(handle, ref ramp);
Logger.WriteLine("Gamma " + bright.ToString() + ": " + result);
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
//ScreenBrightness.Set(60 + (int)(40 * bright));
}
}
}

View File

@@ -12,6 +12,7 @@ namespace GHelper
public partial class Extra : RForm
{
ScreenControl screenControl = new ScreenControl();
ClamshellModeControl clamshellControl = new ClamshellModeControl();
const string EMPTY = "--------------";
@@ -683,7 +684,7 @@ namespace GHelper
private void CheckNoOverdrive_CheckedChanged(object? sender, EventArgs e)
{
AppConfig.Set("no_overdrive", (checkNoOverdrive.Checked ? 1 : 0));
ScreenControl.AutoScreen(true);
screenControl.AutoScreen(true);
}

View File

@@ -9,6 +9,7 @@ namespace GHelper.Gpu
public class GPUModeControl
{
SettingsForm settings;
ScreenControl screenControl = new ScreenControl();
public static int gpuMode;
public static bool? gpuExists = null;
@@ -158,7 +159,7 @@ namespace GHelper.Gpu
settings.Invoke(delegate
{
InitGPUMode();
ScreenControl.AutoScreen();
screenControl.AutoScreen();
});
if (eco == 0)

View File

@@ -99,7 +99,7 @@ namespace GHelper.Helpers
ToggleLidAction();
if (Program.settingsForm.Visible)
ScreenControl.InitScreen();
Program.screenControl.InitScreen();
}

View File

@@ -19,7 +19,8 @@ namespace GHelper.Input
public static Keys keyApp = Keys.F12;
static ModeControl modeControl = Program.modeControl;
static ScreenControl screenControl = new ScreenControl();
static bool isTUF = AppConfig.IsTUF();
KeyboardListener listener;
@@ -245,7 +246,7 @@ namespace GHelper.Input
static void SetBrightnessDimming(int delta)
{
int brightness = ScreenControl.SetBrightness(delta: delta);
int brightness = VisualControl.SetBrightness(delta: delta);
if (brightness >= 0)
Program.toast.RunToast(brightness + "%", (delta < 0) ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp);
}
@@ -478,7 +479,7 @@ namespace GHelper.Input
break;
case "miniled":
if (ScreenCCD.GetHDRStatus()) return;
int miniled = ScreenControl.ToogleMiniled();
int miniled = screenControl.ToogleMiniled();
Program.toast.RunToast(miniled == 1 ? "Multi-Zone" : "Single-Zone", miniled == 1 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown);
break;
case "aura":

View File

@@ -32,6 +32,7 @@ namespace GHelper
public static ModeControl modeControl = new ModeControl();
public static GPUModeControl gpuControl = new GPUModeControl(settingsForm);
public static AllyControl allyControl = new AllyControl(settingsForm);
public static ScreenControl screenControl = new ScreenControl();
public static ClamshellModeControl clamshellControl = new ClamshellModeControl();
public static ToastForm toast = new ToastForm();
@@ -165,7 +166,7 @@ namespace GHelper
if (e.Reason == SessionSwitchReason.SessionLogon || e.Reason == SessionSwitchReason.SessionUnlock)
{
Logger.WriteLine("Session:" + e.Reason.ToString());
ScreenControl.AutoScreen();
screenControl.AutoScreen();
}
}
@@ -223,7 +224,7 @@ namespace GHelper
if (!switched)
{
gpuControl.InitGPUMode();
ScreenControl.AutoScreen();
screenControl.AutoScreen();
}
BatteryControl.AutoBattery(init);

View File

@@ -24,6 +24,7 @@ namespace GHelper
public GPUModeControl gpuControl;
public AllyControl allyControl;
ScreenControl screenControl = new ScreenControl();
AutoUpdateControl updateControl;
AsusMouseSettings? mouseSettings;
@@ -275,7 +276,7 @@ namespace GHelper
sliderGamma.ValueChanged += SliderGamma_ValueChanged;
}
var gamuts = ScreenControl.GetGamutModes();
var gamuts = VisualControl.GetGamutModes();
if (gamuts.Count < 1) return;
if (!dimming) labelGammaTitle.Text = "Visual Mode";
@@ -285,7 +286,7 @@ namespace GHelper
tableVisual.Visible = true;
comboVisual.DropDownStyle = ComboBoxStyle.DropDownList;
comboVisual.DataSource = new BindingSource(ScreenControl.GetVisualModes(), null);
comboVisual.DataSource = new BindingSource(VisualControl.GetVisualModes(), null);
comboVisual.DisplayMember = "Value";
comboVisual.ValueMember = "Key";
comboVisual.SelectedValue = (SplendidCommand)AppConfig.Get("visual", (int)SplendidCommand.Default);
@@ -309,13 +310,13 @@ namespace GHelper
private void ComboGamut_SelectedValueChanged(object? sender, EventArgs e)
{
AppConfig.Set("gamut", (int)comboGamut.SelectedValue);
ScreenControl.SetGamut((int)comboGamut.SelectedValue);
VisualControl.SetGamut((int)comboGamut.SelectedValue);
}
private void ComboVisual_SelectedValueChanged(object? sender, EventArgs e)
{
AppConfig.Set("visual", (int)comboVisual.SelectedValue);
ScreenControl.SetVisual((SplendidCommand)comboVisual.SelectedValue);
VisualControl.SetVisual((SplendidCommand)comboVisual.SelectedValue);
}
public void VisualiseBrightness()
@@ -332,7 +333,7 @@ namespace GHelper
private void SliderGamma_ValueChanged(object? sender, EventArgs e)
{
if (sliderGammaIgnore) return;
ScreenControl.SetBrightness(sliderGamma.Value);
VisualControl.SetBrightness(sliderGamma.Value);
}
private void ButtonOverlay_Click(object? sender, EventArgs e)
@@ -474,7 +475,7 @@ namespace GHelper
sensorTimer.Enabled = this.Visible;
if (this.Visible)
{
ScreenControl.InitScreen();
screenControl.InitScreen();
VisualizeXGM();
Task.Run((Action)RefreshPeripheralsBattery);
@@ -753,7 +754,7 @@ namespace GHelper
private void ButtonScreenAuto_Click(object? sender, EventArgs e)
{
AppConfig.Set("screen_auto", 1);
ScreenControl.AutoScreen();
screenControl.AutoScreen();
}
@@ -1053,19 +1054,19 @@ namespace GHelper
private void Button120Hz_Click(object? sender, EventArgs e)
{
AppConfig.Set("screen_auto", 0);
ScreenControl.SetScreen(ScreenControl.MAX_REFRESH, 1);
screenControl.SetScreen(ScreenControl.MAX_REFRESH, 1);
}
private void Button60Hz_Click(object? sender, EventArgs e)
{
AppConfig.Set("screen_auto", 0);
ScreenControl.SetScreen(60, 0);
screenControl.SetScreen(60, 0);
}
private void ButtonMiniled_Click(object? sender, EventArgs e)
{
ScreenControl.ToogleMiniled();
screenControl.ToogleMiniled();
}