diff --git a/app/Display/ScreenControl.cs b/app/Display/ScreenControl.cs index d588f368..421ccdc7 100644 --- a/app/Display/ScreenControl.cs +++ b/app/Display/ScreenControl.cs @@ -1,14 +1,33 @@ using GHelper.Helpers; using GHelper.Mode; +using GHelper.USB; using System.Management; namespace GHelper.Display { - enum SplendidCommand: int + public enum SplendidGamut : int + { + Native = 50, + sRGB = 51, + DCIP3 = 53, + DisplayP3 = 54 + } + + public enum SplendidCommand: int { Init = 10, DimmingAsus = 9, - DimmingVisual = 19 + DimmingVisual = 19, + GamutMode = 200, + + Default = 11, + Racing = 21, + Scenery = 22, + RTS = 23, + FPS = 24, + Cinema = 25, + Vivid = 13, + Eyecare = 17, } public static class ScreenControl @@ -24,10 +43,71 @@ namespace GHelper.Display private static System.Timers.Timer brightnessTimer = new System.Timers.Timer(100); + static ScreenControl () { brightnessTimer.Elapsed += BrightnessTimerTimer_Elapsed; } + + public static Dictionary GetGamutModes () + { + Dictionary _modes = new Dictionary(); + + 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; + } + + public static Dictionary GetVisualModes() + { + return new Dictionary + { + { 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) diff --git a/app/Settings.Designer.cs b/app/Settings.Designer.cs index e08037a2..25943bd9 100644 --- a/app/Settings.Designer.cs +++ b/app/Settings.Designer.cs @@ -123,6 +123,9 @@ namespace GHelper pictureAlly = new PictureBox(); labelAlly = new Label(); panelGamma = new Panel(); + tableVisual = new TableLayoutPanel(); + comboVisual = new RComboBox(); + comboGamut = new RComboBox(); sliderGamma = new Slider(); panelGammaTitle = new Panel(); labelGamma = new Label(); @@ -168,6 +171,7 @@ namespace GHelper panelAllyTitle.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureAlly).BeginInit(); panelGamma.SuspendLayout(); + tableVisual.SuspendLayout(); panelGammaTitle.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureGamma).BeginInit(); SuspendLayout(); @@ -181,7 +185,7 @@ namespace GHelper panelMatrix.Controls.Add(tableLayoutMatrix); panelMatrix.Controls.Add(panelMatrixTitle); panelMatrix.Dock = DockStyle.Top; - panelMatrix.Location = new Point(11, 950); + panelMatrix.Location = new Point(11, 1000); panelMatrix.Margin = new Padding(0); panelMatrix.Name = "panelMatrix"; panelMatrix.Padding = new Padding(20, 20, 20, 10); @@ -356,7 +360,7 @@ namespace GHelper panelBattery.Controls.Add(sliderBattery); panelBattery.Controls.Add(panelBatteryTitle); panelBattery.Dock = DockStyle.Top; - panelBattery.Location = new Point(11, 1626); + panelBattery.Location = new Point(11, 1676); panelBattery.Margin = new Padding(0); panelBattery.Name = "panelBattery"; panelBattery.Padding = new Padding(20, 20, 20, 10); @@ -448,7 +452,7 @@ namespace GHelper panelFooter.AutoSizeMode = AutoSizeMode.GrowAndShrink; panelFooter.Controls.Add(tableButtons); panelFooter.Dock = DockStyle.Top; - panelFooter.Location = new Point(11, 1801); + panelFooter.Location = new Point(11, 1851); panelFooter.Margin = new Padding(0); panelFooter.Name = "panelFooter"; panelFooter.Padding = new Padding(20); @@ -1195,7 +1199,7 @@ namespace GHelper panelKeyboard.Controls.Add(tableLayoutKeyboard); panelKeyboard.Controls.Add(panelKeyboardTitle); panelKeyboard.Dock = DockStyle.Top; - panelKeyboard.Location = new Point(11, 1284); + panelKeyboard.Location = new Point(11, 1334); panelKeyboard.Margin = new Padding(0); panelKeyboard.Name = "panelKeyboard"; panelKeyboard.Padding = new Padding(20); @@ -1371,7 +1375,7 @@ namespace GHelper panelVersion.Controls.Add(labelCharge); panelVersion.Controls.Add(checkStartup); panelVersion.Dock = DockStyle.Top; - panelVersion.Location = new Point(11, 1745); + panelVersion.Location = new Point(11, 1795); panelVersion.Margin = new Padding(4); panelVersion.Name = "panelVersion"; panelVersion.Size = new Size(827, 56); @@ -1396,7 +1400,7 @@ namespace GHelper panelPeripherals.Controls.Add(tableLayoutPeripherals); panelPeripherals.Controls.Add(panelPeripheralsTile); panelPeripherals.Dock = DockStyle.Top; - panelPeripherals.Location = new Point(11, 1428); + panelPeripherals.Location = new Point(11, 1478); panelPeripherals.Margin = new Padding(0); panelPeripherals.Name = "panelPeripherals"; panelPeripherals.Padding = new Padding(20, 20, 20, 10); @@ -1538,7 +1542,7 @@ namespace GHelper panelAlly.Controls.Add(tableLayoutAlly); panelAlly.Controls.Add(panelAllyTitle); panelAlly.Dock = DockStyle.Top; - panelAlly.Location = new Point(11, 1144); + panelAlly.Location = new Point(11, 1194); panelAlly.Margin = new Padding(0); panelAlly.Name = "panelAlly"; panelAlly.Padding = new Padding(20, 20, 20, 0); @@ -1670,6 +1674,7 @@ namespace GHelper // panelGamma.AutoSize = true; panelGamma.AutoSizeMode = AutoSizeMode.GrowAndShrink; + panelGamma.Controls.Add(tableVisual); panelGamma.Controls.Add(sliderGamma); panelGamma.Controls.Add(panelGammaTitle); panelGamma.Dock = DockStyle.Top; @@ -1677,23 +1682,78 @@ namespace GHelper panelGamma.Margin = new Padding(0); panelGamma.Name = "panelGamma"; panelGamma.Padding = new Padding(20, 20, 20, 10); - panelGamma.Size = new Size(827, 123); + panelGamma.Size = new Size(827, 173); panelGamma.TabIndex = 9; panelGamma.Visible = false; // + // tableVisual + // + tableVisual.AutoSize = true; + tableVisual.AutoSizeMode = AutoSizeMode.GrowAndShrink; + tableVisual.ColumnCount = 3; + tableVisual.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F)); + tableVisual.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F)); + tableVisual.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F)); + tableVisual.Controls.Add(comboVisual, 0, 0); + tableVisual.Controls.Add(comboGamut, 0, 0); + tableVisual.Dock = DockStyle.Top; + tableVisual.Location = new Point(20, 104); + tableVisual.Margin = new Padding(8); + tableVisual.Name = "tableVisual"; + tableVisual.RowCount = 1; + tableVisual.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); + tableVisual.Size = new Size(787, 59); + tableVisual.TabIndex = 41; + tableVisual.Visible = false; + // + // comboVisual + // + comboVisual.BorderColor = Color.White; + comboVisual.ButtonColor = Color.FromArgb(255, 255, 255); + comboVisual.Dock = DockStyle.Top; + comboVisual.FlatStyle = FlatStyle.Flat; + comboVisual.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + comboVisual.FormattingEnabled = true; + comboVisual.ItemHeight = 32; + comboVisual.Items.AddRange(new object[] { "Static", "Breathe", "Rainbow", "Strobe" }); + comboVisual.Location = new Point(266, 11); + comboVisual.Margin = new Padding(4, 11, 4, 8); + comboVisual.Name = "comboVisual"; + comboVisual.Size = new Size(254, 40); + comboVisual.TabIndex = 14; + comboVisual.Visible = false; + // + // comboGamut + // + comboGamut.BorderColor = Color.White; + comboGamut.ButtonColor = Color.FromArgb(255, 255, 255); + comboGamut.Dock = DockStyle.Top; + comboGamut.FlatStyle = FlatStyle.Flat; + comboGamut.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + comboGamut.FormattingEnabled = true; + comboGamut.ItemHeight = 32; + comboGamut.Items.AddRange(new object[] { "Static", "Breathe", "Rainbow", "Strobe" }); + comboGamut.Location = new Point(4, 11); + comboGamut.Margin = new Padding(4, 11, 4, 8); + comboGamut.Name = "comboGamut"; + comboGamut.Size = new Size(254, 40); + comboGamut.TabIndex = 13; + comboGamut.Visible = false; + // // sliderGamma // - sliderGamma.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - sliderGamma.Location = new Point(40, 69); + sliderGamma.Dock = DockStyle.Top; + sliderGamma.Location = new Point(20, 64); sliderGamma.Margin = new Padding(4); sliderGamma.Max = 100; sliderGamma.Min = 0; sliderGamma.Name = "sliderGamma"; - sliderGamma.Size = new Size(752, 40); + sliderGamma.Size = new Size(787, 40); sliderGamma.Step = 10; sliderGamma.TabIndex = 20; sliderGamma.Text = "sliderGamma"; sliderGamma.Value = 100; + sliderGamma.Visible = false; // // panelGammaTitle // @@ -1736,7 +1796,7 @@ namespace GHelper labelGammaTitle.Location = new Point(43, 0); labelGammaTitle.Margin = new Padding(8, 0, 8, 0); labelGammaTitle.Name = "labelGammaTitle"; - labelGammaTitle.Size = new Size(307, 32); + labelGammaTitle.Size = new Size(506, 32); labelGammaTitle.TabIndex = 37; labelGammaTitle.Text = "Flicker-free Dimming"; // @@ -1746,7 +1806,7 @@ namespace GHelper AutoScaleMode = AutoScaleMode.Dpi; AutoSize = true; AutoSizeMode = AutoSizeMode.GrowAndShrink; - ClientSize = new Size(849, 2119); + ClientSize = new Size(849, 1759); Controls.Add(panelFooter); Controls.Add(panelVersion); Controls.Add(panelBattery); @@ -1826,6 +1886,8 @@ namespace GHelper panelAllyTitle.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureAlly).EndInit(); panelGamma.ResumeLayout(false); + panelGamma.PerformLayout(); + tableVisual.ResumeLayout(false); panelGammaTitle.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)pictureGamma).EndInit(); ResumeLayout(false); @@ -1931,5 +1993,8 @@ namespace GHelper private Label labelGammaTitle; private CheckBox checkMatrixLid; private Panel panelMatrixAuto; + private TableLayoutPanel tableVisual; + private RComboBox comboVisual; + private RComboBox comboGamut; } } diff --git a/app/Settings.cs b/app/Settings.cs index 1b8bb5dd..be1c523e 100644 --- a/app/Settings.cs +++ b/app/Settings.cs @@ -256,18 +256,66 @@ namespace GHelper buttonFnLock.Click += ButtonFnLock_Click; panelPerformance.Focus(); - - InitBrightness(); + InitVisual(); } - public void InitBrightness() - { - if (!AppConfig.IsOLED()) return; - panelGamma.Visible = true; - VisualiseBrightness(); - sliderGamma.ValueChanged += SliderGamma_ValueChanged; - //sliderGamma.MouseUp += SliderGamma_ValueChanged; + public void InitVisual() + { + + bool dimming = false; + + if (AppConfig.IsOLED()) + { + dimming = true; + labelGammaTitle.Text = "Flicker-free Dimming"; + panelGamma.Visible = true; + sliderGamma.Visible = true; + VisualiseBrightness(); + sliderGamma.ValueChanged += SliderGamma_ValueChanged; + } + + var gamuts = ScreenControl.GetGamutModes(); + if (gamuts.Count < 1) return; + + if (!dimming) labelGammaTitle.Text = "Visual Mode"; + else labelGammaTitle.Text += " / Visual"; + + panelGamma.Visible = true; + tableVisual.Visible = true; + + comboVisual.DropDownStyle = ComboBoxStyle.DropDownList; + comboVisual.DataSource = new BindingSource(ScreenControl.GetVisualModes(), null); + comboVisual.DisplayMember = "Value"; + comboVisual.ValueMember = "Key"; + comboVisual.SelectedValue = (SplendidCommand)AppConfig.Get("visual", (int)SplendidCommand.Default); + + comboVisual.SelectedValueChanged += ComboVisual_SelectedValueChanged; + comboVisual.Visible = true; + + if (gamuts.Count <= 1) return; + + comboGamut.DropDownStyle = ComboBoxStyle.DropDownList; + comboGamut.DataSource = new BindingSource(gamuts, null); + comboGamut.DisplayMember = "Value"; + comboGamut.ValueMember = "Key"; + comboGamut.SelectedValue = (SplendidGamut)AppConfig.Get("gamut", (int)SplendidGamut.Native); + + comboGamut.SelectedValueChanged += ComboGamut_SelectedValueChanged; + comboGamut.Visible = true; + + } + + private void ComboGamut_SelectedValueChanged(object? sender, EventArgs e) + { + AppConfig.Set("gamut", (int)comboGamut.SelectedValue); + ScreenControl.SetGamut((int)comboGamut.SelectedValue); + } + + private void ComboVisual_SelectedValueChanged(object? sender, EventArgs e) + { + AppConfig.Set("visual", (int)comboVisual.SelectedValue); + ScreenControl.SetVisual((SplendidCommand)comboVisual.SelectedValue); } public void VisualiseBrightness()