diff --git a/.github/SECURITY.md b/.github/SECURITY.md index 7504e677..d24f4109 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -4,8 +4,8 @@ | Version | Supported | | ------- | ------------------ | -| 0.89+ | :white_check_mark: | -| < 0.89 | :x: | +| 0.151+ | :white_check_mark: | +| < 0.151 | :x: | ## Reporting a Vulnerability diff --git a/app/AnimeMatrix/AniMatrixControl.cs b/app/AnimeMatrix/AniMatrixControl.cs index b2b7033e..b1b54be7 100644 --- a/app/AnimeMatrix/AniMatrixControl.cs +++ b/app/AnimeMatrix/AniMatrixControl.cs @@ -18,6 +18,8 @@ namespace GHelper.AnimeMatrix public AnimeMatrixDevice? deviceMatrix; public SlashDevice? deviceSlash; + public static bool lidClose = false; + double[]? AudioValues; WasapiCapture? AudioDevice; string? AudioDeviceId; @@ -56,6 +58,15 @@ namespace GHelper.AnimeMatrix if (deviceSlash is not null) SetSlash(wakeUp); } + public void SetLidMode(bool force = false) + { + if (AppConfig.Is("matrix_lid") || force) + { + Logger.WriteLine($"Matrix LidClosed: {lidClose}"); + SetDevice(true); + } + } + public void SetSlash(bool wakeUp = false) { @@ -66,6 +77,7 @@ namespace GHelper.AnimeMatrix int inteval = AppConfig.Get("matrix_interval", 0); bool auto = AppConfig.Is("matrix_auto"); + bool lid = AppConfig.Is("matrix_lid"); Task.Run(() => { @@ -81,7 +93,7 @@ namespace GHelper.AnimeMatrix if (wakeUp) deviceSlash.WakeUp(); - if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)) + if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online) || (lid && lidClose)) { deviceSlash.Init(); deviceSlash.SetOptions(false, 0, 0); @@ -110,6 +122,7 @@ namespace GHelper.AnimeMatrix int brightness = AppConfig.Get("matrix_brightness", 0); int running = AppConfig.Get("matrix_running", 0); bool auto = AppConfig.Is("matrix_auto"); + bool lid = AppConfig.Is("matrix_lid"); StopMatrixTimer(); StopMatrixAudio(); @@ -128,7 +141,7 @@ namespace GHelper.AnimeMatrix if (wakeUp) deviceMatrix.WakeUp(); - if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)) + if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online) || (lid && lidClose)) { deviceMatrix.SetDisplayState(false); deviceMatrix.SetDisplayState(false); // some devices are dumb diff --git a/app/AnimeMatrix/SlashDevice.cs b/app/AnimeMatrix/SlashDevice.cs index 04d6eff5..bcc9216d 100644 --- a/app/AnimeMatrix/SlashDevice.cs +++ b/app/AnimeMatrix/SlashDevice.cs @@ -127,6 +127,11 @@ namespace GHelper.AnimeMatrix Set(Packet(0xD8, 0x01, 0x00, 0x01, status ? (byte)0x80 : (byte)0x00)); } + public void SetLidMode(bool status) + { + Set(Packet(0xD8, 0x00, 0x00, 0x02, 0xA5, status ? (byte)0x80 : (byte)0x00)); + } + public void Set(Packet packet) { _usbProvider?.Set(packet.Data); diff --git a/app/AppConfig.cs b/app/AppConfig.cs index fb9d65d1..3a114f31 100644 --- a/app/AppConfig.cs +++ b/app/AppConfig.cs @@ -91,13 +91,19 @@ public static class AppConfig if (_model is null) { _model = ""; - using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_ComputerSystem")) + try { - foreach (var process in searcher.Get()) + using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_ComputerSystem")) { - _model = process["Model"].ToString(); - break; + foreach (var process in searcher.Get()) + { + _model = process["Model"].ToString(); + break; + } } + } catch (Exception ex) + { + Logger.WriteLine(ex.Message); } } @@ -389,6 +395,11 @@ public static class AppConfig return ContainsModel("GA503") || IsSlash(); } + public static bool IsOLED() + { + return ContainsModel("OLED") || IsSlash() || ContainsModel("UX64") || ContainsModel("UX34") || ContainsModel("UX53") || ContainsModel("K360") || ContainsModel("X150"); + } + public static bool IsStrix() { return ContainsModel("Strix") || ContainsModel("Scar") || ContainsModel("G703G"); @@ -399,11 +410,17 @@ public static class AppConfig return (ContainsModel("G614JV") || ContainsModel("G614JZ") || ContainsModel("G512LI") || ContainsModel("G513R") || ContainsModel("G713PV") || ContainsModel("G513IE") || ContainsModel("G713RC") || ContainsModel("G513QM") || ContainsModel("G531G")) && !Is("per_key_rgb"); } + public static bool IsNoAirplaneMode() { return ContainsModel("FX506"); } + public static bool NoWMI() + { + return ContainsModel("GL704G"); + } + public static bool IsNoDirectRGB() { return ContainsModel("GA503") || ContainsModel("G533Q"); @@ -451,7 +468,7 @@ public static class AppConfig public static bool NoAutoUltimate() { - return ContainsModel("G614") || ContainsModel("GU604") || ContainsModel("FX507") || ContainsModel("G513") || ContainsModel("FA617") || ContainsModel("G834"); + return ContainsModel("G614") || ContainsModel("GU604") || ContainsModel("FX507") || ContainsModel("G513") || ContainsModel("FA617") || ContainsModel("G834") || ContainsModel("GA403") || ContainsModel("GU605"); } diff --git a/app/AsusACPI.cs b/app/AsusACPI.cs index 763bcd99..e545062f 100644 --- a/app/AsusACPI.cs +++ b/app/AsusACPI.cs @@ -43,6 +43,10 @@ public class AsusACPI public const int Brightness_Down = 0x10; public const int Brightness_Up = 0x20; public const int KB_Sleep = 0x6c; + + public const int KB_TouchpadToggle = 0x6b; + public const int KB_MuteToggle = 0x7c; + public const int KB_DUO_PgUpDn = 0x4B; public const int KB_DUO_SecondDisplay = 0x6A; @@ -98,6 +102,9 @@ public class AsusACPI public const int PPT_APUC1 = 0x001200C1; // fPPT (fast boost limit) public const int PPT_GPUC2 = 0x001200C2; // NVIDIA GPU Temp Target (75.. 87 C) + public const uint CORES_CPU = 0x001200D2; // Intel E-core and P-core configuration in a format 0x0[E]0[P] + public const uint CORES_MAX = 0x001200D3; // Maximum Intel E-core and P-core availability + public const int APU_MEM = 0x000600C1; public const int TUF_KB_BRIGHTNESS = 0x00050021; @@ -146,6 +153,12 @@ public class AsusACPI public const int MinGPUTemp = 75; public const int MaxGPUTemp = 87; + public const int PCoreMin = 4; + public const int ECoreMin = 0; + + public const int PCoreMax = 16; + public const int ECoreMax = 16; + [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] private static extern IntPtr CreateFile( @@ -514,16 +527,25 @@ public class AsusACPI default: fan_mode = 0; break; } + byte[] result; + switch (device) { case AsusFan.GPU: - return DeviceGetBuffer(DevsGPUFanCurve, fan_mode); + result = DeviceGetBuffer(DevsGPUFanCurve, fan_mode); + break; case AsusFan.Mid: - return DeviceGetBuffer(DevsMidFanCurve, fan_mode); + result = DeviceGetBuffer(DevsMidFanCurve, fan_mode); + break; default: - return DeviceGetBuffer(DevsCPUFanCurve, fan_mode); + result = DeviceGetBuffer(DevsCPUFanCurve, fan_mode); + break; } + Logger.WriteLine($"GetFan {device} :" + BitConverter.ToString(result)); + + return result; + } public static bool IsInvalidCurve(byte[] curve) @@ -665,6 +687,29 @@ public class AsusACPI } } + public (int, int) GetCores(bool max = false) + { + int value = Program.acpi.DeviceGet(max ? CORES_MAX : CORES_CPU); + //value = max ? 0x406 : 0x605; + + if (value < 0) return (-1, -1); + Logger.WriteLine("Cores" + (max ? "Max" : "") + ": 0x" + value.ToString("X4")); + + return ((value >> 8) & 0xFF, (value) & 0xFF); + } + + public void SetCores(int eCores, int pCores) + { + if (eCores < ECoreMin || eCores > ECoreMax || pCores < PCoreMin || pCores > PCoreMax) + { + Logger.WriteLine($"Incorrect Core config ({eCores}, {pCores})"); + return; + }; + + int value = (eCores << 8) | pCores; + Program.acpi.DeviceSet(CORES_CPU, value, "Cores (0x" + value.ToString("X4") + ")"); + } + public string ScanRange() { int value; diff --git a/app/Display/DisplayGammaRamp.cs b/app/Display/DisplayGammaRamp.cs new file mode 100644 index 00000000..ca150f6f --- /dev/null +++ b/app/Display/DisplayGammaRamp.cs @@ -0,0 +1,112 @@ +namespace GHelper.Display +{ + + public class DisplayGammaRamp + { + + public DisplayGammaRamp(ushort[] red, ushort[] green, ushort[] blue) + { + if (red?.Length != GammaRamp.DataPoints) + { + throw new ArgumentOutOfRangeException(nameof(red)); + } + + if (green?.Length != GammaRamp.DataPoints) + { + throw new ArgumentOutOfRangeException(nameof(green)); + } + + if (blue?.Length != GammaRamp.DataPoints) + { + throw new ArgumentOutOfRangeException(nameof(blue)); + } + + Red = red; + Green = green; + Blue = blue; + } + + public DisplayGammaRamp(double brightness = 1, double contrast = 1, double gamma = 1) + : this( + CalculateLUT(brightness, contrast, gamma), + CalculateLUT(brightness, contrast, gamma), + CalculateLUT(brightness, contrast, gamma) + ) + { + } + + public DisplayGammaRamp( + double redBrightness, + double redContrast, + double redGamma, + double greenBrightness, + double greenContrast, + double greenGamma, + double blueBrightness, + double blueContrast, + double blueGamma + ) + : this( + CalculateLUT(redBrightness, redContrast, redGamma), + CalculateLUT(greenBrightness, greenContrast, greenGamma), + CalculateLUT(blueBrightness, blueContrast, blueGamma) + ) + { + } + + internal DisplayGammaRamp(GammaRamp ramp) : + this(ramp.Red, ramp.Green, ramp.Blue) + { + } + public ushort[] Blue { get; } + public ushort[] Green { get; } + public ushort[] Red { get; } + private static ushort[] CalculateLUT(double brightness, double contrast, double gamma) + { + brightness = 0.5 + brightness / 2; + var result = new ushort[GammaRamp.DataPoints]; + for (var i = 0; i < result.Length; i++) + { + result[i] = (ushort)(brightness * ushort.MaxValue * i / (float)(result.Length - 1)); + } + return result; + } + + public bool IsOriginal() + { + int MaxRed = Red[Red.Length - 1]; + int MaxGreen = Green[Green.Length - 1]; + int MaxBlue = Blue[Blue.Length - 1]; + return (Math.Abs((MaxRed + MaxGreen + MaxBlue) / 3 - ushort.MaxValue) < 256); + } + + private static ushort[] Brightness(ushort[] data, double brightness) + { + var result = new ushort[GammaRamp.DataPoints]; + for (var i = 0; i < result.Length; i++) + { + if (brightness < 0.5) + result[i] = (ushort)(0.5 * ushort.MaxValue * Math.Pow((float)i/(result.Length - 1), 2 - brightness*2)); + else + result[i] = (ushort)(data[i] * brightness); + } + return result; + } + + internal GammaRamp AsBrightnessRamp(double brightness) + { + return new GammaRamp( + Brightness(Red, brightness), + Brightness(Green, brightness), + Brightness(Blue, brightness) + ); + } + + internal GammaRamp AsRamp() + { + return new GammaRamp(Red, Green, Blue); + } + + + } +} \ No newline at end of file diff --git a/app/Display/GammaRamp.cs b/app/Display/GammaRamp.cs new file mode 100644 index 00000000..0b1321db --- /dev/null +++ b/app/Display/GammaRamp.cs @@ -0,0 +1,56 @@ +using System.Runtime.InteropServices; + +namespace GHelper.Display +{ + + [StructLayout(LayoutKind.Sequential)] + internal struct GammaRamp + { + public const int DataPoints = 256; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DataPoints)] + public readonly ushort[] Red; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DataPoints)] + public readonly ushort[] Green; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DataPoints)] + public readonly ushort[] Blue; + + public GammaRamp(ushort[] red, ushort[] green, ushort[] blue) + { + if (red == null) + { + throw new ArgumentNullException(nameof(red)); + } + + if (green == null) + { + throw new ArgumentNullException(nameof(green)); + } + + if (blue == null) + { + throw new ArgumentNullException(nameof(blue)); + } + + if (red.Length != DataPoints) + { + throw new ArgumentOutOfRangeException(nameof(red)); + } + + if (green.Length != DataPoints) + { + throw new ArgumentOutOfRangeException(nameof(green)); + } + + if (blue.Length != DataPoints) + { + throw new ArgumentOutOfRangeException(nameof(blue)); + } + + Red = red; + Green = green; + Blue = blue; + } + } + +} \ No newline at end of file diff --git a/app/Display/ScreenControl.cs b/app/Display/ScreenControl.cs index 6331baaf..4220f4a4 100644 --- a/app/Display/ScreenControl.cs +++ b/app/Display/ScreenControl.cs @@ -1,4 +1,4 @@ -using System.Diagnostics; +using System.Runtime.InteropServices; namespace GHelper.Display { @@ -7,6 +7,8 @@ namespace GHelper.Display public const int MAX_REFRESH = 1000; + public static DisplayGammaRamp? gammaRamp; + public void AutoScreen(bool force = false) { if (force || AppConfig.Is("screen_auto")) @@ -22,6 +24,70 @@ namespace GHelper.Display } } + public void SaveGamma() + { + var screenName = ScreenNative.FindLaptopScreen(); + if (screenName is null) return; + + try + { + var handle = ScreenNative.CreateDC(screenName, screenName, null, IntPtr.Zero); + var gammaRamp = new GammaRamp(); + if (ScreenNative.GetDeviceGammaRamp(handle, ref gammaRamp)) + { + var gamma = new DisplayGammaRamp(gammaRamp); + Logger.WriteLine("Gamma R: " + string.Join("-", gamma.Red)); + Logger.WriteLine("Gamma G: " + string.Join("-", gamma.Green)); + Logger.WriteLine("Gamma B: " + string.Join("-", gamma.Blue)); + } + } + catch (Exception ex) + { + Logger.WriteLine(ex.ToString()); + } + } + + public 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("Default Gamma"); + gammaRamp = new DisplayGammaRamp(); + } + + var ramp = gammaRamp.AsBrightnessRamp(bright); + bool result = ScreenNative.SetDeviceGammaRamp(handle, ref ramp); + + Logger.WriteLine("Brightness " + bright.ToString() + ": " + result); + + } catch (Exception ex) + { + Logger.WriteLine(ex.ToString()); + } + + //ScreenBrightness.Set(60 + (int)(40 * bright)); + } + public void SetScreen(int frequency = -1, int overdrive = -1, int miniled = -1) { var laptopScreen = ScreenNative.FindLaptopScreen(true); @@ -71,7 +137,8 @@ namespace GHelper.Display if (miniled1 >= 0) { miniled = (miniled1 == 1) ? 0 : 1; - } else + } + else { switch (miniled2) { diff --git a/app/Display/ScreenInterrogatory.cs b/app/Display/ScreenInterrogatory.cs index 1840b27b..c285b354 100644 --- a/app/Display/ScreenInterrogatory.cs +++ b/app/Display/ScreenInterrogatory.cs @@ -339,7 +339,20 @@ namespace GHelper.Display for (var i = 0; i < modeCount; i++) if (displayModes[i].infoType == DISPLAYCONFIG_MODE_INFO_TYPE.DISPLAYCONFIG_MODE_INFO_TYPE_TARGET) - yield return DeviceName(displayModes[i].adapterId, displayModes[i].id); + { + DISPLAYCONFIG_TARGET_DEVICE_NAME? displayName = null; + try + { + displayName = DeviceName(displayModes[i].adapterId, displayModes[i].id); + + } catch (Exception e) + { + Logger.WriteLine(e.Message); + } + + if (displayName is not null) yield return (DISPLAYCONFIG_TARGET_DEVICE_NAME)displayName; + } + } diff --git a/app/Display/ScreenNative.cs b/app/Display/ScreenNative.cs index 90cfdbf0..0b260fd3 100644 --- a/app/Display/ScreenNative.cs +++ b/app/Display/ScreenNative.cs @@ -32,6 +32,16 @@ namespace GHelper.Display } internal class ScreenNative { + + [DllImport("gdi32", CharSet = CharSet.Unicode)] + internal static extern IntPtr CreateDC(string driver, string device, string port, IntPtr deviceMode); + + [DllImport("gdi32")] + internal static extern bool SetDeviceGammaRamp(IntPtr dcHandle, ref GammaRamp ramp); + + [DllImport("gdi32")] + internal static extern bool GetDeviceGammaRamp(IntPtr dcHandle, ref GammaRamp ramp); + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct DEVMODE { @@ -146,7 +156,7 @@ namespace GHelper.Display public const string defaultDevice = @"\\.\DISPLAY1"; - private static string? FindInternalName(bool log = false) + public static string? FindInternalName(bool log = false) { try { diff --git a/app/Extra.Designer.cs b/app/Extra.Designer.cs index 70a9d626..fee5be60 100644 --- a/app/Extra.Designer.cs +++ b/app/Extra.Designer.cs @@ -99,6 +99,7 @@ namespace GHelper checkSleepLid = new CheckBox(); checkShutdownLid = new CheckBox(); panelSettingsHeader = new Panel(); + pictureScan = new PictureBox(); pictureLog = new PictureBox(); pictureSettings = new PictureBox(); labelSettings = new Label(); @@ -120,7 +121,18 @@ namespace GHelper comboAPU = new RComboBox(); pictureAPUMem = new PictureBox(); labelAPUMem = new Label(); - pictureScan = new PictureBox(); + panelCores = new Panel(); + buttonCores = new RButton(); + comboCoresP = new RComboBox(); + comboCoresE = new RComboBox(); + pictureCores = new PictureBox(); + label1 = new Label(); + panelACPI = new Panel(); + textACPIParam = new TextBox(); + textACPICommand = new TextBox(); + buttonACPISend = new RButton(); + pictureDebug = new PictureBox(); + labelACPITitle = new Label(); panelServices.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureService).BeginInit(); panelBindingsHeader.SuspendLayout(); @@ -137,6 +149,7 @@ namespace GHelper panelXMG.SuspendLayout(); tableBacklight.SuspendLayout(); panelSettingsHeader.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureScan).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureLog).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureSettings).BeginInit(); panelSettings.SuspendLayout(); @@ -145,7 +158,10 @@ namespace GHelper ((System.ComponentModel.ISupportInitialize)pictureHibernate).BeginInit(); panelAPU.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureAPUMem).BeginInit(); - ((System.ComponentModel.ISupportInitialize)pictureScan).BeginInit(); + panelCores.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureCores).BeginInit(); + panelACPI.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureDebug).BeginInit(); SuspendLayout(); // // panelServices @@ -155,7 +171,7 @@ namespace GHelper panelServices.Controls.Add(labelServices); panelServices.Controls.Add(buttonServices); panelServices.Dock = DockStyle.Top; - panelServices.Location = new Point(15, 1378); + panelServices.Location = new Point(15, 1508); panelServices.Name = "panelServices"; panelServices.Size = new Size(983, 75); panelServices.TabIndex = 5; @@ -1016,6 +1032,20 @@ namespace GHelper panelSettingsHeader.Size = new Size(983, 51); panelSettingsHeader.TabIndex = 45; // + // pictureScan + // + pictureScan.Anchor = AnchorStyles.Top | AnchorStyles.Right; + pictureScan.BackgroundImage = Resources.icons8_search_32; + pictureScan.BackgroundImageLayout = ImageLayout.Zoom; + pictureScan.Cursor = Cursors.Hand; + pictureScan.Location = new Point(891, 11); + pictureScan.Margin = new Padding(4, 3, 4, 3); + pictureScan.Name = "pictureScan"; + pictureScan.Size = new Size(32, 32); + pictureScan.TabIndex = 13; + pictureScan.TabStop = false; + pictureScan.Visible = false; + // // pictureLog // pictureLog.Anchor = AnchorStyles.Top | AnchorStyles.Right; @@ -1063,7 +1093,7 @@ namespace GHelper panelSettings.Controls.Add(checkGpuApps); panelSettings.Controls.Add(checkGPUFix); panelSettings.Dock = DockStyle.Top; - panelSettings.Location = new Point(15, 978); + panelSettings.Location = new Point(15, 1108); panelSettings.Name = "panelSettings"; panelSettings.Padding = new Padding(20, 5, 11, 5); panelSettings.Size = new Size(983, 346); @@ -1178,7 +1208,7 @@ namespace GHelper panelPower.Controls.Add(labelHibernateAfter); panelPower.Controls.Add(pictureHibernate); panelPower.Dock = DockStyle.Top; - panelPower.Location = new Point(15, 1324); + panelPower.Location = new Point(15, 1454); panelPower.Name = "panelPower"; panelPower.Size = new Size(983, 54); panelPower.TabIndex = 4; @@ -1221,7 +1251,7 @@ namespace GHelper panelAPU.Controls.Add(pictureAPUMem); panelAPU.Controls.Add(labelAPUMem); panelAPU.Dock = DockStyle.Top; - panelAPU.Location = new Point(15, 921); + panelAPU.Location = new Point(15, 1051); panelAPU.Name = "panelAPU"; panelAPU.Padding = new Padding(11, 5, 11, 0); panelAPU.Size = new Size(983, 57); @@ -1239,10 +1269,10 @@ namespace GHelper comboAPU.FormattingEnabled = true; comboAPU.ItemHeight = 32; comboAPU.Items.AddRange(new object[] { "Auto", "1G", "2G", "3G", "4G", "5G", "6G", "7G", "8G" }); - comboAPU.Location = new Point(663, 8); + comboAPU.Location = new Point(654, 8); comboAPU.Margin = new Padding(4, 12, 4, 9); comboAPU.Name = "comboAPU"; - comboAPU.Size = new Size(293, 40); + comboAPU.Size = new Size(309, 40); comboAPU.TabIndex = 12; comboAPU.TabStop = false; // @@ -1260,25 +1290,169 @@ namespace GHelper // labelAPUMem.AutoSize = true; labelAPUMem.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); - labelAPUMem.Location = new Point(56, 11); + labelAPUMem.Location = new Point(64, 11); labelAPUMem.Name = "labelAPUMem"; labelAPUMem.Size = new Size(309, 32); labelAPUMem.TabIndex = 0; labelAPUMem.Text = "Memory Assigned to GPU"; // - // pictureScan + // panelCores // - pictureScan.Anchor = AnchorStyles.Top | AnchorStyles.Right; - pictureScan.BackgroundImage = Resources.icons8_heartbeat_32; - pictureScan.BackgroundImageLayout = ImageLayout.Zoom; - pictureScan.Cursor = Cursors.Hand; - pictureScan.Location = new Point(891, 11); - pictureScan.Margin = new Padding(4, 3, 4, 3); - pictureScan.Name = "pictureScan"; - pictureScan.Size = new Size(32, 32); - pictureScan.TabIndex = 13; - pictureScan.TabStop = false; - pictureScan.Visible = false; + panelCores.AutoSize = true; + panelCores.Controls.Add(buttonCores); + panelCores.Controls.Add(comboCoresP); + panelCores.Controls.Add(comboCoresE); + panelCores.Controls.Add(pictureCores); + panelCores.Controls.Add(label1); + panelCores.Dock = DockStyle.Top; + panelCores.Location = new Point(15, 990); + panelCores.Name = "panelCores"; + panelCores.Padding = new Padding(11, 5, 11, 0); + panelCores.Size = new Size(983, 61); + panelCores.TabIndex = 47; + panelCores.Visible = false; + // + // buttonCores + // + buttonCores.Activated = false; + buttonCores.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCores.BackColor = SystemColors.ButtonHighlight; + buttonCores.BorderColor = Color.Transparent; + buttonCores.BorderRadius = 2; + buttonCores.FlatStyle = FlatStyle.Flat; + buttonCores.Location = new Point(856, 7); + buttonCores.Margin = new Padding(4, 3, 4, 3); + buttonCores.Name = "buttonCores"; + buttonCores.Secondary = false; + buttonCores.Size = new Size(106, 46); + buttonCores.TabIndex = 20; + buttonCores.Text = "Apply"; + buttonCores.UseVisualStyleBackColor = false; + // + // comboCoresP + // + comboCoresP.Anchor = AnchorStyles.Top | AnchorStyles.Right; + comboCoresP.BorderColor = Color.White; + comboCoresP.ButtonColor = SystemColors.ControlLight; + comboCoresP.FlatStyle = FlatStyle.Flat; + comboCoresP.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + comboCoresP.FormattingEnabled = true; + comboCoresP.ItemHeight = 32; + comboCoresP.Location = new Point(543, 10); + comboCoresP.Margin = new Padding(4, 12, 4, 9); + comboCoresP.Name = "comboCoresP"; + comboCoresP.Size = new Size(150, 40); + comboCoresP.TabIndex = 13; + comboCoresP.TabStop = false; + // + // comboCoresE + // + comboCoresE.Anchor = AnchorStyles.Top | AnchorStyles.Right; + comboCoresE.BorderColor = Color.White; + comboCoresE.ButtonColor = SystemColors.ControlLight; + comboCoresE.FlatStyle = FlatStyle.Flat; + comboCoresE.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + comboCoresE.FormattingEnabled = true; + comboCoresE.ItemHeight = 32; + comboCoresE.Location = new Point(702, 10); + comboCoresE.Margin = new Padding(4, 12, 4, 9); + comboCoresE.Name = "comboCoresE"; + comboCoresE.Size = new Size(150, 40); + comboCoresE.TabIndex = 12; + comboCoresE.TabStop = false; + // + // pictureCores + // + pictureCores.BackgroundImage = Resources.icons8_processor_32; + pictureCores.BackgroundImageLayout = ImageLayout.Zoom; + pictureCores.Location = new Point(20, 15); + pictureCores.Name = "pictureCores"; + pictureCores.Size = new Size(32, 32); + pictureCores.TabIndex = 1; + pictureCores.TabStop = false; + // + // label1 + // + label1.AutoSize = true; + label1.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + label1.Location = new Point(64, 14); + label1.Name = "label1"; + label1.Size = new Size(299, 32); + label1.TabIndex = 0; + label1.Text = "CPU Cores Configuration"; + // + // panelACPI + // + panelACPI.AutoSize = true; + panelACPI.Controls.Add(textACPIParam); + panelACPI.Controls.Add(textACPICommand); + panelACPI.Controls.Add(buttonACPISend); + panelACPI.Controls.Add(pictureDebug); + panelACPI.Controls.Add(labelACPITitle); + panelACPI.Dock = DockStyle.Top; + panelACPI.Location = new Point(15, 921); + panelACPI.Name = "panelACPI"; + panelACPI.Padding = new Padding(11, 5, 11, 0); + panelACPI.Size = new Size(983, 69); + panelACPI.TabIndex = 48; + panelACPI.Visible = false; + // + // textACPIParam + // + textACPIParam.Location = new Point(717, 18); + textACPIParam.Margin = new Padding(4, 3, 4, 3); + textACPIParam.Name = "textACPIParam"; + textACPIParam.PlaceholderText = "Value"; + textACPIParam.Size = new Size(127, 39); + textACPIParam.TabIndex = 22; + textACPIParam.TabStop = false; + // + // textACPICommand + // + textACPICommand.Location = new Point(467, 18); + textACPICommand.Margin = new Padding(4, 3, 4, 3); + textACPICommand.Name = "textACPICommand"; + textACPICommand.PlaceholderText = "Address"; + textACPICommand.Size = new Size(242, 39); + textACPICommand.TabIndex = 21; + textACPICommand.TabStop = false; + // + // buttonACPISend + // + buttonACPISend.Activated = false; + buttonACPISend.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonACPISend.BackColor = SystemColors.ButtonHighlight; + buttonACPISend.BorderColor = Color.Transparent; + buttonACPISend.BorderRadius = 2; + buttonACPISend.FlatStyle = FlatStyle.Flat; + buttonACPISend.Location = new Point(854, 13); + buttonACPISend.Margin = new Padding(4, 3, 4, 3); + buttonACPISend.Name = "buttonACPISend"; + buttonACPISend.Secondary = false; + buttonACPISend.Size = new Size(106, 46); + buttonACPISend.TabIndex = 20; + buttonACPISend.Text = "Send"; + buttonACPISend.UseVisualStyleBackColor = false; + // + // pictureDebug + // + pictureDebug.BackgroundImage = Resources.icons8_heartbeat_32; + pictureDebug.BackgroundImageLayout = ImageLayout.Zoom; + pictureDebug.Location = new Point(20, 20); + pictureDebug.Name = "pictureDebug"; + pictureDebug.Size = new Size(32, 32); + pictureDebug.TabIndex = 1; + pictureDebug.TabStop = false; + // + // labelACPITitle + // + labelACPITitle.AutoSize = true; + labelACPITitle.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelACPITitle.Location = new Point(57, 20); + labelACPITitle.Name = "labelACPITitle"; + labelACPITitle.Size = new Size(188, 32); + labelACPITitle.TabIndex = 0; + labelACPITitle.Text = "ACPI DEVS Test"; // // Extra // @@ -1287,11 +1461,13 @@ namespace GHelper AutoScroll = true; AutoSize = true; AutoSizeMode = AutoSizeMode.GrowAndShrink; - ClientSize = new Size(1013, 1515); + ClientSize = new Size(1013, 1612); Controls.Add(panelServices); Controls.Add(panelPower); Controls.Add(panelSettings); Controls.Add(panelAPU); + Controls.Add(panelCores); + Controls.Add(panelACPI); Controls.Add(panelSettingsHeader); Controls.Add(panelBacklight); Controls.Add(panelBacklightHeader); @@ -1332,6 +1508,7 @@ namespace GHelper tableBacklight.ResumeLayout(false); panelSettingsHeader.ResumeLayout(false); panelSettingsHeader.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureScan).EndInit(); ((System.ComponentModel.ISupportInitialize)pictureLog).EndInit(); ((System.ComponentModel.ISupportInitialize)pictureSettings).EndInit(); panelSettings.ResumeLayout(false); @@ -1343,7 +1520,12 @@ namespace GHelper panelAPU.ResumeLayout(false); panelAPU.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureAPUMem).EndInit(); - ((System.ComponentModel.ISupportInitialize)pictureScan).EndInit(); + panelCores.ResumeLayout(false); + panelCores.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureCores).EndInit(); + panelACPI.ResumeLayout(false); + panelACPI.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureDebug).EndInit(); ResumeLayout(false); PerformLayout(); } @@ -1439,5 +1621,17 @@ namespace GHelper private Label labelAPUMem; private RComboBox comboAPU; private PictureBox pictureScan; + private Panel panelCores; + private RComboBox comboCoresE; + private PictureBox pictureCores; + private Label label1; + private RComboBox comboCoresP; + private RButton buttonCores; + private Panel panelACPI; + private TextBox textACPIParam; + private TextBox textACPICommand; + private RButton buttonACPISend; + private PictureBox pictureDebug; + private Label labelACPITitle; } } \ No newline at end of file diff --git a/app/Extra.cs b/app/Extra.cs index a5fc9bf9..7725d680 100644 --- a/app/Extra.cs +++ b/app/Extra.cs @@ -386,7 +386,6 @@ namespace GHelper buttonServices.Click += ButtonServices_Click; pictureLog.Click += PictureLog_Click; - pictureScan.Click += PictureScan_Click; checkGPUFix.Visible = Program.acpi.IsNVidiaGPU(); checkGPUFix.Checked = AppConfig.IsGPUFix(); @@ -394,11 +393,81 @@ namespace GHelper toolTip.SetToolTip(checkAutoToggleClamshellMode, "Disable sleep on lid close when plugged in and external monitor is connected"); + InitCores(); InitVariBright(); InitServices(); InitHibernate(); + + //InitACPITesting(); + } + private void InitACPITesting() + { + pictureScan.Visible = true; + panelACPI.Visible = true; + + textACPICommand.Text = "120075"; + textACPIParam.Text = "1"; + + buttonACPISend.Click += ButtonACPISend_Click; + pictureScan.Click += PictureScan_Click; + } + + private void ButtonACPISend_Click(object? sender, EventArgs e) + { + try { + int deviceID = Convert.ToInt32(textACPICommand.Text, 16); + int status = Convert.ToInt32(textACPIParam.Text, textACPIParam.Text.Contains("x") ? 16 : 10); + int result = Program.acpi.DeviceSet((uint)deviceID, status, "TestACPI " + deviceID.ToString("X8") + " " + status.ToString("X4")); + labelACPITitle.Text = "ACPI DEVS Test : " + result.ToString(); + } catch (Exception ex) + { + Logger.WriteLine(ex.Message); + } + } + + private void InitCores() + { + (int eCores, int pCores) = Program.acpi.GetCores(); + (int eCoresMax, int pCoresMax) = Program.acpi.GetCores(true); + + if (eCores < 0 || pCores < 0 || eCoresMax < 0 || pCoresMax < 0) + { + panelCores.Visible = false; + return; + } + + eCoresMax = Math.Max(8, eCoresMax); + pCoresMax = Math.Max(6, pCoresMax); + + panelCores.Visible = true; + + comboCoresE.DropDownStyle = ComboBoxStyle.DropDownList; + comboCoresP.DropDownStyle = ComboBoxStyle.DropDownList; + + for (int i = AsusACPI.PCoreMin; i <= pCoresMax; i++) comboCoresP.Items.Add(i.ToString() + " Pcores"); + for (int i = AsusACPI.ECoreMin; i <= eCoresMax; i++) comboCoresE.Items.Add(i.ToString() + " Ecores"); + + comboCoresP.SelectedIndex = Math.Max(Math.Min(pCores - AsusACPI.PCoreMin, comboCoresP.Items.Count - 1), 0); + comboCoresE.SelectedIndex = Math.Max(Math.Min(eCores - AsusACPI.ECoreMin, comboCoresE.Items.Count - 1), 0); + + buttonCores.Click += ButtonCores_Click; + + } + + private void ButtonCores_Click(object? sender, EventArgs e) + { + DialogResult dialogResult = MessageBox.Show(Properties.Strings.AlertAPUMemoryRestart, Properties.Strings.AlertAPUMemoryRestartTitle, MessageBoxButtons.YesNo); + + if (dialogResult == DialogResult.Yes) + { + Program.acpi.SetCores(AsusACPI.ECoreMin + comboCoresE.SelectedIndex, AsusACPI.PCoreMin + comboCoresP.SelectedIndex); + Process.Start("shutdown", "/r /t 1"); + } + } + + private void PictureScan_Click(object? sender, EventArgs e) { string logFile = Program.acpi.ScanRange(); diff --git a/app/Fans.cs b/app/Fans.cs index cdc85c34..796a02c7 100644 --- a/app/Fans.cs +++ b/app/Fans.cs @@ -953,7 +953,7 @@ namespace GHelper int chartCount = 2; // Middle / system fan check - if (!AsusACPI.IsEmptyCurve(Program.acpi.GetFanCurve(AsusFan.Mid))) + if (!AsusACPI.IsEmptyCurve(Program.acpi.GetFanCurve(AsusFan.Mid)) || Program.acpi.GetFan(AsusFan.Mid) >= 0) { AppConfig.Set("mid_fan", 1); chartCount++; diff --git a/app/GHelper.csproj b/app/GHelper.csproj index 272440aa..56011b39 100644 --- a/app/GHelper.csproj +++ b/app/GHelper.csproj @@ -15,7 +15,7 @@ AnyCPU False True - 0.154 + 0.155 diff --git a/app/Input/InputDispatcher.cs b/app/Input/InputDispatcher.cs index eebe9e4d..8c58b2b5 100644 --- a/app/Input/InputDispatcher.cs +++ b/app/Input/InputDispatcher.cs @@ -890,6 +890,7 @@ namespace GHelper.Input if (e.NewEvent is null) return; int EventID = int.Parse(e.NewEvent["EventID"].ToString()); Logger.WriteLine("WMI event " + EventID); + if (AppConfig.NoWMI()) return; HandleEvent(EventID); } } diff --git a/app/Mode/PowerNative.cs b/app/Mode/PowerNative.cs index e751fb9c..e01f3298 100644 --- a/app/Mode/PowerNative.cs +++ b/app/Mode/PowerNative.cs @@ -163,7 +163,7 @@ namespace GHelper.Mode if (status != 0 || activeScheme != guidScheme) { status = PowerSetActiveOverlayScheme(guidScheme); - Logger.WriteLine("Power Mode " + scheme + ":" + (status == 0 ? "OK" : status)); + Logger.WriteLine("Power Mode " + activeScheme + " -> " + scheme + ":" + (status == 0 ? "OK" : status)); } } diff --git a/app/Peripherals/Mouse/Models/StrixImpact.cs b/app/Peripherals/Mouse/Models/StrixImpact.cs new file mode 100644 index 00000000..a3f66219 --- /dev/null +++ b/app/Peripherals/Mouse/Models/StrixImpact.cs @@ -0,0 +1,247 @@ +namespace GHelper.Peripherals.Mouse.Models +{ + //P303 + public class StrixImpact : AsusMouse + { + public StrixImpact() : base(0x0B05, 0x1847, "mi_02", false) + { + } + + public StrixImpact(ushort productId, string path) : base(0x0B05, productId, path, false) + { + } + + public override int DPIProfileCount() + { + return 2; + } + + public override string GetDisplayName() + { + return "Strix Impact"; + } + + + public override PollingRate[] SupportedPollingrates() + { + return new PollingRate[] { + PollingRate.PR125Hz, + PollingRate.PR250Hz, + PollingRate.PR500Hz, + PollingRate.PR1000Hz + }; + } + + public override int ProfileCount() + { + return 1; + } + public override int MaxDPI() + { + return 5_000; + } + + public override bool HasRGB() + { + return true; + } + + public override bool HasAutoPowerOff() + { + return false; + } + + public override bool HasDebounceSetting() + { + return true; + } + + public override bool HasLowBatteryWarning() + { + return false; + } + + public override bool HasBattery() + { + return false; + } + + 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; + } + + public override LightingZone[] SupportedLightingZones() + { + return new LightingZone[] { LightingZone.Logo }; + } + + public override int DPIIncrements() + { + return 100; + } + + + public override int MinDPI() + { + return 200; + } + + public override bool CanChangeDPIProfile() + { + return true; + } + + public override int MaxBrightness() + { + return 4; + } + + protected override byte[] GetUpdateLightingModePacket(LightingSetting lightingSetting, LightingZone zone) + { + /* + * 51 28 00 00 [00] [04] [35 04 FF] 00 00 00 00 00 00 00 + */ + + return new byte[] { reportId, 0x51, 0x28, 0x00, 0x00, + IndexForLightingMode(lightingSetting.LightingMode), + (byte)lightingSetting.Brightness, + lightingSetting.RGBColor.R, lightingSetting.RGBColor.G, lightingSetting.RGBColor.B + }; + } + + 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 Direction, Random col, Speed + //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 12 03 00 00 [03 04 00 00 00] [03 04 00 00 00] [03 04 00 00 00] 00 [00] [00] [07] 00 00 + 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; + } + ls.AnimationDirection = SupportsAnimationDirection(ls.LightingMode) + ? (AnimationDirection)response[21] + : AnimationDirection.Clockwise; + + ls.RandomColor = SupportsRandomColor(ls.LightingMode) && response[22] == 0x01; + + ls.AnimationSpeed = SupportsAnimationSpeed(ls.LightingMode) + ? (AnimationSpeed)response[23] + : AnimationSpeed.Medium; + + if (ls.AnimationSpeed != AnimationSpeed.Fast + && ls.AnimationSpeed != AnimationSpeed.Medium + && ls.AnimationSpeed != AnimationSpeed.Slow) + { + ls.AnimationSpeed = AnimationSpeed.Medium; + } + + Logger.WriteLine(GetDisplayName() + ": Read RGB Setting for Zone " + lz[i].ToString() + ": " + ls.ToString()); + LightingSetting[i] = ls; + } + } + + + + protected override PollingRate ParsePollingRate(byte[] packet) + { + if (packet[1] == 0x12 && packet[2] == 0x04 && packet[3] == 0x00) + { + return (PollingRate)packet[9]; + } + + return PollingRate.PR125Hz; + } + + protected override byte[] GetUpdatePollingRatePacket(PollingRate pollingRate) + { + return new byte[] { reportId, 0x51, 0x31, 0x02, 0x00, (byte)pollingRate }; + } + + protected override bool ParseAngleSnapping(byte[] packet) + { + if (packet[1] == 0x12 && packet[2] == 0x04 && packet[3] == 0x00) + { + return packet[13] == 0x01; + } + + return false; + } + + protected override byte[] GetUpdateAngleSnappingPacket(bool angleSnapping) + { + return new byte[] { reportId, 0x51, 0x31, 0x04, 0x00, (byte)(angleSnapping ? 0x01 : 0x00) }; + } + + protected override DebounceTime ParseDebounce(byte[] packet) + { + if (packet[1] != 0x12 || packet[2] != 0x04 || packet[3] != 0x00) + { + return DebounceTime.MS12; + } + + if (packet[11] < 0x02) + { + return DebounceTime.MS12; + } + + if (packet[11] > 0x07) + { + return DebounceTime.MS32; + } + + return (DebounceTime)packet[11]; + } + + protected override byte[] GetUpdateDebouncePacket(DebounceTime debounce) + { + return new byte[] { reportId, 0x51, 0x31, 0x03, 0x00, ((byte)debounce) }; + } + } + +} diff --git a/app/Peripherals/PeripheralsProvider.cs b/app/Peripherals/PeripheralsProvider.cs index bfef7896..9042c5b1 100644 --- a/app/Peripherals/PeripheralsProvider.cs +++ b/app/Peripherals/PeripheralsProvider.cs @@ -215,6 +215,7 @@ namespace GHelper.Peripherals DetectMouse(new SpathaX()); DetectMouse(new StrixCarry()); DetectMouse(new StrixImpactIII()); + DetectMouse(new StrixImpact()); } public static void DetectMouse(AsusMouse am) diff --git a/app/Properties/Resources.Designer.cs b/app/Properties/Resources.Designer.cs index 8ff78342..3dcf312f 100644 --- a/app/Properties/Resources.Designer.cs +++ b/app/Properties/Resources.Designer.cs @@ -210,6 +210,16 @@ namespace GHelper.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap icons8_brightness_32 { + get { + object obj = ResourceManager.GetObject("icons8-brightness-32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -590,6 +600,16 @@ namespace GHelper.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap icons8_search_32 { + get { + object obj = ResourceManager.GetObject("icons8-search-32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/app/Properties/Resources.resx b/app/Properties/Resources.resx index 7d0ca668..c728bd5a 100644 --- a/app/Properties/Resources.resx +++ b/app/Properties/Resources.resx @@ -166,11 +166,14 @@ ..\Resources\brightness-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\brightness-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\icons8-processor-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-fiat-500-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Font.otf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ..\Resources\icons8-touchpad-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -187,9 +190,6 @@ ..\Resources\icons8-laptop-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ally.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\icons8-remove-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -214,6 +214,9 @@ ..\Resources\backlight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-brightness-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\icons8-refresh-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -250,8 +253,11 @@ ..\Resources\dot-ultimate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\brightness-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-heartbeat-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ally.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\backlight-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -283,8 +289,8 @@ ..\Resources\icons8-video-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Font.otf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\icons8-fiat-500-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\dot-eco.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -331,7 +337,7 @@ ..\Resources\icons8-charging-battery-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-heartbeat-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-search-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/app/Properties/Strings.Designer.cs b/app/Properties/Strings.Designer.cs index ac031247..0c57f92b 100644 --- a/app/Properties/Strings.Designer.cs +++ b/app/Properties/Strings.Designer.cs @@ -699,6 +699,15 @@ namespace GHelper.Properties { } } + /// + /// Looks up a localized string similar to Disable on lid close. + /// + internal static string DisableOnLidClose { + get { + return ResourceManager.GetString("DisableOnLidClose", resourceCulture); + } + } + /// /// Looks up a localized string similar to Disable screen overdrive. /// @@ -790,9 +799,9 @@ namespace GHelper.Properties { return ResourceManager.GetString("EnergySettings", resourceCulture); } } - + /// - /// Looks up a localized string similar to Export. + /// Looks up a localized string similar to Export Profile. /// internal static string Export { get { @@ -1024,9 +1033,9 @@ namespace GHelper.Properties { return ResourceManager.GetString("ImageRotation", resourceCulture); } } - + /// - /// Looks up a localized string similar to Import. + /// Looks up a localized string similar to Import Profile. /// internal static string Import { get { @@ -1294,9 +1303,9 @@ namespace GHelper.Properties { return ResourceManager.GetString("MouseButtonResponse", resourceCulture); } } - + /// - /// Looks up a localized string similar to Import failed. Selected file is not a valid mouse profile or corrutpted. + /// Looks up a localized string similar to Import failed. Selected file is not a valid mouse profile or corrutpted.. /// internal static string MouseImportFailed { get { @@ -1800,7 +1809,7 @@ namespace GHelper.Properties { } /// - /// Looks up a localized string similar to Turn off on battery. + /// Looks up a localized string similar to Disable on battery. /// internal static string TurnOffOnBattery { get { diff --git a/app/Properties/Strings.de.resx b/app/Properties/Strings.de.resx index 2bd9eb8a..6c2ca1d4 100644 --- a/app/Properties/Strings.de.resx +++ b/app/Properties/Strings.de.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Bildschirm: Overdrive abschalten diff --git a/app/Properties/Strings.es.resx b/app/Properties/Strings.es.resx index 65f47496..0d6b0823 100644 --- a/app/Properties/Strings.es.resx +++ b/app/Properties/Strings.es.resx @@ -330,6 +330,9 @@ Deshabilitar mando + + Desactivar al cerrar la tapa + Desactivar Overdrive diff --git a/app/Properties/Strings.fr.resx b/app/Properties/Strings.fr.resx index 44970cb0..fdcdfb47 100644 --- a/app/Properties/Strings.fr.resx +++ b/app/Properties/Strings.fr.resx @@ -330,6 +330,9 @@ Désactiver le contrôleur + + Disable on lid close + Désactiver l'overdrive de l'écran @@ -456,10 +459,10 @@ Voulez-vous continuer ? Rétroéclairage du clavier - Clavier de l'ordinateur + Clavier - Écran de l'ordinateur + Écran Capot @@ -588,7 +591,7 @@ Voulez-vous continuer ? Overdrive - Mode Performance + Mode Périphériques diff --git a/app/Properties/Strings.hu.resx b/app/Properties/Strings.hu.resx index 6f499b42..1e5fa166 100644 --- a/app/Properties/Strings.hu.resx +++ b/app/Properties/Strings.hu.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Képernyőtúlhajtás letiltása diff --git a/app/Properties/Strings.id.resx b/app/Properties/Strings.id.resx index 63ba02b3..35aec166 100644 --- a/app/Properties/Strings.id.resx +++ b/app/Properties/Strings.id.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Nonaktifkan screen overdrive diff --git a/app/Properties/Strings.it.resx b/app/Properties/Strings.it.resx index ce2af6e0..0963bd5f 100644 --- a/app/Properties/Strings.it.resx +++ b/app/Properties/Strings.it.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Disabilita Overdrive Schermo diff --git a/app/Properties/Strings.ko.resx b/app/Properties/Strings.ko.resx index 74a233ae..c5cde4a0 100644 --- a/app/Properties/Strings.ko.resx +++ b/app/Properties/Strings.ko.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + 화면 OD 끄기 diff --git a/app/Properties/Strings.lt.resx b/app/Properties/Strings.lt.resx index 1a950b0c..32ea18a7 100644 --- a/app/Properties/Strings.lt.resx +++ b/app/Properties/Strings.lt.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Išjungti ekrano pikselių spartinimą diff --git a/app/Properties/Strings.pl.resx b/app/Properties/Strings.pl.resx index cb9bf17e..aff4ec0a 100644 --- a/app/Properties/Strings.pl.resx +++ b/app/Properties/Strings.pl.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Wyłącz funkcję Overdrive monitora diff --git a/app/Properties/Strings.pt-BR.resx b/app/Properties/Strings.pt-BR.resx index 6480c6bb..66f25079 100644 --- a/app/Properties/Strings.pt-BR.resx +++ b/app/Properties/Strings.pt-BR.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Desativar o overdrive da tela diff --git a/app/Properties/Strings.pt-PT.resx b/app/Properties/Strings.pt-PT.resx index 4bfb8409..073a8d40 100644 --- a/app/Properties/Strings.pt-PT.resx +++ b/app/Properties/Strings.pt-PT.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Desativar o overdrive do ecrã diff --git a/app/Properties/Strings.resx b/app/Properties/Strings.resx index 64eb9e57..4855137b 100644 --- a/app/Properties/Strings.resx +++ b/app/Properties/Strings.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Disable screen overdrive @@ -699,7 +702,7 @@ Do you still want to continue? Turned off - Turn off on battery + Disable on battery Routes laptop screen to dGPU, maximizing FPS diff --git a/app/Properties/Strings.ro.resx b/app/Properties/Strings.ro.resx index 131d72f3..a19d4348 100644 --- a/app/Properties/Strings.ro.resx +++ b/app/Properties/Strings.ro.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Dezactivează screen overdrive diff --git a/app/Properties/Strings.tr.resx b/app/Properties/Strings.tr.resx index ba2e7cca..bd5fe6a9 100644 --- a/app/Properties/Strings.tr.resx +++ b/app/Properties/Strings.tr.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Ekran overdrive özelliğini devre dışı bırak diff --git a/app/Properties/Strings.uk.resx b/app/Properties/Strings.uk.resx index 4762a675..a7e3542c 100644 --- a/app/Properties/Strings.uk.resx +++ b/app/Properties/Strings.uk.resx @@ -330,6 +330,9 @@ Вимкнути контролер + + Вимкнути при закритті + Вимкнути овердрайв дисплею @@ -699,7 +702,7 @@ Вимкнений - Вимикати на батареї + Вимкнути на батареї Підключає екран лептопу до dGPU, щоб підвищити FPS diff --git a/app/Properties/Strings.vi.resx b/app/Properties/Strings.vi.resx index 5e9386a0..122d2b3a 100644 --- a/app/Properties/Strings.vi.resx +++ b/app/Properties/Strings.vi.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + Tắt Overdrive diff --git a/app/Properties/Strings.zh-CN.resx b/app/Properties/Strings.zh-CN.resx index f1b8506c..3435eb35 100644 --- a/app/Properties/Strings.zh-CN.resx +++ b/app/Properties/Strings.zh-CN.resx @@ -330,6 +330,9 @@ Disable Controller + + Disable on lid close + 禁用屏幕快速显示(OD) diff --git a/app/Properties/Strings.zh-TW.resx b/app/Properties/Strings.zh-TW.resx index 6af81473..431c070c 100644 --- a/app/Properties/Strings.zh-TW.resx +++ b/app/Properties/Strings.zh-TW.resx @@ -145,7 +145,7 @@ 現在重新啟動嗎? - Ally Controller + Ally控制器 動畫速度 @@ -277,10 +277,10 @@ Binding - Primary + 主要 - Secondary + 次要 BIOS與驅動程式更新 @@ -313,7 +313,7 @@ Contrast - Controller + 控制器 CPU 加速 @@ -328,7 +328,10 @@ 預設 - Disable Controller + 停用控制器 + + + Disable on lid close 禁用螢幕加速OD @@ -363,7 +366,7 @@ 電源設定 - Export Profile + 匯出設定檔 更多 @@ -441,7 +444,7 @@ Image Rotation - Import Profile + 匯入設定檔 按鍵綁定 @@ -531,7 +534,7 @@ 按鍵回應 - Import failed. Selected file is not a valid mouse profile or corrutpted. + 匯入失敗,所選檔案並非有效的滑鼠設定檔或該檔已毀損 響應高度(LOD) @@ -618,7 +621,7 @@ 退出 - Reset + 重設 有其他程式正在使用獨顯導致無法切換至節能模式. 是否讓G-Helper重新啟動獨顯? * 請自行評估風險 diff --git a/app/Resources/icons8-brightness-32.png b/app/Resources/icons8-brightness-32.png new file mode 100644 index 00000000..a1deb58f Binary files /dev/null and b/app/Resources/icons8-brightness-32.png differ diff --git a/app/Resources/icons8-search-32.png b/app/Resources/icons8-search-32.png new file mode 100644 index 00000000..4a37cd5b Binary files /dev/null and b/app/Resources/icons8-search-32.png differ diff --git a/app/Settings.Designer.cs b/app/Settings.Designer.cs index 73fd98a7..e08037a2 100644 --- a/app/Settings.Designer.cs +++ b/app/Settings.Designer.cs @@ -31,14 +31,17 @@ namespace GHelper private void InitializeComponent() { panelMatrix = new Panel(); + panelMatrixAuto = new Panel(); + checkMatrixLid = new CheckBox(); + checkMatrix = new CheckBox(); tableLayoutMatrix = new TableLayoutPanel(); comboMatrix = new RComboBox(); comboMatrixRunning = new RComboBox(); + comboInterval = new RComboBox(); buttonMatrix = new RButton(); panelMatrixTitle = new Panel(); pictureMatrix = new PictureBox(); labelMatrix = new Label(); - checkMatrix = new CheckBox(); panelBattery = new Panel(); buttonBatteryFull = new RButton(); sliderBattery = new Slider(); @@ -119,8 +122,14 @@ namespace GHelper panelAllyTitle = new Panel(); pictureAlly = new PictureBox(); labelAlly = new Label(); - comboInterval = new RComboBox(); + panelGamma = new Panel(); + sliderGamma = new Slider(); + panelGammaTitle = new Panel(); + labelGamma = new Label(); + pictureGamma = new PictureBox(); + labelGammaTitle = new Label(); panelMatrix.SuspendLayout(); + panelMatrixAuto.SuspendLayout(); tableLayoutMatrix.SuspendLayout(); panelMatrixTitle.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureMatrix).BeginInit(); @@ -158,6 +167,9 @@ namespace GHelper tableLayoutAlly.SuspendLayout(); panelAllyTitle.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureAlly).BeginInit(); + panelGamma.SuspendLayout(); + panelGammaTitle.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureGamma).BeginInit(); SuspendLayout(); // // panelMatrix @@ -165,18 +177,58 @@ namespace GHelper panelMatrix.AccessibleRole = AccessibleRole.Grouping; panelMatrix.AutoSize = true; panelMatrix.AutoSizeMode = AutoSizeMode.GrowAndShrink; + panelMatrix.Controls.Add(panelMatrixAuto); panelMatrix.Controls.Add(tableLayoutMatrix); panelMatrix.Controls.Add(panelMatrixTitle); - panelMatrix.Controls.Add(checkMatrix); panelMatrix.Dock = DockStyle.Top; - panelMatrix.Location = new Point(11, 827); + panelMatrix.Location = new Point(11, 950); panelMatrix.Margin = new Padding(0); panelMatrix.Name = "panelMatrix"; panelMatrix.Padding = new Padding(20, 20, 20, 10); - panelMatrix.Size = new Size(827, 176); + panelMatrix.Size = new Size(827, 194); panelMatrix.TabIndex = 3; panelMatrix.TabStop = true; // + // panelMatrixAuto + // + panelMatrixAuto.Controls.Add(checkMatrixLid); + panelMatrixAuto.Controls.Add(checkMatrix); + panelMatrixAuto.Dock = DockStyle.Top; + panelMatrixAuto.Location = new Point(20, 144); + panelMatrixAuto.Margin = new Padding(4); + panelMatrixAuto.Name = "panelMatrixAuto"; + panelMatrixAuto.Padding = new Padding(5, 0, 0, 0); + panelMatrixAuto.Size = new Size(787, 40); + panelMatrixAuto.TabIndex = 47; + // + // checkMatrixLid + // + checkMatrixLid.AutoSize = true; + checkMatrixLid.Dock = DockStyle.Left; + checkMatrixLid.ForeColor = SystemColors.GrayText; + checkMatrixLid.Location = new Point(256, 0); + checkMatrixLid.Margin = new Padding(8, 4, 8, 4); + checkMatrixLid.Name = "checkMatrixLid"; + checkMatrixLid.Size = new Size(253, 40); + checkMatrixLid.TabIndex = 46; + checkMatrixLid.Text = "Disable on lid close"; + checkMatrixLid.UseVisualStyleBackColor = true; + checkMatrixLid.Visible = false; + // + // checkMatrix + // + checkMatrix.AutoSize = true; + checkMatrix.Dock = DockStyle.Left; + checkMatrix.ForeColor = SystemColors.GrayText; + checkMatrix.Location = new Point(5, 0); + checkMatrix.Margin = new Padding(8, 4, 8, 4); + checkMatrix.Name = "checkMatrix"; + checkMatrix.Padding = new Padding(0, 0, 10, 0); + checkMatrix.Size = new Size(251, 40); + checkMatrix.TabIndex = 19; + checkMatrix.Text = Properties.Strings.TurnOffOnBattery; + checkMatrix.UseVisualStyleBackColor = true; + // // tableLayoutMatrix // tableLayoutMatrix.AutoSize = true; @@ -230,6 +282,21 @@ namespace GHelper comboMatrixRunning.Size = new Size(248, 40); comboMatrixRunning.TabIndex = 17; // + // comboInterval + // + comboInterval.BorderColor = Color.White; + comboInterval.ButtonColor = Color.FromArgb(255, 255, 255); + comboInterval.Dock = DockStyle.Top; + comboInterval.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + comboInterval.FormattingEnabled = true; + comboInterval.ItemHeight = 32; + comboInterval.Location = new Point(7, 75); + comboInterval.Margin = new Padding(7, 11, 7, 8); + comboInterval.Name = "comboInterval"; + comboInterval.Size = new Size(248, 40); + comboInterval.TabIndex = 19; + comboInterval.Visible = false; + // // buttonMatrix // buttonMatrix.Activated = false; @@ -281,18 +348,6 @@ namespace GHelper labelMatrix.TabIndex = 40; labelMatrix.Text = "Anime Matrix"; // - // checkMatrix - // - checkMatrix.AutoSize = true; - checkMatrix.ForeColor = SystemColors.GrayText; - checkMatrix.Location = new Point(27, 126); - checkMatrix.Margin = new Padding(8, 4, 8, 4); - checkMatrix.Name = "checkMatrix"; - checkMatrix.Size = new Size(249, 36); - checkMatrix.TabIndex = 19; - checkMatrix.Text = Properties.Strings.TurnOffOnBattery; - checkMatrix.UseVisualStyleBackColor = true; - // // panelBattery // panelBattery.AutoSize = true; @@ -301,7 +356,7 @@ namespace GHelper panelBattery.Controls.Add(sliderBattery); panelBattery.Controls.Add(panelBatteryTitle); panelBattery.Dock = DockStyle.Top; - panelBattery.Location = new Point(11, 1485); + panelBattery.Location = new Point(11, 1626); panelBattery.Margin = new Padding(0); panelBattery.Name = "panelBattery"; panelBattery.Padding = new Padding(20, 20, 20, 10); @@ -393,7 +448,7 @@ namespace GHelper panelFooter.AutoSizeMode = AutoSizeMode.GrowAndShrink; panelFooter.Controls.Add(tableButtons); panelFooter.Dock = DockStyle.Top; - panelFooter.Location = new Point(11, 1660); + panelFooter.Location = new Point(11, 1801); panelFooter.Margin = new Padding(0); panelFooter.Name = "panelFooter"; panelFooter.Padding = new Padding(20); @@ -1140,7 +1195,7 @@ namespace GHelper panelKeyboard.Controls.Add(tableLayoutKeyboard); panelKeyboard.Controls.Add(panelKeyboardTitle); panelKeyboard.Dock = DockStyle.Top; - panelKeyboard.Location = new Point(11, 1143); + panelKeyboard.Location = new Point(11, 1284); panelKeyboard.Margin = new Padding(0); panelKeyboard.Name = "panelKeyboard"; panelKeyboard.Padding = new Padding(20); @@ -1316,7 +1371,7 @@ namespace GHelper panelVersion.Controls.Add(labelCharge); panelVersion.Controls.Add(checkStartup); panelVersion.Dock = DockStyle.Top; - panelVersion.Location = new Point(11, 1604); + panelVersion.Location = new Point(11, 1745); panelVersion.Margin = new Padding(4); panelVersion.Name = "panelVersion"; panelVersion.Size = new Size(827, 56); @@ -1341,7 +1396,7 @@ namespace GHelper panelPeripherals.Controls.Add(tableLayoutPeripherals); panelPeripherals.Controls.Add(panelPeripheralsTile); panelPeripherals.Dock = DockStyle.Top; - panelPeripherals.Location = new Point(11, 1287); + panelPeripherals.Location = new Point(11, 1428); panelPeripherals.Margin = new Padding(0); panelPeripherals.Name = "panelPeripherals"; panelPeripherals.Padding = new Padding(20, 20, 20, 10); @@ -1483,7 +1538,7 @@ namespace GHelper panelAlly.Controls.Add(tableLayoutAlly); panelAlly.Controls.Add(panelAllyTitle); panelAlly.Dock = DockStyle.Top; - panelAlly.Location = new Point(11, 1003); + panelAlly.Location = new Point(11, 1144); panelAlly.Margin = new Padding(0); panelAlly.Name = "panelAlly"; panelAlly.Padding = new Padding(20, 20, 20, 0); @@ -1611,20 +1666,79 @@ namespace GHelper labelAlly.TabIndex = 26; labelAlly.Text = "Ally Controller"; // - // comboInterval + // panelGamma // - comboInterval.BorderColor = Color.White; - comboInterval.ButtonColor = Color.FromArgb(255, 255, 255); - comboInterval.Dock = DockStyle.Top; - comboInterval.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); - comboInterval.FormattingEnabled = true; - comboInterval.ItemHeight = 32; - comboInterval.Location = new Point(7, 75); - comboInterval.Margin = new Padding(7, 11, 7, 8); - comboInterval.Name = "comboInterval"; - comboInterval.Size = new Size(248, 40); - comboInterval.TabIndex = 19; - comboInterval.Visible = false; + panelGamma.AutoSize = true; + panelGamma.AutoSizeMode = AutoSizeMode.GrowAndShrink; + panelGamma.Controls.Add(sliderGamma); + panelGamma.Controls.Add(panelGammaTitle); + panelGamma.Dock = DockStyle.Top; + panelGamma.Location = new Point(11, 827); + panelGamma.Margin = new Padding(0); + panelGamma.Name = "panelGamma"; + panelGamma.Padding = new Padding(20, 20, 20, 10); + panelGamma.Size = new Size(827, 123); + panelGamma.TabIndex = 9; + panelGamma.Visible = false; + // + // sliderGamma + // + sliderGamma.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + sliderGamma.Location = new Point(40, 69); + sliderGamma.Margin = new Padding(4); + sliderGamma.Max = 100; + sliderGamma.Min = 0; + sliderGamma.Name = "sliderGamma"; + sliderGamma.Size = new Size(752, 40); + sliderGamma.Step = 10; + sliderGamma.TabIndex = 20; + sliderGamma.Text = "sliderGamma"; + sliderGamma.Value = 100; + // + // panelGammaTitle + // + panelGammaTitle.Controls.Add(labelGamma); + panelGammaTitle.Controls.Add(pictureGamma); + panelGammaTitle.Controls.Add(labelGammaTitle); + panelGammaTitle.Dock = DockStyle.Top; + panelGammaTitle.Location = new Point(20, 20); + panelGammaTitle.Margin = new Padding(4); + panelGammaTitle.Name = "panelGammaTitle"; + panelGammaTitle.Padding = new Padding(0, 0, 0, 4); + panelGammaTitle.Size = new Size(787, 44); + panelGammaTitle.TabIndex = 40; + // + // labelGamma + // + labelGamma.Anchor = AnchorStyles.Top | AnchorStyles.Right; + labelGamma.Location = new Point(675, 4); + labelGamma.Margin = new Padding(8, 0, 8, 0); + labelGamma.Name = "labelGamma"; + labelGamma.Size = new Size(107, 36); + labelGamma.TabIndex = 39; + labelGamma.Text = " "; + labelGamma.TextAlign = ContentAlignment.TopRight; + // + // pictureGamma + // + pictureGamma.BackgroundImage = Properties.Resources.icons8_brightness_32; + pictureGamma.BackgroundImageLayout = ImageLayout.Zoom; + pictureGamma.Location = new Point(4, 2); + pictureGamma.Margin = new Padding(4); + pictureGamma.Name = "pictureGamma"; + pictureGamma.Size = new Size(32, 32); + pictureGamma.TabIndex = 38; + pictureGamma.TabStop = false; + // + // labelGammaTitle + // + labelGammaTitle.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelGammaTitle.Location = new Point(43, 0); + labelGammaTitle.Margin = new Padding(8, 0, 8, 0); + labelGammaTitle.Name = "labelGammaTitle"; + labelGammaTitle.Size = new Size(307, 32); + labelGammaTitle.TabIndex = 37; + labelGammaTitle.Text = "Flicker-free Dimming"; // // SettingsForm // @@ -1632,7 +1746,7 @@ namespace GHelper AutoScaleMode = AutoScaleMode.Dpi; AutoSize = true; AutoSizeMode = AutoSizeMode.GrowAndShrink; - ClientSize = new Size(849, 1717); + ClientSize = new Size(849, 2119); Controls.Add(panelFooter); Controls.Add(panelVersion); Controls.Add(panelBattery); @@ -1640,6 +1754,7 @@ namespace GHelper Controls.Add(panelKeyboard); Controls.Add(panelAlly); Controls.Add(panelMatrix); + Controls.Add(panelGamma); Controls.Add(panelScreen); Controls.Add(panelGPU); Controls.Add(panelPerformance); @@ -1655,6 +1770,8 @@ namespace GHelper Text = "G-Helper"; panelMatrix.ResumeLayout(false); panelMatrix.PerformLayout(); + panelMatrixAuto.ResumeLayout(false); + panelMatrixAuto.PerformLayout(); tableLayoutMatrix.ResumeLayout(false); panelMatrixTitle.ResumeLayout(false); panelMatrixTitle.PerformLayout(); @@ -1708,6 +1825,9 @@ namespace GHelper panelAllyTitle.ResumeLayout(false); panelAllyTitle.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureAlly).EndInit(); + panelGamma.ResumeLayout(false); + panelGammaTitle.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)pictureGamma).EndInit(); ResumeLayout(false); PerformLayout(); } @@ -1803,5 +1923,13 @@ namespace GHelper private RButton buttonController; private RButton buttonOverlay; private RComboBox comboInterval; + private Panel panelGamma; + private Slider sliderGamma; + private Panel panelGammaTitle; + private Label labelGamma; + private PictureBox pictureGamma; + private Label labelGammaTitle; + private CheckBox checkMatrixLid; + private Panel panelMatrixAuto; } } diff --git a/app/Settings.cs b/app/Settings.cs index b5f122c1..b5c34a81 100644 --- a/app/Settings.cs +++ b/app/Settings.cs @@ -85,6 +85,7 @@ namespace GHelper labelPeripherals.Text = Properties.Strings.Peripherals; checkMatrix.Text = Properties.Strings.TurnOffOnBattery; + checkMatrixLid.Text = Properties.Strings.DisableOnLidClose; checkStartup.Text = Properties.Strings.RunOnStartup; buttonMatrix.Text = Properties.Strings.PictureGif; @@ -218,7 +219,7 @@ namespace GHelper sliderBattery.ValueChanged += SliderBattery_ValueChanged; Program.trayIcon.MouseMove += TrayIcon_MouseMove; - sensorTimer = new System.Timers.Timer(1000); + sensorTimer = new System.Timers.Timer(AppConfig.Get("sensor_timer",1000)); sensorTimer.Elapsed += OnTimedEvent; sensorTimer.Enabled = true; @@ -253,9 +254,19 @@ namespace GHelper VisualiseFnLock(); buttonFnLock.Click += ButtonFnLock_Click; + panelGamma.Visible = AppConfig.IsOLED(); + sliderGamma.ValueChanged += SliderGamma_ValueChanged; + labelGamma.Text = "100%"; + panelPerformance.Focus(); } + private void SliderGamma_ValueChanged(object? sender, EventArgs e) + { + screenControl.SetGamma(sliderGamma.Value); + labelGamma.Text = sliderGamma.Value + "%"; + } + private void ButtonOverlay_Click(object? sender, EventArgs e) { KeyboardHook.KeyKeyKeyPress(Keys.LControlKey, Keys.LShiftKey, Keys.O); @@ -445,10 +456,14 @@ namespace GHelper case 0: Logger.WriteLine("Lid Closed"); Aura.ApplyBrightness(0, "Lid"); + AniMatrixControl.lidClose = true; + matrixControl.SetLidMode(); break; case 1: Logger.WriteLine("Lid Open"); Aura.ApplyBrightness(InputDispatcher.GetBacklight(), "Lid"); + AniMatrixControl.lidClose = false; + matrixControl.SetLidMode(); break; } @@ -691,6 +706,11 @@ namespace GHelper matrixControl.SetBatteryAuto(); } + private void CheckMatrixLid_CheckedChanged(object? sender, EventArgs e) + { + AppConfig.Set("matrix_lid", checkMatrixLid.Checked ? 1 : 0); + matrixControl.SetLidMode(true); + } private void ButtonMatrix_Click(object? sender, EventArgs e) @@ -919,7 +939,8 @@ namespace GHelper for (int i = 1; i <= 5; i++) comboInterval.Items.Add($"Interval {i}s"); buttonMatrix.Visible = false; - } + checkMatrixLid.Visible = true; + } comboMatrix.SelectedIndex = Math.Min(AppConfig.Get("matrix_brightness", 0), comboMatrix.Items.Count - 1); comboMatrixRunning.SelectedIndex = Math.Min(AppConfig.Get("matrix_running", 0), comboMatrixRunning.Items.Count - 1); @@ -928,6 +949,10 @@ namespace GHelper checkMatrix.Checked = AppConfig.Is("matrix_auto"); checkMatrix.CheckedChanged += CheckMatrix_CheckedChanged; + checkMatrixLid.Checked = AppConfig.Is("matrix_lid"); + checkMatrixLid.CheckedChanged += CheckMatrixLid_CheckedChanged; + + } diff --git a/docs/README.md b/docs/README.md index 7062ee0b..f6cb04f7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,10 +1,10 @@ # G-Helper - Lightweight control tool for Asus laptops [![United24](https://raw.githubusercontent.com/seerge/g-helper/main/docs/ua.png)](https://u24.gov.ua/) -[![GitHub release](https://img.shields.io/github/release/seerge/g-helper.svg?style=flat-square)](https://GitHub.com/seerge/g-helper/releases/) -[![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total.svg?style=flat-square)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social)](https://GitHub.com/seerge/g-helper/stargazers/) +[![GitHub release](https://img.shields.io/github/release/seerge/g-helper)](https://GitHub.com/seerge/g-helper/releases/) +[![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social)](https://GitHub.com/seerge/g-helper/stargazers/) Small and lightweight Armoury Crate alternative for Asus laptops offering almost same functionality without extra bloat and unnecessary services. -Works with all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, Flow Z13, TUF Series, Strix / Scar Series, ProArt, VivoBook and many more! +Works with all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, Flow Z13, TUF Series, Strix / Scar Series, ProArt, VivoBook, Ally and many more! # [:floppy_disk:Download](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip) @@ -124,6 +124,14 @@ Huge thanks to [@IceStormNG](https://github.com/IceStormNG) 👑 for contributio - ``Ctrl + Shift + Alt + F20`` - Custom 2 (if exists) - [Custom keybindings / hotkeys](https://github.com/seerge/g-helper/wiki/Power-user-settings#custom-hotkey-actions) +### 🎮ROG Ally Bindings +- ``M + DPad Left / Right`` - Display Brightness +- ``M + DPad Up`` - Touch keyboard +- ``M + DPad Down`` - Show desktop +- ``M + Y`` - Toggle AMD overay +- ``M + X`` - Screenshot +- ``M + Right Stick Click`` - Controller Mode + ------------------ #### If you like the app you can make a Donation