diff --git a/ColorControl/ColorControl.csproj b/ColorControl/ColorControl.csproj
index 560c86d..b449bd4 100644
--- a/ColorControl/ColorControl.csproj
+++ b/ColorControl/ColorControl.csproj
@@ -18,8 +18,8 @@
Maassoft
Maassoft
0
- 9.8.2.1
- 9.8.2.1
+ 9.9.0.0
+ 9.9.0.0
false
true
false
diff --git a/ColorControl/MainForm.cs b/ColorControl/MainForm.cs
index d657b49..c656b04 100644
--- a/ColorControl/MainForm.cs
+++ b/ColorControl/MainForm.cs
@@ -38,7 +38,6 @@ namespace ColorControl
private readonly KeyboardShortcutDispatcher _keyboardShortcutDispatcher;
private readonly UpdateManager _updateManager;
private Config _config;
- private bool _setVisibleCalled = false;
private LgPanel _lgPanel;
private SamsungPanel _samsungPanel;
@@ -48,8 +47,8 @@ namespace ColorControl
private GamePanel _gamePanel;
- public MainForm(GlobalContext globalContext, ServiceManager serviceManager,
- IServiceProvider serviceProvider, ElevationService elevationService, NotifyIconManager notifyIconManager, KeyboardShortcutDispatcher keyboardShortcutDispatcher, UpdateManager updateManager)
+ public MainForm(GlobalContext globalContext, ServiceManager serviceManager, IServiceProvider serviceProvider, ElevationService elevationService,
+ NotifyIconManager notifyIconManager, KeyboardShortcutDispatcher keyboardShortcutDispatcher, UpdateManager updateManager)
{
InitializeComponent();
@@ -117,6 +116,8 @@ namespace ColorControl
panel.Size = tabPage.ClientSize;
panel.BackColor = SystemColors.Window;
+ //Logger.Debug($"Panel {panel.GetType().Name}, size: {panel.Size.Width}x{panel.Size.Height}");
+
return panel;
}
catch (Exception ex)
@@ -136,7 +137,12 @@ namespace ColorControl
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
- if (!(SystemShutdown || EndSession || Program.UserExit) && _config.MinimizeOnClose)
+ if (Program.UserExit)
+ {
+ return;
+ }
+
+ if (!(SystemShutdown || EndSession) && _config.MinimizeOnClose)
{
e.Cancel = true;
WindowState = FormWindowState.Minimized;
@@ -149,9 +155,9 @@ namespace ColorControl
if (SystemShutdown)
{
Logger.Debug($"MainForm_FormClosing: SystemShutdown");
-
- //_powerEventDispatcher.SendEvent(PowerEventDispatcher.Event_Shutdown);
}
+
+ Program.Exit();
}
private void GlobalSave()
@@ -232,33 +238,13 @@ namespace ColorControl
Utils.WriteObject(Program.ConfigFilename, _config);
}
- private async void MainForm_Shown(object sender, EventArgs e)
+ private void MainForm_Shown(object sender, EventArgs e)
{
InitSelectedTab();
_elevationService.CheckElevationMethod();
}
- protected override void SetVisibleCore(bool value)
- {
- //if (!_setVisibleCalled && _config.StartMinimized && !Debugger.IsAttached)
- //{
- // _setVisibleCalled = true;
- // if (_config.MinimizeToTray)
- // {
- // value = false;
- // }
- // else
- // {
- // WindowState = FormWindowState.Minimized;
- // }
- //}
- if (!IsDisposed)
- {
- base.SetVisibleCore(value);
- }
- }
-
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
InitSelectedTab();
@@ -282,7 +268,7 @@ namespace ColorControl
private void InitOptionsTab()
{
- if (tabInfo.Controls.Count > 0)
+ if (tabOptions.Controls.Count > 0)
{
return;
}
@@ -328,10 +314,6 @@ namespace ColorControl
{
await _amdPanel.AfterInitialized();
}
- //if (_trayIcon.Visible)
- //{
- // await CheckForUpdates();
- //}
}
private void MainForm_Deactivate(object sender, EventArgs e)
diff --git a/ColorControl/MainWorker.cs b/ColorControl/MainWorker.cs
index f84d48f..9ddbfef 100644
--- a/ColorControl/MainWorker.cs
+++ b/ColorControl/MainWorker.cs
@@ -30,7 +30,6 @@ internal class MainWorker
private readonly WinApiService _winApiService;
private readonly WinApiAdminService _winApiAdminService;
private readonly UpdateManager _updateManager;
- private bool _isInitialized;
private bool _queryEndSession;
private nint _screenStateNotify;
@@ -62,28 +61,22 @@ internal class MainWorker
public async Task DoWork()
{
- while (!_backgroundWorker.CancellationPending)
+ if (_backgroundWorker.CancellationPending)
{
+ return;
+ }
- if (!_isInitialized)
- {
- await Init();
- }
+ await Init();
- //await Task.Delay(1000);
+ System.Windows.Forms.Application.Run(_windowMessageDispatcher.MessageForm);
- System.Windows.Forms.Application.Run(_windowMessageDispatcher.MessageForm);
+ _serviceManager.Save();
+ _notifyIconManager.HideIcon();
- _serviceManager.Save();
- _notifyIconManager.HideIcon();
-
- if (_screenStateNotify != 0)
- {
- WinApi.UnregisterPowerSettingNotification(_screenStateNotify);
- _screenStateNotify = 0;
- }
-
- break;
+ if (_screenStateNotify != 0)
+ {
+ WinApi.UnregisterPowerSettingNotification(_screenStateNotify);
+ _screenStateNotify = 0;
}
}
@@ -116,8 +109,6 @@ internal class MainWorker
_keyboardShortcutDispatcher.RegisterShortcut(SHORTCUTID_SCREENSAVER, _config.ScreenSaverShortcut);
_keyboardShortcutDispatcher.RegisterEventHandler(KeyboardShortcutDispatcher.Event_HotKey, HandleHotKeyEvent);
-
- _isInitialized = true;
}
private bool _startupSent = false;
diff --git a/ColorControl/Services/AMD/AmdPanel.Designer.cs b/ColorControl/Services/AMD/AmdPanel.Designer.cs
index fac2fed..71f9397 100644
--- a/ColorControl/Services/AMD/AmdPanel.Designer.cs
+++ b/ColorControl/Services/AMD/AmdPanel.Designer.cs
@@ -28,384 +28,395 @@
///
private void InitializeComponent()
{
- this.components = new System.ComponentModel.Container();
- this.btnAmdSettings = new System.Windows.Forms.Button();
- this.chkAmdQuickAccess = new System.Windows.Forms.CheckBox();
- this.lblAmdPresetName = new System.Windows.Forms.Label();
- this.edtAmdPresetName = new System.Windows.Forms.TextBox();
- this.btnAddAmd = new System.Windows.Forms.Button();
- this.lblErrorAMD = new System.Windows.Forms.Label();
- this.btnDeleteAmd = new System.Windows.Forms.Button();
- this.btnCloneAmd = new System.Windows.Forms.Button();
- this.btnAmdPresetSave = new System.Windows.Forms.Button();
- this.lblAmdShortcut = new System.Windows.Forms.Label();
- this.edtAmdShortcut = new System.Windows.Forms.TextBox();
- this.btnChangeAmd = new System.Windows.Forms.Button();
- this.mnuAmdPresets = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.miAmdApply = new System.Windows.Forms.ToolStripMenuItem();
- this.miAmdPresetApplyOnStartup = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
- this.mnuAmdDisplay = new System.Windows.Forms.ToolStripMenuItem();
- this.miAmdPrimaryDisplay = new System.Windows.Forms.ToolStripMenuItem();
- this.mnuAmdColorSettings = new System.Windows.Forms.ToolStripMenuItem();
- this.miAmdColorSettingsIncluded = new System.Windows.Forms.ToolStripMenuItem();
- this.mnuAmdRefreshRate = new System.Windows.Forms.ToolStripMenuItem();
- this.miAmdRefreshRateIncluded = new System.Windows.Forms.ToolStripMenuItem();
- this.mnuAmdDithering = new System.Windows.Forms.ToolStripMenuItem();
- this.miAmdDitheringIncluded = new System.Windows.Forms.ToolStripMenuItem();
- this.mnuAmdHDR = new System.Windows.Forms.ToolStripMenuItem();
- this.miAmdHDRIncluded = new System.Windows.Forms.ToolStripMenuItem();
- this.miAmdHDRToggle = new System.Windows.Forms.ToolStripMenuItem();
- this.miAmdHDREnabled = new System.Windows.Forms.ToolStripMenuItem();
- this.miAmdCopyId = new System.Windows.Forms.ToolStripMenuItem();
- this.btnApplyAmd = new System.Windows.Forms.Button();
- this.lvAmdPresets = new System.Windows.Forms.ListView();
- this.mnuAmdPresets.SuspendLayout();
- this.SuspendLayout();
+ components = new System.ComponentModel.Container();
+ btnAmdSettings = new System.Windows.Forms.Button();
+ chkAmdQuickAccess = new System.Windows.Forms.CheckBox();
+ lblAmdPresetName = new System.Windows.Forms.Label();
+ edtAmdPresetName = new System.Windows.Forms.TextBox();
+ btnAddAmd = new System.Windows.Forms.Button();
+ lblErrorAMD = new System.Windows.Forms.Label();
+ btnDeleteAmd = new System.Windows.Forms.Button();
+ btnCloneAmd = new System.Windows.Forms.Button();
+ btnAmdPresetSave = new System.Windows.Forms.Button();
+ lblAmdShortcut = new System.Windows.Forms.Label();
+ edtAmdShortcut = new System.Windows.Forms.TextBox();
+ btnChangeAmd = new System.Windows.Forms.Button();
+ mnuAmdPresets = new System.Windows.Forms.ContextMenuStrip(components);
+ miAmdApply = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdPresetApplyOnStartup = new System.Windows.Forms.ToolStripMenuItem();
+ toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+ mnuAmdDisplay = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdPrimaryDisplay = new System.Windows.Forms.ToolStripMenuItem();
+ mnuAmdColorSettings = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdColorSettingsIncluded = new System.Windows.Forms.ToolStripMenuItem();
+ mnuAmdRefreshRate = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdRefreshRateIncluded = new System.Windows.Forms.ToolStripMenuItem();
+ mnuAmdResolution = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdResolutionIncluded = new System.Windows.Forms.ToolStripMenuItem();
+ mnuAmdDithering = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdDitheringIncluded = new System.Windows.Forms.ToolStripMenuItem();
+ mnuAmdHDR = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdHDRIncluded = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdHDRToggle = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdHDREnabled = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdCopyId = new System.Windows.Forms.ToolStripMenuItem();
+ btnApplyAmd = new System.Windows.Forms.Button();
+ lvAmdPresets = new System.Windows.Forms.ListView();
+ miAmdActiveResolution = new System.Windows.Forms.ToolStripMenuItem();
+ miAmdVirtualResolution = new System.Windows.Forms.ToolStripMenuItem();
+ mnuAmdPresets.SuspendLayout();
+ SuspendLayout();
//
// btnAmdSettings
//
- this.btnAmdSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.btnAmdSettings.Location = new System.Drawing.Point(1017, 429);
- this.btnAmdSettings.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.btnAmdSettings.Name = "btnAmdSettings";
- this.btnAmdSettings.Size = new System.Drawing.Size(88, 27);
- this.btnAmdSettings.TabIndex = 60;
- this.btnAmdSettings.Text = "Settings...";
- this.btnAmdSettings.UseVisualStyleBackColor = true;
- this.btnAmdSettings.Click += new System.EventHandler(this.btnAmdSettings_Click);
+ btnAmdSettings.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+ btnAmdSettings.Location = new System.Drawing.Point(1017, 429);
+ btnAmdSettings.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ btnAmdSettings.Name = "btnAmdSettings";
+ btnAmdSettings.Size = new System.Drawing.Size(88, 27);
+ btnAmdSettings.TabIndex = 60;
+ btnAmdSettings.Text = "Settings...";
+ btnAmdSettings.UseVisualStyleBackColor = true;
+ btnAmdSettings.Click += btnAmdSettings_Click;
//
// chkAmdQuickAccess
//
- this.chkAmdQuickAccess.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.chkAmdQuickAccess.AutoSize = true;
- this.chkAmdQuickAccess.Enabled = false;
- this.chkAmdQuickAccess.Location = new System.Drawing.Point(343, 465);
- this.chkAmdQuickAccess.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.chkAmdQuickAccess.Name = "chkAmdQuickAccess";
- this.chkAmdQuickAccess.Size = new System.Drawing.Size(141, 19);
- this.chkAmdQuickAccess.TabIndex = 46;
- this.chkAmdQuickAccess.Text = "Show in Quick Access";
- this.chkAmdQuickAccess.UseVisualStyleBackColor = true;
+ chkAmdQuickAccess.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ chkAmdQuickAccess.AutoSize = true;
+ chkAmdQuickAccess.Enabled = false;
+ chkAmdQuickAccess.Location = new System.Drawing.Point(343, 465);
+ chkAmdQuickAccess.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ chkAmdQuickAccess.Name = "chkAmdQuickAccess";
+ chkAmdQuickAccess.Size = new System.Drawing.Size(141, 19);
+ chkAmdQuickAccess.TabIndex = 46;
+ chkAmdQuickAccess.Text = "Show in Quick Access";
+ chkAmdQuickAccess.UseVisualStyleBackColor = true;
//
// lblAmdPresetName
//
- this.lblAmdPresetName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.lblAmdPresetName.AutoSize = true;
- this.lblAmdPresetName.Location = new System.Drawing.Point(7, 466);
- this.lblAmdPresetName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
- this.lblAmdPresetName.Name = "lblAmdPresetName";
- this.lblAmdPresetName.Size = new System.Drawing.Size(42, 15);
- this.lblAmdPresetName.TabIndex = 24;
- this.lblAmdPresetName.Text = "Name:";
+ lblAmdPresetName.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ lblAmdPresetName.AutoSize = true;
+ lblAmdPresetName.Location = new System.Drawing.Point(7, 466);
+ lblAmdPresetName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ lblAmdPresetName.Name = "lblAmdPresetName";
+ lblAmdPresetName.Size = new System.Drawing.Size(42, 15);
+ lblAmdPresetName.TabIndex = 24;
+ lblAmdPresetName.Text = "Name:";
//
// edtAmdPresetName
//
- this.edtAmdPresetName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.edtAmdPresetName.Enabled = false;
- this.edtAmdPresetName.Location = new System.Drawing.Point(102, 463);
- this.edtAmdPresetName.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.edtAmdPresetName.Name = "edtAmdPresetName";
- this.edtAmdPresetName.Size = new System.Drawing.Size(233, 23);
- this.edtAmdPresetName.TabIndex = 23;
+ edtAmdPresetName.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ edtAmdPresetName.Enabled = false;
+ edtAmdPresetName.Location = new System.Drawing.Point(102, 463);
+ edtAmdPresetName.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ edtAmdPresetName.Name = "edtAmdPresetName";
+ edtAmdPresetName.Size = new System.Drawing.Size(233, 23);
+ edtAmdPresetName.TabIndex = 23;
//
// btnAddAmd
//
- this.btnAddAmd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.btnAddAmd.Location = new System.Drawing.Point(385, 429);
- this.btnAddAmd.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.btnAddAmd.Name = "btnAddAmd";
- this.btnAddAmd.Size = new System.Drawing.Size(88, 27);
- this.btnAddAmd.TabIndex = 18;
- this.btnAddAmd.Text = "Add";
- this.btnAddAmd.UseVisualStyleBackColor = true;
- this.btnAddAmd.Click += new System.EventHandler(this.btnAddAmd_Click);
+ btnAddAmd.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ btnAddAmd.Location = new System.Drawing.Point(385, 429);
+ btnAddAmd.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ btnAddAmd.Name = "btnAddAmd";
+ btnAddAmd.Size = new System.Drawing.Size(88, 27);
+ btnAddAmd.TabIndex = 18;
+ btnAddAmd.Text = "Add";
+ btnAddAmd.UseVisualStyleBackColor = true;
+ btnAddAmd.Click += btnAddAmd_Click;
//
// lblErrorAMD
//
- this.lblErrorAMD.AutoSize = true;
- this.lblErrorAMD.Location = new System.Drawing.Point(7, 7);
- this.lblErrorAMD.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
- this.lblErrorAMD.Name = "lblErrorAMD";
- this.lblErrorAMD.Size = new System.Drawing.Size(53, 15);
- this.lblErrorAMD.TabIndex = 8;
- this.lblErrorAMD.Text = "ErrorText";
- this.lblErrorAMD.Visible = false;
+ lblErrorAMD.AutoSize = true;
+ lblErrorAMD.Location = new System.Drawing.Point(7, 7);
+ lblErrorAMD.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ lblErrorAMD.Name = "lblErrorAMD";
+ lblErrorAMD.Size = new System.Drawing.Size(53, 15);
+ lblErrorAMD.TabIndex = 8;
+ lblErrorAMD.Text = "ErrorText";
+ lblErrorAMD.Visible = false;
//
// btnDeleteAmd
//
- this.btnDeleteAmd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.btnDeleteAmd.Enabled = false;
- this.btnDeleteAmd.Location = new System.Drawing.Point(290, 429);
- this.btnDeleteAmd.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.btnDeleteAmd.Name = "btnDeleteAmd";
- this.btnDeleteAmd.Size = new System.Drawing.Size(88, 27);
- this.btnDeleteAmd.TabIndex = 17;
- this.btnDeleteAmd.Text = "Delete";
- this.btnDeleteAmd.UseVisualStyleBackColor = true;
- this.btnDeleteAmd.Click += new System.EventHandler(this.btnDeleteAmd_Click);
+ btnDeleteAmd.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ btnDeleteAmd.Enabled = false;
+ btnDeleteAmd.Location = new System.Drawing.Point(290, 429);
+ btnDeleteAmd.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ btnDeleteAmd.Name = "btnDeleteAmd";
+ btnDeleteAmd.Size = new System.Drawing.Size(88, 27);
+ btnDeleteAmd.TabIndex = 17;
+ btnDeleteAmd.Text = "Delete";
+ btnDeleteAmd.UseVisualStyleBackColor = true;
+ btnDeleteAmd.Click += btnDeleteAmd_Click;
//
// btnCloneAmd
//
- this.btnCloneAmd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.btnCloneAmd.Enabled = false;
- this.btnCloneAmd.Location = new System.Drawing.Point(196, 429);
- this.btnCloneAmd.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.btnCloneAmd.Name = "btnCloneAmd";
- this.btnCloneAmd.Size = new System.Drawing.Size(88, 27);
- this.btnCloneAmd.TabIndex = 16;
- this.btnCloneAmd.Text = "Clone";
- this.btnCloneAmd.UseVisualStyleBackColor = true;
- this.btnCloneAmd.Click += new System.EventHandler(this.btnCloneAmd_Click);
+ btnCloneAmd.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ btnCloneAmd.Enabled = false;
+ btnCloneAmd.Location = new System.Drawing.Point(196, 429);
+ btnCloneAmd.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ btnCloneAmd.Name = "btnCloneAmd";
+ btnCloneAmd.Size = new System.Drawing.Size(88, 27);
+ btnCloneAmd.TabIndex = 16;
+ btnCloneAmd.Text = "Clone";
+ btnCloneAmd.UseVisualStyleBackColor = true;
+ btnCloneAmd.Click += btnCloneAmd_Click;
//
// btnAmdPresetSave
//
- this.btnAmdPresetSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.btnAmdPresetSave.Enabled = false;
- this.btnAmdPresetSave.Location = new System.Drawing.Point(479, 429);
- this.btnAmdPresetSave.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.btnAmdPresetSave.Name = "btnAmdPresetSave";
- this.btnAmdPresetSave.Size = new System.Drawing.Size(88, 27);
- this.btnAmdPresetSave.TabIndex = 15;
- this.btnAmdPresetSave.Text = "Save";
- this.btnAmdPresetSave.UseVisualStyleBackColor = true;
- this.btnAmdPresetSave.Click += new System.EventHandler(this.btnSetAmdShortcut_Click);
+ btnAmdPresetSave.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ btnAmdPresetSave.Enabled = false;
+ btnAmdPresetSave.Location = new System.Drawing.Point(479, 429);
+ btnAmdPresetSave.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ btnAmdPresetSave.Name = "btnAmdPresetSave";
+ btnAmdPresetSave.Size = new System.Drawing.Size(88, 27);
+ btnAmdPresetSave.TabIndex = 15;
+ btnAmdPresetSave.Text = "Save";
+ btnAmdPresetSave.UseVisualStyleBackColor = true;
+ btnAmdPresetSave.Click += btnSetAmdShortcut_Click;
//
// lblAmdShortcut
//
- this.lblAmdShortcut.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.lblAmdShortcut.AutoSize = true;
- this.lblAmdShortcut.Location = new System.Drawing.Point(7, 496);
- this.lblAmdShortcut.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
- this.lblAmdShortcut.Name = "lblAmdShortcut";
- this.lblAmdShortcut.Size = new System.Drawing.Size(55, 15);
- this.lblAmdShortcut.TabIndex = 14;
- this.lblAmdShortcut.Text = "Shortcut:";
+ lblAmdShortcut.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ lblAmdShortcut.AutoSize = true;
+ lblAmdShortcut.Location = new System.Drawing.Point(7, 496);
+ lblAmdShortcut.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ lblAmdShortcut.Name = "lblAmdShortcut";
+ lblAmdShortcut.Size = new System.Drawing.Size(55, 15);
+ lblAmdShortcut.TabIndex = 14;
+ lblAmdShortcut.Text = "Shortcut:";
//
// edtAmdShortcut
//
- this.edtAmdShortcut.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.edtAmdShortcut.Enabled = false;
- this.edtAmdShortcut.Location = new System.Drawing.Point(102, 493);
- this.edtAmdShortcut.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.edtAmdShortcut.Name = "edtAmdShortcut";
- this.edtAmdShortcut.ReadOnly = true;
- this.edtAmdShortcut.Size = new System.Drawing.Size(233, 23);
- this.edtAmdShortcut.TabIndex = 13;
- this.edtAmdShortcut.TextChanged += new System.EventHandler(this.edtAmdShortcut_TextChanged);
- this.edtAmdShortcut.KeyDown += new System.Windows.Forms.KeyEventHandler(this.edtShortcut_KeyDown);
- this.edtAmdShortcut.KeyUp += new System.Windows.Forms.KeyEventHandler(this.edtShortcut_KeyUp);
+ edtAmdShortcut.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ edtAmdShortcut.Enabled = false;
+ edtAmdShortcut.Location = new System.Drawing.Point(102, 493);
+ edtAmdShortcut.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ edtAmdShortcut.Name = "edtAmdShortcut";
+ edtAmdShortcut.ReadOnly = true;
+ edtAmdShortcut.Size = new System.Drawing.Size(233, 23);
+ edtAmdShortcut.TabIndex = 13;
+ edtAmdShortcut.TextChanged += edtAmdShortcut_TextChanged;
+ edtAmdShortcut.KeyDown += edtShortcut_KeyDown;
+ edtAmdShortcut.KeyUp += edtShortcut_KeyUp;
//
// btnChangeAmd
//
- this.btnChangeAmd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.btnChangeAmd.ContextMenuStrip = this.mnuAmdPresets;
- this.btnChangeAmd.Enabled = false;
- this.btnChangeAmd.Location = new System.Drawing.Point(102, 429);
- this.btnChangeAmd.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.btnChangeAmd.Name = "btnChangeAmd";
- this.btnChangeAmd.Size = new System.Drawing.Size(88, 27);
- this.btnChangeAmd.TabIndex = 12;
- this.btnChangeAmd.Text = "Change...";
- this.btnChangeAmd.UseVisualStyleBackColor = true;
- this.btnChangeAmd.Click += new System.EventHandler(this.btnChangeAmd_Click);
+ btnChangeAmd.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ btnChangeAmd.ContextMenuStrip = mnuAmdPresets;
+ btnChangeAmd.Enabled = false;
+ btnChangeAmd.Location = new System.Drawing.Point(102, 429);
+ btnChangeAmd.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ btnChangeAmd.Name = "btnChangeAmd";
+ btnChangeAmd.Size = new System.Drawing.Size(88, 27);
+ btnChangeAmd.TabIndex = 12;
+ btnChangeAmd.Text = "Change...";
+ btnChangeAmd.UseVisualStyleBackColor = true;
+ btnChangeAmd.Click += btnChangeAmd_Click;
//
// mnuAmdPresets
//
- this.mnuAmdPresets.ImageScalingSize = new System.Drawing.Size(20, 20);
- this.mnuAmdPresets.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.miAmdApply,
- this.miAmdPresetApplyOnStartup,
- this.toolStripSeparator2,
- this.mnuAmdDisplay,
- this.mnuAmdColorSettings,
- this.mnuAmdRefreshRate,
- this.mnuAmdDithering,
- this.mnuAmdHDR,
- this.miAmdCopyId});
- this.mnuAmdPresets.Name = "mnuNvPresets";
- this.mnuAmdPresets.Size = new System.Drawing.Size(185, 186);
- this.mnuAmdPresets.Opening += new System.ComponentModel.CancelEventHandler(this.mnuAmdPresets_Opening);
+ mnuAmdPresets.ImageScalingSize = new System.Drawing.Size(20, 20);
+ mnuAmdPresets.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { miAmdApply, miAmdPresetApplyOnStartup, toolStripSeparator2, mnuAmdDisplay, mnuAmdColorSettings, mnuAmdRefreshRate, mnuAmdResolution, mnuAmdDithering, mnuAmdHDR, miAmdCopyId });
+ mnuAmdPresets.Name = "mnuNvPresets";
+ mnuAmdPresets.Size = new System.Drawing.Size(185, 208);
+ mnuAmdPresets.Opening += mnuAmdPresets_Opening;
//
// miAmdApply
//
- this.miAmdApply.Name = "miAmdApply";
- this.miAmdApply.Size = new System.Drawing.Size(184, 22);
- this.miAmdApply.Text = "Apply";
- this.miAmdApply.Click += new System.EventHandler(this.btnApplyAmd_Click);
+ miAmdApply.Name = "miAmdApply";
+ miAmdApply.Size = new System.Drawing.Size(184, 22);
+ miAmdApply.Text = "Apply";
+ miAmdApply.Click += btnApplyAmd_Click;
//
// miAmdPresetApplyOnStartup
//
- this.miAmdPresetApplyOnStartup.CheckOnClick = true;
- this.miAmdPresetApplyOnStartup.Name = "miAmdPresetApplyOnStartup";
- this.miAmdPresetApplyOnStartup.Size = new System.Drawing.Size(184, 22);
- this.miAmdPresetApplyOnStartup.Text = "Apply on startup";
- this.miAmdPresetApplyOnStartup.Click += new System.EventHandler(this.miAmdPresetApplyOnStartup_Click);
+ miAmdPresetApplyOnStartup.CheckOnClick = true;
+ miAmdPresetApplyOnStartup.Name = "miAmdPresetApplyOnStartup";
+ miAmdPresetApplyOnStartup.Size = new System.Drawing.Size(184, 22);
+ miAmdPresetApplyOnStartup.Text = "Apply on startup";
+ miAmdPresetApplyOnStartup.Click += miAmdPresetApplyOnStartup_Click;
//
// toolStripSeparator2
//
- this.toolStripSeparator2.Name = "toolStripSeparator2";
- this.toolStripSeparator2.Size = new System.Drawing.Size(181, 6);
+ toolStripSeparator2.Name = "toolStripSeparator2";
+ toolStripSeparator2.Size = new System.Drawing.Size(181, 6);
//
// mnuAmdDisplay
//
- this.mnuAmdDisplay.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.miAmdPrimaryDisplay});
- this.mnuAmdDisplay.Name = "mnuAmdDisplay";
- this.mnuAmdDisplay.Size = new System.Drawing.Size(184, 22);
- this.mnuAmdDisplay.Text = "Display";
+ mnuAmdDisplay.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miAmdPrimaryDisplay });
+ mnuAmdDisplay.Name = "mnuAmdDisplay";
+ mnuAmdDisplay.Size = new System.Drawing.Size(184, 22);
+ mnuAmdDisplay.Text = "Display";
//
// miAmdPrimaryDisplay
//
- this.miAmdPrimaryDisplay.Name = "miAmdPrimaryDisplay";
- this.miAmdPrimaryDisplay.Size = new System.Drawing.Size(155, 22);
- this.miAmdPrimaryDisplay.Text = "Primary display";
- this.miAmdPrimaryDisplay.Click += new System.EventHandler(this.displayMenuItemAmd_Click);
+ miAmdPrimaryDisplay.Name = "miAmdPrimaryDisplay";
+ miAmdPrimaryDisplay.Size = new System.Drawing.Size(155, 22);
+ miAmdPrimaryDisplay.Text = "Primary display";
+ miAmdPrimaryDisplay.Click += displayMenuItemAmd_Click;
//
// mnuAmdColorSettings
//
- this.mnuAmdColorSettings.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.miAmdColorSettingsIncluded});
- this.mnuAmdColorSettings.Name = "mnuAmdColorSettings";
- this.mnuAmdColorSettings.Size = new System.Drawing.Size(184, 22);
- this.mnuAmdColorSettings.Text = "Color settings";
+ mnuAmdColorSettings.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miAmdColorSettingsIncluded });
+ mnuAmdColorSettings.Name = "mnuAmdColorSettings";
+ mnuAmdColorSettings.Size = new System.Drawing.Size(184, 22);
+ mnuAmdColorSettings.Text = "Color settings";
//
// miAmdColorSettingsIncluded
//
- this.miAmdColorSettingsIncluded.Name = "miAmdColorSettingsIncluded";
- this.miAmdColorSettingsIncluded.Size = new System.Drawing.Size(120, 22);
- this.miAmdColorSettingsIncluded.Text = "Included";
- this.miAmdColorSettingsIncluded.Click += new System.EventHandler(this.miAmdColorSettingsIncluded_Click);
+ miAmdColorSettingsIncluded.Name = "miAmdColorSettingsIncluded";
+ miAmdColorSettingsIncluded.Size = new System.Drawing.Size(120, 22);
+ miAmdColorSettingsIncluded.Text = "Included";
+ miAmdColorSettingsIncluded.Click += miAmdColorSettingsIncluded_Click;
//
// mnuAmdRefreshRate
//
- this.mnuAmdRefreshRate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.miAmdRefreshRateIncluded});
- this.mnuAmdRefreshRate.Name = "mnuAmdRefreshRate";
- this.mnuAmdRefreshRate.Size = new System.Drawing.Size(184, 22);
- this.mnuAmdRefreshRate.Text = "Refresh Rate";
+ mnuAmdRefreshRate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miAmdRefreshRateIncluded });
+ mnuAmdRefreshRate.Name = "mnuAmdRefreshRate";
+ mnuAmdRefreshRate.Size = new System.Drawing.Size(184, 22);
+ mnuAmdRefreshRate.Text = "Refresh Rate";
//
// miAmdRefreshRateIncluded
//
- this.miAmdRefreshRateIncluded.Name = "miAmdRefreshRateIncluded";
- this.miAmdRefreshRateIncluded.Size = new System.Drawing.Size(120, 22);
- this.miAmdRefreshRateIncluded.Text = "Included";
- this.miAmdRefreshRateIncluded.Click += new System.EventHandler(this.miAmdRefreshRateIncluded_Click);
+ miAmdRefreshRateIncluded.Name = "miAmdRefreshRateIncluded";
+ miAmdRefreshRateIncluded.Size = new System.Drawing.Size(180, 22);
+ miAmdRefreshRateIncluded.Text = "Included";
+ miAmdRefreshRateIncluded.Click += miAmdRefreshRateIncluded_Click;
+ //
+ // mnuAmdResolution
+ //
+ mnuAmdResolution.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miAmdResolutionIncluded, miAmdActiveResolution, miAmdVirtualResolution });
+ mnuAmdResolution.Name = "mnuAmdResolution";
+ mnuAmdResolution.Size = new System.Drawing.Size(184, 22);
+ mnuAmdResolution.Text = "Resolution";
+ //
+ // miAmdResolutionIncluded
+ //
+ miAmdResolutionIncluded.Name = "miAmdResolutionIncluded";
+ miAmdResolutionIncluded.Size = new System.Drawing.Size(180, 22);
+ miAmdResolutionIncluded.Text = "Included";
+ miAmdResolutionIncluded.Click += miAmdResolutionIncluded_Click;
//
// mnuAmdDithering
//
- this.mnuAmdDithering.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.miAmdDitheringIncluded});
- this.mnuAmdDithering.Name = "mnuAmdDithering";
- this.mnuAmdDithering.Size = new System.Drawing.Size(184, 22);
- this.mnuAmdDithering.Text = "Dithering";
+ mnuAmdDithering.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miAmdDitheringIncluded });
+ mnuAmdDithering.Name = "mnuAmdDithering";
+ mnuAmdDithering.Size = new System.Drawing.Size(184, 22);
+ mnuAmdDithering.Text = "Dithering";
//
// miAmdDitheringIncluded
//
- this.miAmdDitheringIncluded.Name = "miAmdDitheringIncluded";
- this.miAmdDitheringIncluded.Size = new System.Drawing.Size(120, 22);
- this.miAmdDitheringIncluded.Text = "Included";
- this.miAmdDitheringIncluded.Click += new System.EventHandler(this.miAmdDitheringIncluded_Click);
+ miAmdDitheringIncluded.Name = "miAmdDitheringIncluded";
+ miAmdDitheringIncluded.Size = new System.Drawing.Size(120, 22);
+ miAmdDitheringIncluded.Text = "Included";
+ miAmdDitheringIncluded.Click += miAmdDitheringIncluded_Click;
//
// mnuAmdHDR
//
- this.mnuAmdHDR.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.miAmdHDRIncluded,
- this.miAmdHDRToggle,
- this.miAmdHDREnabled});
- this.mnuAmdHDR.Name = "mnuAmdHDR";
- this.mnuAmdHDR.Size = new System.Drawing.Size(184, 22);
- this.mnuAmdHDR.Text = "HDR";
+ mnuAmdHDR.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miAmdHDRIncluded, miAmdHDRToggle, miAmdHDREnabled });
+ mnuAmdHDR.Name = "mnuAmdHDR";
+ mnuAmdHDR.Size = new System.Drawing.Size(184, 22);
+ mnuAmdHDR.Text = "HDR";
//
// miAmdHDRIncluded
//
- this.miAmdHDRIncluded.Name = "miAmdHDRIncluded";
- this.miAmdHDRIncluded.Size = new System.Drawing.Size(136, 22);
- this.miAmdHDRIncluded.Text = "Included";
- this.miAmdHDRIncluded.Click += new System.EventHandler(this.miAmdHDRIncluded_Click);
+ miAmdHDRIncluded.Name = "miAmdHDRIncluded";
+ miAmdHDRIncluded.Size = new System.Drawing.Size(136, 22);
+ miAmdHDRIncluded.Text = "Included";
+ miAmdHDRIncluded.Click += miAmdHDRIncluded_Click;
//
// miAmdHDRToggle
//
- this.miAmdHDRToggle.Name = "miAmdHDRToggle";
- this.miAmdHDRToggle.Size = new System.Drawing.Size(136, 22);
- this.miAmdHDRToggle.Text = "Toggle HDR";
- this.miAmdHDRToggle.Click += new System.EventHandler(this.miAmdHDRToggle_Click);
+ miAmdHDRToggle.Name = "miAmdHDRToggle";
+ miAmdHDRToggle.Size = new System.Drawing.Size(136, 22);
+ miAmdHDRToggle.Text = "Toggle HDR";
+ miAmdHDRToggle.Click += miAmdHDRToggle_Click;
//
// miAmdHDREnabled
//
- this.miAmdHDREnabled.Name = "miAmdHDREnabled";
- this.miAmdHDREnabled.Size = new System.Drawing.Size(136, 22);
- this.miAmdHDREnabled.Text = "Enabled";
- this.miAmdHDREnabled.Click += new System.EventHandler(this.miAmdHDREnabled_Click);
+ miAmdHDREnabled.Name = "miAmdHDREnabled";
+ miAmdHDREnabled.Size = new System.Drawing.Size(136, 22);
+ miAmdHDREnabled.Text = "Enabled";
+ miAmdHDREnabled.Click += miAmdHDREnabled_Click;
//
// miAmdCopyId
//
- this.miAmdCopyId.Name = "miAmdCopyId";
- this.miAmdCopyId.Size = new System.Drawing.Size(184, 22);
- this.miAmdCopyId.Text = "Copy Id to Clipboard";
- this.miAmdCopyId.Click += new System.EventHandler(this.miAmdCopyId_Click);
+ miAmdCopyId.Name = "miAmdCopyId";
+ miAmdCopyId.Size = new System.Drawing.Size(184, 22);
+ miAmdCopyId.Text = "Copy Id to Clipboard";
+ miAmdCopyId.Click += miAmdCopyId_Click;
//
// btnApplyAmd
//
- this.btnApplyAmd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.btnApplyAmd.Enabled = false;
- this.btnApplyAmd.Location = new System.Drawing.Point(7, 429);
- this.btnApplyAmd.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.btnApplyAmd.Name = "btnApplyAmd";
- this.btnApplyAmd.Size = new System.Drawing.Size(88, 27);
- this.btnApplyAmd.TabIndex = 11;
- this.btnApplyAmd.Text = "Apply";
- this.btnApplyAmd.UseVisualStyleBackColor = true;
- this.btnApplyAmd.Click += new System.EventHandler(this.btnApplyAmd_Click);
+ btnApplyAmd.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ btnApplyAmd.Enabled = false;
+ btnApplyAmd.Location = new System.Drawing.Point(7, 429);
+ btnApplyAmd.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ btnApplyAmd.Name = "btnApplyAmd";
+ btnApplyAmd.Size = new System.Drawing.Size(88, 27);
+ btnApplyAmd.TabIndex = 11;
+ btnApplyAmd.Text = "Apply";
+ btnApplyAmd.UseVisualStyleBackColor = true;
+ btnApplyAmd.Click += btnApplyAmd_Click;
//
// lvAmdPresets
//
- this.lvAmdPresets.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.lvAmdPresets.CheckBoxes = true;
- this.lvAmdPresets.ContextMenuStrip = this.mnuAmdPresets;
- this.lvAmdPresets.FullRowSelect = true;
- this.lvAmdPresets.Location = new System.Drawing.Point(7, 7);
- this.lvAmdPresets.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.lvAmdPresets.MultiSelect = false;
- this.lvAmdPresets.Name = "lvAmdPresets";
- this.lvAmdPresets.ShowItemToolTips = true;
- this.lvAmdPresets.Size = new System.Drawing.Size(1098, 415);
- this.lvAmdPresets.TabIndex = 10;
- this.lvAmdPresets.UseCompatibleStateImageBehavior = false;
- this.lvAmdPresets.View = System.Windows.Forms.View.Details;
- this.lvAmdPresets.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvLgPresets_ColumnClick);
- this.lvAmdPresets.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.lvNvPresets_ItemCheck);
- this.lvAmdPresets.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.lvAmdPresets_ItemChecked);
- this.lvAmdPresets.SelectedIndexChanged += new System.EventHandler(this.lvAmdPresets_SelectedIndexChanged);
- this.lvAmdPresets.DoubleClick += new System.EventHandler(this.btnApplyAmd_Click);
+ lvAmdPresets.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
+ lvAmdPresets.CheckBoxes = true;
+ lvAmdPresets.ContextMenuStrip = mnuAmdPresets;
+ lvAmdPresets.FullRowSelect = true;
+ lvAmdPresets.Location = new System.Drawing.Point(7, 7);
+ lvAmdPresets.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ lvAmdPresets.MultiSelect = false;
+ lvAmdPresets.Name = "lvAmdPresets";
+ lvAmdPresets.ShowItemToolTips = true;
+ lvAmdPresets.Size = new System.Drawing.Size(1098, 415);
+ lvAmdPresets.TabIndex = 10;
+ lvAmdPresets.UseCompatibleStateImageBehavior = false;
+ lvAmdPresets.View = System.Windows.Forms.View.Details;
+ lvAmdPresets.ColumnClick += lvLgPresets_ColumnClick;
+ lvAmdPresets.ItemCheck += lvNvPresets_ItemCheck;
+ lvAmdPresets.ItemChecked += lvAmdPresets_ItemChecked;
+ lvAmdPresets.SelectedIndexChanged += lvAmdPresets_SelectedIndexChanged;
+ lvAmdPresets.DoubleClick += btnApplyAmd_Click;
+ //
+ // miAmdActiveResolution
+ //
+ miAmdActiveResolution.Name = "miAmdActiveResolution";
+ miAmdActiveResolution.Size = new System.Drawing.Size(180, 22);
+ miAmdActiveResolution.Text = "Active";
+ //
+ // miAmdVirtualResolution
+ //
+ miAmdVirtualResolution.Name = "miAmdVirtualResolution";
+ miAmdVirtualResolution.Size = new System.Drawing.Size(180, 22);
+ miAmdVirtualResolution.Text = "Virtual";
//
// AmdPanel
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.Controls.Add(this.btnAmdSettings);
- this.Controls.Add(this.chkAmdQuickAccess);
- this.Controls.Add(this.lblAmdPresetName);
- this.Controls.Add(this.edtAmdPresetName);
- this.Controls.Add(this.btnAddAmd);
- this.Controls.Add(this.lblErrorAMD);
- this.Controls.Add(this.btnDeleteAmd);
- this.Controls.Add(this.btnCloneAmd);
- this.Controls.Add(this.btnAmdPresetSave);
- this.Controls.Add(this.lblAmdShortcut);
- this.Controls.Add(this.edtAmdShortcut);
- this.Controls.Add(this.btnChangeAmd);
- this.Controls.Add(this.btnApplyAmd);
- this.Controls.Add(this.lvAmdPresets);
- this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.Name = "AmdPanel";
- this.Size = new System.Drawing.Size(1114, 539);
- this.mnuAmdPresets.ResumeLayout(false);
- this.ResumeLayout(false);
- this.PerformLayout();
-
+ AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+ AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ Controls.Add(btnAmdSettings);
+ Controls.Add(chkAmdQuickAccess);
+ Controls.Add(lblAmdPresetName);
+ Controls.Add(edtAmdPresetName);
+ Controls.Add(btnAddAmd);
+ Controls.Add(lblErrorAMD);
+ Controls.Add(btnDeleteAmd);
+ Controls.Add(btnCloneAmd);
+ Controls.Add(btnAmdPresetSave);
+ Controls.Add(lblAmdShortcut);
+ Controls.Add(edtAmdShortcut);
+ Controls.Add(btnChangeAmd);
+ Controls.Add(btnApplyAmd);
+ Controls.Add(lvAmdPresets);
+ Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ Name = "AmdPanel";
+ Size = new System.Drawing.Size(1114, 539);
+ mnuAmdPresets.ResumeLayout(false);
+ ResumeLayout(false);
+ PerformLayout();
}
#endregion
@@ -441,6 +452,9 @@
private System.Windows.Forms.ToolStripMenuItem miAmdCopyId;
private System.Windows.Forms.CheckBox chkAmdQuickAccess;
private System.Windows.Forms.Button btnAmdSettings;
-
+ private System.Windows.Forms.ToolStripMenuItem mnuAmdResolution;
+ private System.Windows.Forms.ToolStripMenuItem miAmdResolutionIncluded;
+ private System.Windows.Forms.ToolStripMenuItem miAmdActiveResolution;
+ private System.Windows.Forms.ToolStripMenuItem miAmdVirtualResolution;
}
}
diff --git a/ColorControl/Services/AMD/AmdPanel.cs b/ColorControl/Services/AMD/AmdPanel.cs
index 206116a..6d45b69 100644
--- a/ColorControl/Services/AMD/AmdPanel.cs
+++ b/ColorControl/Services/AMD/AmdPanel.cs
@@ -16,7 +16,7 @@ using System.Windows.Forms;
namespace ColorControl.Services.AMD
{
- public partial class AmdPanel : UserControl, IModulePanel
+ partial class AmdPanel : UserControl, IModulePanel
{
private readonly AmdService _amdService;
private readonly NotifyIconManager _notifyIconManager;
@@ -25,7 +25,7 @@ namespace ColorControl.Services.AMD
private Config _config;
private string _lastDisplayRefreshRates = string.Empty;
- internal AmdPanel(AmdService amdService, NotifyIconManager notifyIconManager, GlobalContext globalContext, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
+ public AmdPanel(AmdService amdService, NotifyIconManager notifyIconManager, GlobalContext globalContext, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
{
_amdService = amdService;
_notifyIconManager = notifyIconManager;
@@ -195,11 +195,64 @@ namespace ColorControl.Services.AMD
private void refreshRateMenuItemAmd_Click(object sender, EventArgs e)
{
- var refreshRate = (uint)((ToolStripItem)sender).Tag;
+ var refreshRate = (Rational)((ToolStripItem)sender).Tag;
var preset = GetSelectedAmdPreset();
- preset.refreshRate = refreshRate;
+ preset.DisplayConfig.RefreshRate = refreshRate;
+
+ AddOrUpdateItemAmd();
+ }
+
+ private void resolutionAmdMenuItem_Click(object sender, EventArgs e)
+ {
+ var mode = (VirtualResolution)((ToolStripItem)sender).Tag;
+
+ var preset = GetSelectedAmdPreset();
+
+ preset.DisplayConfig.Resolution.ActiveWidth = mode.ActiveWidth;
+ preset.DisplayConfig.Resolution.ActiveHeight = mode.ActiveHeight;
+
+ AddOrUpdateItemAmd();
+ }
+
+ private void virtualResolutionAmdMenuItem_Click(object sender, EventArgs e)
+ {
+ var mode = (VirtualResolution)((ToolStripItem)sender).Tag;
+
+ var preset = GetSelectedAmdPreset();
+
+ var virtualMode = new VirtualResolution(mode);
+ virtualMode.ActiveWidth = preset.DisplayConfig.Resolution.ActiveWidth;
+ virtualMode.ActiveHeight = preset.DisplayConfig.Resolution.ActiveHeight;
+
+ preset.DisplayConfig.Resolution.VirtualWidth = virtualMode.VirtualWidth;
+ preset.DisplayConfig.Resolution.VirtualHeight = virtualMode.VirtualHeight;
+
+ AddOrUpdateItemAmd();
+ }
+
+ private void UpdateDisplayConfigScaling(object sender, EventArgs e)
+ {
+ var menuItem = (ToolStripMenuItem)sender;
+ var value = (CCD.DisplayConfigScaling)menuItem.Tag;
+
+ var preset = GetSelectedAmdPreset();
+
+ preset.DisplayConfig.Scaling = value;
+
+ AddOrUpdateItemAmd();
+ }
+
+ private void UpdateDisplayConfigRotation(object sender, EventArgs e)
+ {
+ var menuItem = (ToolStripMenuItem)sender;
+ var value = (CCD.DisplayConfigRotation)menuItem.Tag;
+
+ var preset = GetSelectedAmdPreset();
+ var settings = preset.DisplayConfig;
+
+ preset.DisplayConfig.Rotation = value;
AddOrUpdateItemAmd();
}
@@ -321,6 +374,7 @@ namespace ColorControl.Services.AMD
mnuAmdDisplay.Enabled = preset != null;
mnuAmdColorSettings.Enabled = preset != null;
mnuAmdRefreshRate.Enabled = preset != null;
+ mnuAmdResolution.Enabled = preset != null;
mnuAmdDithering.Enabled = preset != null;
mnuAmdHDR.Enabled = preset != null;
@@ -351,6 +405,8 @@ namespace ColorControl.Services.AMD
{
mnuAmdRefreshRate.DropDownItems.RemoveAt(mnuAmdRefreshRate.DropDownItems.Count - 1);
}
+ miAmdActiveResolution.DropDownItems.Clear();
+ miAmdVirtualResolution.DropDownItems.Clear();
}
if (mnuAmdRefreshRate.DropDownItems.Count == 1)
@@ -360,12 +416,38 @@ namespace ColorControl.Services.AMD
foreach (var refreshRate in refreshRates)
{
- var item = mnuAmdRefreshRate.DropDownItems.AddCustom(refreshRate.ToString() + "Hz");
+ var item = mnuAmdRefreshRate.DropDownItems.AddCustom(refreshRate + "Hz");
item.Tag = refreshRate;
item.Click += refreshRateMenuItemAmd_Click;
}
}
+ var modes = default(List);
+
+ if (miAmdActiveResolution.DropDownItems.Count == 0)
+ {
+ modes = _amdService.GetAvailableResolutionsV2(preset);
+
+ foreach (var mode in modes)
+ {
+ var item = miAmdActiveResolution.DropDownItems.AddCustom(mode.ToString());
+ item.Tag = mode;
+ item.Click += resolutionAmdMenuItem_Click;
+ }
+ }
+
+ if (miAmdVirtualResolution.DropDownItems.Count == 0)
+ {
+ modes ??= _amdService.GetAvailableResolutionsV2(preset);
+
+ foreach (var mode in modes)
+ {
+ var item = miAmdVirtualResolution.DropDownItems.AddCustom(mode.ToString());
+ item.Tag = mode;
+ item.Click += virtualResolutionAmdMenuItem_Click;
+ }
+ }
+
miAmdPrimaryDisplay.Checked = preset.primaryDisplay;
foreach (var item in mnuAmdDisplay.DropDownItems)
{
@@ -381,7 +463,7 @@ namespace ColorControl.Services.AMD
miAmdColorSettingsIncluded.Checked = preset.applyColorData;
- miAmdRefreshRateIncluded.Checked = preset.applyRefreshRate;
+ miAmdRefreshRateIncluded.Checked = preset.DisplayConfig.ApplyRefreshRate;
foreach (var item in mnuAmdRefreshRate.DropDownItems)
{
if (item is ToolStripMenuItem)
@@ -389,11 +471,30 @@ namespace ColorControl.Services.AMD
var menuItem = (ToolStripMenuItem)item;
if (menuItem.Tag != null)
{
- menuItem.Checked = (uint)menuItem.Tag == preset.refreshRate;
+ menuItem.Checked = ((Rational)menuItem.Tag).Equals(preset.DisplayConfig.RefreshRate);
}
}
}
+ miAmdResolutionIncluded.Checked = preset.DisplayConfig.ApplyResolution;
+ foreach (var item in miAmdActiveResolution.DropDownItems)
+ {
+ if (item is ToolStripMenuItem menuItem && menuItem.Tag != null)
+ {
+ var mode = (VirtualResolution)menuItem.Tag;
+ menuItem.Checked = mode.ActiveWidth == preset.DisplayConfig.Resolution.ActiveWidth && mode.ActiveHeight == preset.DisplayConfig.Resolution.ActiveHeight;
+ }
+ }
+
+ foreach (var item in miAmdVirtualResolution.DropDownItems)
+ {
+ if (item is ToolStripMenuItem menuItem && menuItem.Tag != null)
+ {
+ var mode = (VirtualResolution)menuItem.Tag;
+ menuItem.Checked = mode.VirtualWidth == preset.DisplayConfig.Resolution.VirtualWidth && mode.VirtualHeight == preset.DisplayConfig.Resolution.VirtualHeight;
+ }
+ }
+
miAmdDitheringIncluded.Checked = preset.applyDithering;
FormUtils.BuildDropDownMenu(mnuAmdDithering, "Mode", typeof(ADLDitherState), preset, "ditherState", amdPresetColorDataMenuItem_Click);
@@ -401,6 +502,11 @@ namespace ColorControl.Services.AMD
miAmdHDRIncluded.Checked = preset.applyHDR;
miAmdHDREnabled.Checked = preset.HDREnabled;
miAmdHDRToggle.Checked = preset.toggleHDR;
+
+ FormUtils.BuildDropDownMenu(mnuAmdResolution, "Scaling/Aspect Ratio", typeof(CCD.DisplayConfigScaling), preset.DisplayConfig, "Scaling", UpdateDisplayConfigScaling, unchanged: false,
+ skipValues: [CCD.DisplayConfigScaling.Zero, CCD.DisplayConfigScaling.Custom, CCD.DisplayConfigScaling.ForceUint32]);
+ FormUtils.BuildDropDownMenu(mnuAmdResolution, "Rotation", typeof(CCD.DisplayConfigRotation), preset.DisplayConfig, "Rotation", UpdateDisplayConfigRotation, unchanged: false,
+ skipValues: [CCD.DisplayConfigRotation.Zero, CCD.DisplayConfigRotation.ForceUint32]);
}
}
@@ -460,7 +566,16 @@ namespace ColorControl.Services.AMD
{
var preset = GetSelectedAmdPreset();
- preset.applyRefreshRate = !preset.applyRefreshRate;
+ preset.DisplayConfig.ApplyRefreshRate = !preset.DisplayConfig.ApplyRefreshRate;
+
+ AddOrUpdateItemAmd();
+ }
+
+ private void miAmdResolutionIncluded_Click(object sender, EventArgs e)
+ {
+ var preset = GetSelectedAmdPreset();
+
+ preset.DisplayConfig.ApplyResolution = !preset.DisplayConfig.ApplyResolution;
AddOrUpdateItemAmd();
}
diff --git a/ColorControl/Services/AMD/AmdPanel.resx b/ColorControl/Services/AMD/AmdPanel.resx
index d222fb1..2389c70 100644
--- a/ColorControl/Services/AMD/AmdPanel.resx
+++ b/ColorControl/Services/AMD/AmdPanel.resx
@@ -1,4 +1,64 @@
-
+
+
+
diff --git a/ColorControl/Services/AMD/AmdPreset.cs b/ColorControl/Services/AMD/AmdPreset.cs
index 4c9cfb4..3fcb149 100644
--- a/ColorControl/Services/AMD/AmdPreset.cs
+++ b/ColorControl/Services/AMD/AmdPreset.cs
@@ -16,8 +16,7 @@ namespace ColorControl.Services.AMD
public bool toggleHDR { get; set; }
public bool applyDithering { get; set; }
public ADLDitherState ditherState { get; set; }
- public bool applyRefreshRate { get; set; }
- public uint refreshRate { get; set; }
+ public DisplayConfig DisplayConfig { get; set; }
public bool primaryDisplay { get; set; }
public string displayName { get; set; }
@@ -29,9 +28,8 @@ namespace ColorControl.Services.AMD
applyHDR = false;
HDREnabled = false;
toggleHDR = false;
- applyRefreshRate = false;
- refreshRate = 60;
primaryDisplay = true;
+ DisplayConfig = new DisplayConfig();
}
public AmdPreset(AmdPreset preset) : this()
@@ -50,8 +48,7 @@ namespace ColorControl.Services.AMD
toggleHDR = preset.toggleHDR;
applyDithering = preset.applyDithering;
ditherState = preset.ditherState;
- applyRefreshRate = preset.applyRefreshRate;
- refreshRate = preset.refreshRate;
+ DisplayConfig = new DisplayConfig(DisplayConfig);
}
public AmdPreset Clone()
@@ -63,8 +60,7 @@ namespace ColorControl.Services.AMD
public static string[] GetColumnNames()
{
- //return new[] { "BPC", "Format", "Dynamic range", "Toggle HDR", "Shortcut" };
- return new[] { "Name", "Display|140", "Color settings (BPC, format)|260", "Refresh rate|100", "Dithering", "HDR", "Shortcut", "Apply on startup" };
+ return new[] { "Name", "Display|140", "Color settings (BPC, format)|260", "Refresh rate|100", "Resolution|120", "Dithering", "HDR", "Shortcut", "Apply on startup" };
}
public override List GetDisplayValues(Config config = null)
@@ -79,7 +75,8 @@ namespace ColorControl.Services.AMD
var colorSettings = string.Format("{0}: {1}, {2}", applyColorData ? "Included" : "Excluded", colorDepth, pixelFormat);
values.Add(colorSettings);
- values.Add(string.Format("{0}: {1}Hz", applyRefreshRate ? "Included" : "Excluded", refreshRate));
+ values.Add(string.Format("{0}: {1}Hz", DisplayConfig.ApplyRefreshRate ? "Included" : "Excluded", DisplayConfig.RefreshRate));
+ values.Add(string.Format("{0}{1}", DisplayConfig.ApplyResolution ? "Included" : "Excluded", DisplayConfig.ApplyResolution ? ": " + DisplayConfig.GetResolutionDesc() : ""));
values.Add(string.Format("{0}: {1}", applyDithering ? "Included" : "Excluded", ditherState));
values.Add(string.Format("{0}: {1}", applyHDR ? "Included" : "Excluded", toggleHDR ? "Toggle" : HDREnabled ? "Enabled" : "Disabled"));
values.Add(shortcut);
@@ -121,9 +118,14 @@ namespace ColorControl.Services.AMD
sb.Append(colorSettings);
sb.Append(" / ");
}
- if (applyRefreshRate)
+ if (DisplayConfig.ApplyRefreshRate)
{
- sb.AppendFormat("{0}Hz", refreshRate);
+ sb.AppendFormat("{0}Hz", DisplayConfig.RefreshRate);
+ sb.Append(" / ");
+ }
+ if (DisplayConfig.ApplyResolution)
+ {
+ sb.AppendFormat("{0}", DisplayConfig.GetResolutionDesc());
sb.Append(" / ");
}
if (applyDithering)
diff --git a/ColorControl/Services/AMD/AmdService.cs b/ColorControl/Services/AMD/AmdService.cs
index e1b2e55..5be9967 100644
--- a/ColorControl/Services/AMD/AmdService.cs
+++ b/ColorControl/Services/AMD/AmdService.cs
@@ -1,8 +1,8 @@
using ATI.ADL;
using ColorControl.Services.Common;
using ColorControl.Shared.Common;
+using ColorControl.Shared.Contracts;
using ColorControl.Shared.Native;
-using ColorControl.Shared.Services;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
@@ -153,11 +153,11 @@ namespace ColorControl.Services.AMD
//}
}
- if (preset.applyRefreshRate)
+ if (preset.DisplayConfig.ApplyRefreshRate || preset.DisplayConfig.ApplyResolution)
{
+ if (!SetMode(preset.DisplayConfig, true))
{
- if (!SetRefreshRate(preset.refreshRate))
- result = false;
+ result = false;
}
}
@@ -219,20 +219,14 @@ namespace ColorControl.Services.AMD
return Screen.PrimaryScreen.DeviceName;
}
- public bool SetRefreshRate(uint refreshRate)
+ public bool SetMode(DisplayConfig displayConfig, bool updateRegistry = false)
{
- var horizontal = 3840;
- var vertical = 2160;
var display = GetCurrentDisplay();
- ADLWrapper.GetDisplayResolution(display, ref horizontal, ref vertical);
-
- var portrait = vertical > horizontal;
-
- return SetRefreshRateInternal(GetDisplayDeviceName(display), (int)refreshRate, portrait, horizontal, vertical);
+ return SetMode(GetDisplayDeviceName(display), displayConfig, updateRegistry);
}
- public List GetAvailableRefreshRates(AmdPreset preset = null)
+ public List GetAvailableRefreshRates(AmdPreset preset = null)
{
if (preset != null)
{
@@ -245,9 +239,24 @@ namespace ColorControl.Services.AMD
ADLWrapper.GetDisplayResolution(display, ref horizontal, ref vertical);
- var portrait = vertical > horizontal;
+ return GetAvailableRefreshRatesV2(GetDisplayDeviceName(display), horizontal, vertical);
+ }
- return GetAvailableRefreshRatesInternal(GetDisplayDeviceName(display), portrait, horizontal, vertical);
+ public List GetAvailableResolutionsV2(AmdPreset preset = null)
+ {
+ if (preset != null)
+ {
+ SetCurrentDisplay(preset);
+ }
+
+ var display = GetCurrentDisplay();
+ var deviceName = GetDisplayDeviceName(display);
+ if (deviceName == null)
+ {
+ return [];
+ }
+
+ return GetAvailableResolutionsInternalV2(deviceName);
}
public bool IsHDREnabled()
@@ -337,8 +346,11 @@ namespace ColorControl.Services.AMD
var colorSettings = $"{colorDepth.GetDescription()}, {pixelFormat.GetDescription()}";
values.Add(colorSettings);
- var refreshRate = GetCurrentRefreshRate(screen?.DeviceName);
- values.Add($"{refreshRate}Hz");
+ var displayConfig = CCD.GetDisplayConfig(screen?.DeviceName);
+
+ values.Add($"{displayConfig.RefreshRate}Hz");
+
+ values.Add($"{displayConfig.GetResolutionDesc()}");
var ditherState = GetDithering(display);
values.Add(ditherState.GetDescription());
@@ -346,7 +358,7 @@ namespace ColorControl.Services.AMD
var hdrEnabled = IsHDREnabled();
values.Add(hdrEnabled ? "Yes" : "No");
- var infoLine = string.Format("{0}: {1}, {2}Hz, HDR: {3}", name, colorSettings, refreshRate, hdrEnabled ? "Yes" : "No");
+ var infoLine = string.Format("{0}: {1}, {2}Hz, {3}, HDR: {4}", name, colorSettings, displayConfig.RefreshRate, displayConfig.GetResolutionDesc(), hdrEnabled ? "Yes" : "No");
var displayInfo = new AmdDisplayInfo(display, values, infoLine);
diff --git a/ColorControl/Services/Common/GraphicsService.cs b/ColorControl/Services/Common/GraphicsService.cs
index 0e29f31..4e0680c 100644
--- a/ColorControl/Services/Common/GraphicsService.cs
+++ b/ColorControl/Services/Common/GraphicsService.cs
@@ -1,15 +1,9 @@
using ColorControl.Shared.Common;
using ColorControl.Shared.Contracts;
using ColorControl.Shared.Native;
-using NWin32;
-using NWin32.NativeTypes;
using Shared.Native;
-using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.Linq;
-using System.Runtime.InteropServices;
-using System.Threading;
namespace ColorControl.Services.Common
{
@@ -28,80 +22,53 @@ namespace ColorControl.Services.Common
public abstract bool HasDisplaysAttached(bool reinitialize = false);
- protected void ToggleHDR(int delay = 1000)
+ public bool SetMode(string displayName, VirtualResolution resolution = null, Rational refreshRate = null, bool updateRegistry = false)
{
- Process.Start("ms-settings:display");
- Thread.Sleep(delay);
+ var displayConfig = CCD.GetDisplayConfig(displayName);
- var process = Process.GetProcessesByName("SystemSettings").FirstOrDefault();
- if (process != null)
+ if (refreshRate != null)
{
- System.Windows.Forms.SendKeys.SendWait("{TAB}");
- System.Windows.Forms.SendKeys.SendWait("{TAB}");
- System.Windows.Forms.SendKeys.SendWait(" ");
- System.Windows.Forms.SendKeys.SendWait("%{F4}");
+ displayConfig.ApplyRefreshRate = true;
+ displayConfig.RefreshRate = refreshRate;
}
+
+ if (resolution != null)
+ {
+ displayConfig.ApplyResolution = true;
+ displayConfig.Resolution = resolution;
+ }
+
+ return SetMode(displayName, displayConfig, updateRegistry);
}
- protected void OpenDisplaySettings(int delay = 1000)
+ public bool SetMode(string displayName, DisplayConfig displayConfig, bool updateRegistry = false)
{
- Process.Start("ms-settings:display");
- Thread.Sleep(delay);
+ var currentDisplayConfig = CCD.GetDisplayConfig(displayName);
- var process = Process.GetProcessesByName("SystemSettings").FirstOrDefault();
- if (process != null)
+ if (displayConfig.ApplyRefreshRate)
{
- System.Windows.Forms.SendKeys.SendWait("%{F4}");
+ currentDisplayConfig.RefreshRate = displayConfig.RefreshRate;
}
+
+ if (displayConfig.ApplyResolution)
+ {
+ currentDisplayConfig.Resolution = displayConfig.Resolution;
+ }
+
+ if (displayConfig.Scaling != CCD.DisplayConfigScaling.Zero)
+ {
+ currentDisplayConfig.Scaling = displayConfig.Scaling;
+ }
+
+ if (displayConfig.Rotation != CCD.DisplayConfigRotation.Zero)
+ {
+ currentDisplayConfig.Rotation = displayConfig.Rotation;
+ }
+
+ return CCD.SetDisplayConfig(displayName, currentDisplayConfig, updateRegistry);
}
- protected bool SetRefreshRateInternal(string displayName, int refreshRate, bool portrait, int horizontal, int vertical, bool updateRegistry = false)
- {
- uint i = 0;
- DEVMODEA devMode;
- while (NativeMethods.EnumDisplaySettingsA(displayName, i, out devMode))
- {
- // Also compare width with vertical and height with horizontal in case of portrait mode
- if (((!portrait && devMode.dmPelsWidth == horizontal && devMode.dmPelsHeight == vertical) ||
- (portrait && devMode.dmPelsWidth == vertical && devMode.dmPelsHeight == horizontal))
- && devMode.dmBitsPerPel == 32 && devMode.dmDisplayFrequency == refreshRate)
- {
- IntPtr bla = Marshal.AllocHGlobal(Marshal.SizeOf(devMode));
- Marshal.StructureToPtr(devMode, bla, false);
- var result = NativeMethods.ChangeDisplaySettingsExA(displayName, bla, IntPtr.Zero, updateRegistry ? (uint)NativeConstants.CDS_UPDATEREGISTRY : 0, IntPtr.Zero);
- if (result != NativeConstants.DISP_CHANGE_SUCCESSFUL)
- {
- Logger.Error($"Could not set refreshrate {refreshRate} on display {displayName} because ChangeDisplaySettingsExA returned a non-zero return code: {result}");
- }
- return result == NativeConstants.DISP_CHANGE_SUCCESSFUL;
- }
- i++;
- }
- Logger.Info($"Could not set refreshrate {refreshRate} on display {displayName} because EnumDisplaySettings did not report it as a valid refreshrate");
-
- return false;
- }
-
- protected List GetAvailableRefreshRatesInternal(string displayName, bool portrait, int horizontal, int vertical)
- {
- var list = new List();
-
- uint i = 0;
- DEVMODEA devMode;
- while (NativeMethods.EnumDisplaySettingsA(displayName, i, out devMode))
- {
- if (((!portrait && devMode.dmPelsWidth == horizontal && devMode.dmPelsHeight == vertical) ||
- (portrait && devMode.dmPelsWidth == vertical && devMode.dmPelsHeight == horizontal)) &&
- !list.Contains(devMode.dmDisplayFrequency))
- {
- list.Add(devMode.dmDisplayFrequency);
- }
- i++;
- }
- return list;
- }
-
- protected List GetAvailableRefreshRatesV2(string displayName, bool portrait, int horizontal, int vertical)
+ protected List GetAvailableRefreshRatesV2(string displayName, int horizontal, int vertical)
{
var dxWrapper = new DXWrapper();
@@ -113,50 +80,16 @@ namespace ColorControl.Services.Common
return refreshRates.ToList();
}
- protected uint GetCurrentRefreshRate(string displayName)
+ protected List GetAvailableResolutionsInternalV2(string displayName, Rational refreshRate = null)
{
- DEVMODEA devMode;
- // NativeMethods defines modeNum as an 'uint' but we need to pass '-1'
- if (WinApi.EnumDisplaySettingsA(displayName, WinApi.ENUM_CURRENT_SETTINGS, out devMode))
- {
- return devMode.dmDisplayFrequency;
- }
- return 0;
+ var dxWrapper = new DXWrapper();
+
+ var modes = dxWrapper.GetModes(displayName);
+
+ var refreshRates = modes.DistinctBy(m => $"{m.Resolution.width}x{m.Resolution.height}")
+ .Select(m => new VirtualResolution(m.Resolution.width, m.Resolution.height));
+
+ return refreshRates.ToList();
}
-
- protected DEVMODEA GetCurrentMode(string displayName)
- {
- DEVMODEA devMode;
- // NativeMethods defines modeNum as an 'uint' but we need to pass '-1'
- if (WinApi.EnumDisplaySettingsA(displayName, WinApi.ENUM_CURRENT_SETTINGS, out devMode))
- {
- return devMode;
- }
- return devMode;
- }
-
- protected List GetAvailableResolutionsInternal(string displayName, bool portrait, uint refreshRate = 0)
- {
- var list = new List();
-
- uint i = 0;
- DEVMODEA devMode;
- while (NativeMethods.EnumDisplaySettingsA(displayName, i, out devMode))
- {
- if ((portrait ? devMode.dmPelsWidth < devMode.dmPelsHeight : devMode.dmPelsWidth > devMode.dmPelsHeight) &&
- (refreshRate == 0 || devMode.dmDisplayFrequency == refreshRate) &&
- !list.Any(m => m.dmPelsWidth == devMode.dmPelsWidth && m.dmPelsHeight == devMode.dmPelsHeight))
- {
- list.Add(devMode);
- }
- i++;
- }
-
- list.Sort((a, b) => (int)(a.dmPelsWidth - b.dmPelsWidth));
-
- return list;
- }
-
-
}
}
diff --git a/ColorControl/Services/Common/NotifyIconManager.cs b/ColorControl/Services/Common/NotifyIconManager.cs
index 830dcde..332a732 100644
--- a/ColorControl/Services/Common/NotifyIconManager.cs
+++ b/ColorControl/Services/Common/NotifyIconManager.cs
@@ -75,7 +75,6 @@ public class NotifyIconManager
NotifyIcon.MouseDoubleClick += trayIcon_MouseDoubleClick;
NotifyIcon.ContextMenuStrip.Opened += trayIconContextMenu_Popup;
- NotifyIcon.BalloonTipClicked += trayIconBalloonTip_Clicked;
}
public void HideIcon()
@@ -106,20 +105,12 @@ public class NotifyIconManager
Program.OpenMainForm();
}
- private void trayIconBalloonTip_Clicked(object sender, EventArgs e)
- {
- //if (_updateHtmlUrl != null)
- //{
- // _winApiAdminService.StartProcess(_updateHtmlUrl);
- //}
- }
-
private void trayIconContextMenu_Popup(object sender, EventArgs e)
{
_nvTrayMenu.Visible = _serviceManager.NvService != null;
if (_nvTrayMenu.Visible)
{
- var presets = _serviceManager.NvService.GetPresets().Where(x => x.applyColorData || x.applyDithering || x.applyHDR || x.applyRefreshRate || x.applyResolution || x.applyDriverSettings || x.applyOther || x.applyOverclocking || x.ApplyColorEnhancements || x.applyHdmiSettings);
+ var presets = _serviceManager.NvService.GetPresets().Where(x => x.applyColorData || x.applyDithering || x.applyHDR || x.DisplayConfig.ApplyRefreshRate || x.DisplayConfig.ApplyResolution || x.applyDriverSettings || x.applyOther || x.applyOverclocking || x.ApplyColorEnhancements || x.applyHdmiSettings);
UpdateTrayMenu(_nvTrayMenu, presets, TrayMenuItemNv_Click);
}
@@ -133,7 +124,7 @@ public class NotifyIconManager
_amdTrayMenu.Visible = _serviceManager.AmdService != null;
if (_amdTrayMenu.Visible)
{
- var presets = _serviceManager.AmdService.GetPresets().Where(x => x.applyColorData || x.applyDithering || x.applyHDR || x.applyRefreshRate);
+ var presets = _serviceManager.AmdService.GetPresets().Where(x => x.applyColorData || x.applyDithering || x.applyHDR || x.DisplayConfig.ApplyRefreshRate || x.DisplayConfig.ApplyResolution);
UpdateTrayMenu(_amdTrayMenu, presets, TrayMenuItemAmd_Click);
}
@@ -181,7 +172,7 @@ public class NotifyIconManager
if (!string.IsNullOrEmpty(preset.shortcut))
{
name += " " + preset.shortcut;
- //keys = Utils.ShortcutToKeys(preset.shortcut);
+ //keys = KeyboardShortcutDispatcher.ShortcutToKeys(preset.shortcut);
}
var item = new ToolStripMenuItem(name, null, null, keys);
diff --git a/ColorControl/Services/Common/UpdateManager.cs b/ColorControl/Services/Common/UpdateManager.cs
index 7a641d3..3a38984 100644
--- a/ColorControl/Services/Common/UpdateManager.cs
+++ b/ColorControl/Services/Common/UpdateManager.cs
@@ -56,8 +56,6 @@ public class UpdateManager
private void InitHandleCheckForUpdates(dynamic latest)
{
HandleCheckForUpdates(latest);
-
- //FormUtils.BeginInvokeCheck(() => HandleCheckForUpdates(latest));
}
private void HandleCheckForUpdates(dynamic latest)
diff --git a/ColorControl/Services/LG/LgPanel.cs b/ColorControl/Services/LG/LgPanel.cs
index 1223261..1e7dfcb 100644
--- a/ColorControl/Services/LG/LgPanel.cs
+++ b/ColorControl/Services/LG/LgPanel.cs
@@ -18,7 +18,7 @@ using System.Windows.Forms;
namespace ColorControl.Services.LG
{
- public partial class LgPanel : UserControl, IModulePanel
+ partial class LgPanel : UserControl, IModulePanel
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
@@ -31,7 +31,7 @@ namespace ColorControl.Services.LG
private string _lgTabMessage;
private bool _disableEvents = false;
- internal LgPanel(LgService lgService, ServiceManager serviceManager, GlobalContext globalContext, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
+ public LgPanel(LgService lgService, ServiceManager serviceManager, GlobalContext globalContext, KeyboardShortcutDispatcher keyboardShortcutDispatcher)
{
_lgService = lgService;
_serviceManager = serviceManager;
diff --git a/ColorControl/Services/NVIDIA/NvGpuInfo.cs b/ColorControl/Services/NVIDIA/NvGpuInfo.cs
index fb153d7..7fffba2 100644
--- a/ColorControl/Services/NVIDIA/NvGpuInfo.cs
+++ b/ColorControl/Services/NVIDIA/NvGpuInfo.cs
@@ -204,8 +204,8 @@ namespace ColorControl.Services.NVIDIA
var bla = GPUApi.GetClockBoostMask(GPU.Handle);
var masks = bla._Masks;
- Logger.Debug("MASKS: " + masks[0]);
- Logger.Debug("MASK: " + bla._Unknown1[0]);
+ //Logger.Debug("MASKS: " + masks[0]);
+ //Logger.Debug("MASK: " + bla._Unknown1[0]);
CurveV1 = GPUApi.GetVFPCurve(GPU.Handle, masks);
@@ -215,12 +215,12 @@ namespace ColorControl.Services.NVIDIA
var minV = CurveV1.GPUCurveEntries.Min(e => e.VoltageInMicroV);
var maxV = CurveV1.GPUCurveEntries.Max(e => e.VoltageInMicroV);
- Logger.Debug($"CurveV1: L: {length}, MinF: {minFreq}, MaxF: {maxFreq}, MinV: {minV}, MaxV: {maxV}");
+ //Logger.Debug($"CurveV1: L: {length}, MinF: {minFreq}, MaxF: {maxFreq}, MinV: {minV}, MaxV: {maxV}");
- foreach (var entry in CurveV1.GPUCurveEntries)
- {
- Logger.Debug($"CurveV1: Freq: {entry.FrequencyInkHz}, Volt: {entry.VoltageInMicroV}");
- }
+ //foreach (var entry in CurveV1.GPUCurveEntries)
+ //{
+ // Logger.Debug($"CurveV1: Freq: {entry.FrequencyInkHz}, Volt: {entry.VoltageInMicroV}");
+ //}
return true;
}
diff --git a/ColorControl/Services/NVIDIA/NvPanel.Designer.cs b/ColorControl/Services/NVIDIA/NvPanel.Designer.cs
index 21e2cc5..416f490 100644
--- a/ColorControl/Services/NVIDIA/NvPanel.Designer.cs
+++ b/ColorControl/Services/NVIDIA/NvPanel.Designer.cs
@@ -61,8 +61,6 @@ namespace ColorControl.Services.NVIDIA
miNvPresetColorEnhancementsIncluded = new System.Windows.Forms.ToolStripMenuItem();
mnuRefreshRate = new System.Windows.Forms.ToolStripMenuItem();
miRefreshRateIncluded = new System.Windows.Forms.ToolStripMenuItem();
- mnuNvResolution = new System.Windows.Forms.ToolStripMenuItem();
- miNvResolutionIncluded = new System.Windows.Forms.ToolStripMenuItem();
miNvPresetDithering = new System.Windows.Forms.ToolStripMenuItem();
miNvPresetApplyDithering = new System.Windows.Forms.ToolStripMenuItem();
miNvPresetDitheringEnabled = new System.Windows.Forms.ToolStripMenuItem();
@@ -92,6 +90,8 @@ namespace ColorControl.Services.NVIDIA
miNvHdmiIncluded = new System.Windows.Forms.ToolStripMenuItem();
mnuNvOverclocking = new System.Windows.Forms.ToolStripMenuItem();
miNvOverclockingIncluded = new System.Windows.Forms.ToolStripMenuItem();
+ mnuNvTriggers = new System.Windows.Forms.ToolStripMenuItem();
+ miNvTrigger1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
miNvCopyId = new System.Windows.Forms.ToolStripMenuItem();
btnApply = new System.Windows.Forms.Button();
lvNvPresets = new System.Windows.Forms.ListView();
@@ -102,8 +102,10 @@ namespace ColorControl.Services.NVIDIA
miNvTestDithering = new System.Windows.Forms.ToolStripMenuItem();
miNVIDIAInfo = new System.Windows.Forms.ToolStripMenuItem();
lvNvPresetsToolTip = new System.Windows.Forms.ToolTip(components);
- mnuNvTriggers = new System.Windows.Forms.ToolStripMenuItem();
- miNvTrigger1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ mnuNvResolution = new System.Windows.Forms.ToolStripMenuItem();
+ miNvResolutionIncluded = new System.Windows.Forms.ToolStripMenuItem();
+ mnuNvActiveResolution = new System.Windows.Forms.ToolStripMenuItem();
+ mnuNvVirtualResolution = new System.Windows.Forms.ToolStripMenuItem();
mnuNvPresets.SuspendLayout();
mnuNvSettings.SuspendLayout();
SuspendLayout();
@@ -383,7 +385,7 @@ namespace ColorControl.Services.NVIDIA
// miNvPresetColorSettings
//
miNvPresetColorSettings.Name = "miNvPresetColorSettings";
- miNvPresetColorSettings.Size = new System.Drawing.Size(120, 22);
+ miNvPresetColorSettings.Size = new System.Drawing.Size(180, 22);
miNvPresetColorSettings.Text = "Included";
miNvPresetColorSettings.Click += miNvPresetColorSettings_Click;
//
@@ -397,7 +399,7 @@ namespace ColorControl.Services.NVIDIA
// miNvPresetColorEnhancementsIncluded
//
miNvPresetColorEnhancementsIncluded.Name = "miNvPresetColorEnhancementsIncluded";
- miNvPresetColorEnhancementsIncluded.Size = new System.Drawing.Size(120, 22);
+ miNvPresetColorEnhancementsIncluded.Size = new System.Drawing.Size(180, 22);
miNvPresetColorEnhancementsIncluded.Text = "Included";
miNvPresetColorEnhancementsIncluded.Click += miNvPresetColorEnhancementsIncluded_Click;
//
@@ -411,25 +413,10 @@ namespace ColorControl.Services.NVIDIA
// miRefreshRateIncluded
//
miRefreshRateIncluded.Name = "miRefreshRateIncluded";
- miRefreshRateIncluded.Size = new System.Drawing.Size(120, 22);
+ miRefreshRateIncluded.Size = new System.Drawing.Size(180, 22);
miRefreshRateIncluded.Text = "Included";
miRefreshRateIncluded.Click += includedToolStripMenuItem_Click;
//
- // mnuNvResolution
- //
- mnuNvResolution.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miNvResolutionIncluded });
- mnuNvResolution.Name = "mnuNvResolution";
- mnuNvResolution.Size = new System.Drawing.Size(184, 22);
- mnuNvResolution.Text = "Resolution";
- //
- // miNvResolutionIncluded
- //
- miNvResolutionIncluded.CheckOnClick = true;
- miNvResolutionIncluded.Name = "miNvResolutionIncluded";
- miNvResolutionIncluded.Size = new System.Drawing.Size(120, 22);
- miNvResolutionIncluded.Text = "Included";
- miNvResolutionIncluded.Click += miNvResolutionIncluded_Click;
- //
// miNvPresetDithering
//
miNvPresetDithering.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miNvPresetApplyDithering, miNvPresetDitheringEnabled, mnuNvDitheringBitDepth, mnuNvDitheringMode });
@@ -440,14 +427,14 @@ namespace ColorControl.Services.NVIDIA
// miNvPresetApplyDithering
//
miNvPresetApplyDithering.Name = "miNvPresetApplyDithering";
- miNvPresetApplyDithering.Size = new System.Drawing.Size(122, 22);
+ miNvPresetApplyDithering.Size = new System.Drawing.Size(180, 22);
miNvPresetApplyDithering.Text = "Included";
miNvPresetApplyDithering.Click += miNvPresetApplyDithering_Click;
//
// miNvPresetDitheringEnabled
//
miNvPresetDitheringEnabled.Name = "miNvPresetDitheringEnabled";
- miNvPresetDitheringEnabled.Size = new System.Drawing.Size(122, 22);
+ miNvPresetDitheringEnabled.Size = new System.Drawing.Size(180, 22);
miNvPresetDitheringEnabled.Text = "Enabled";
miNvPresetDitheringEnabled.Click += miNvPresetDitheringEnabled_Click;
//
@@ -455,7 +442,7 @@ namespace ColorControl.Services.NVIDIA
//
mnuNvDitheringBitDepth.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miNvDithering6bit, miNvDithering8bit, miNvDithering10bit });
mnuNvDitheringBitDepth.Name = "mnuNvDitheringBitDepth";
- mnuNvDitheringBitDepth.Size = new System.Drawing.Size(122, 22);
+ mnuNvDitheringBitDepth.Size = new System.Drawing.Size(180, 22);
mnuNvDitheringBitDepth.Text = "Bit depth";
//
// miNvDithering6bit
@@ -486,7 +473,7 @@ namespace ColorControl.Services.NVIDIA
//
mnuNvDitheringMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { spatial1ToolStripMenuItem, spatial2ToolStripMenuItem, spatialDynamic2x2ToolStripMenuItem, spatialStatic2x2ToolStripMenuItem, temporalToolStripMenuItem });
mnuNvDitheringMode.Name = "mnuNvDitheringMode";
- mnuNvDitheringMode.Size = new System.Drawing.Size(122, 22);
+ mnuNvDitheringMode.Size = new System.Drawing.Size(180, 22);
mnuNvDitheringMode.Text = "Mode";
//
// spatial1ToolStripMenuItem
@@ -597,7 +584,7 @@ namespace ColorControl.Services.NVIDIA
// miNvDriverSettingsIncluded
//
miNvDriverSettingsIncluded.Name = "miNvDriverSettingsIncluded";
- miNvDriverSettingsIncluded.Size = new System.Drawing.Size(120, 22);
+ miNvDriverSettingsIncluded.Size = new System.Drawing.Size(180, 22);
miNvDriverSettingsIncluded.Text = "Included";
miNvDriverSettingsIncluded.Click += miNvDriverSettingsIncluded_Click;
//
@@ -611,7 +598,7 @@ namespace ColorControl.Services.NVIDIA
// miNvOtherIncluded
//
miNvOtherIncluded.Name = "miNvOtherIncluded";
- miNvOtherIncluded.Size = new System.Drawing.Size(120, 22);
+ miNvOtherIncluded.Size = new System.Drawing.Size(180, 22);
miNvOtherIncluded.Text = "Included";
miNvOtherIncluded.Click += miNvOtherIncluded_Click;
//
@@ -625,7 +612,7 @@ namespace ColorControl.Services.NVIDIA
// miNvHdmiIncluded
//
miNvHdmiIncluded.Name = "miNvHdmiIncluded";
- miNvHdmiIncluded.Size = new System.Drawing.Size(120, 22);
+ miNvHdmiIncluded.Size = new System.Drawing.Size(180, 22);
miNvHdmiIncluded.Text = "Included";
miNvHdmiIncluded.Click += miNvHdmiIncluded_Click;
//
@@ -643,6 +630,20 @@ namespace ColorControl.Services.NVIDIA
miNvOverclockingIncluded.Text = "Included";
miNvOverclockingIncluded.Click += miNvOverclockingIncluded_Click;
//
+ // mnuNvTriggers
+ //
+ mnuNvTriggers.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miNvTrigger1ToolStripMenuItem });
+ mnuNvTriggers.Name = "mnuNvTriggers";
+ mnuNvTriggers.Size = new System.Drawing.Size(184, 22);
+ mnuNvTriggers.Text = "Triggers";
+ //
+ // miNvTrigger1ToolStripMenuItem
+ //
+ miNvTrigger1ToolStripMenuItem.Name = "miNvTrigger1ToolStripMenuItem";
+ miNvTrigger1ToolStripMenuItem.Size = new System.Drawing.Size(119, 22);
+ miNvTrigger1ToolStripMenuItem.Text = "Trigger 1";
+ miNvTrigger1ToolStripMenuItem.Click += miNvTrigger1ToolStripMenuItem_Click;
+ //
// miNvCopyId
//
miNvCopyId.Name = "miNvCopyId";
@@ -727,19 +728,31 @@ namespace ColorControl.Services.NVIDIA
miNVIDIAInfo.Text = "NVIDIA Info";
miNVIDIAInfo.Click += miNVIDIAInfo_Click;
//
- // mnuNvTriggers
+ // mnuNvResolution
//
- mnuNvTriggers.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miNvTrigger1ToolStripMenuItem });
- mnuNvTriggers.Name = "mnuNvTriggers";
- mnuNvTriggers.Size = new System.Drawing.Size(184, 22);
- mnuNvTriggers.Text = "Triggers";
+ mnuNvResolution.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { miNvResolutionIncluded, mnuNvActiveResolution, mnuNvVirtualResolution });
+ mnuNvResolution.Name = "mnuNvResolution";
+ mnuNvResolution.Size = new System.Drawing.Size(184, 22);
+ mnuNvResolution.Text = "Resolution";
//
- // miNvTrigger1ToolStripMenuItem
+ // miNvResolutionIncluded
//
- miNvTrigger1ToolStripMenuItem.Name = "miNvTrigger1ToolStripMenuItem";
- miNvTrigger1ToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
- miNvTrigger1ToolStripMenuItem.Text = "Trigger 1";
- miNvTrigger1ToolStripMenuItem.Click += miNvTrigger1ToolStripMenuItem_Click;
+ miNvResolutionIncluded.Name = "miNvResolutionIncluded";
+ miNvResolutionIncluded.Size = new System.Drawing.Size(180, 22);
+ miNvResolutionIncluded.Text = "Included";
+ miNvResolutionIncluded.Click += miNvResolutionIncluded_Click;
+ //
+ // mnuNvActiveResolution
+ //
+ mnuNvActiveResolution.Name = "mnuNvActiveResolution";
+ mnuNvActiveResolution.Size = new System.Drawing.Size(180, 22);
+ mnuNvActiveResolution.Text = "Active";
+ //
+ // mnuNvVirtualResolution
+ //
+ mnuNvVirtualResolution.Name = "mnuNvVirtualResolution";
+ mnuNvVirtualResolution.Size = new System.Drawing.Size(180, 22);
+ mnuNvVirtualResolution.Text = "Virtual";
//
// NvPanel
//
@@ -817,8 +830,6 @@ namespace ColorControl.Services.NVIDIA
private System.Windows.Forms.ToolStripMenuItem miNvCopyId;
private System.Windows.Forms.Label lblNvPresetName;
private System.Windows.Forms.TextBox edtNvPresetName;
- private System.Windows.Forms.ToolStripMenuItem mnuNvResolution;
- private System.Windows.Forms.ToolStripMenuItem miNvResolutionIncluded;
private System.Windows.Forms.ToolStripMenuItem mnuNvDriverSettings;
private System.Windows.Forms.ToolStripMenuItem miNvDriverSettingsIncluded;
private System.Windows.Forms.CheckBox chkNvShowInQuickAccess;
@@ -852,5 +863,9 @@ namespace ColorControl.Services.NVIDIA
private System.Windows.Forms.ToolStripMenuItem miHDROutputModeHDR10Plus;
private System.Windows.Forms.ToolStripMenuItem mnuNvTriggers;
private System.Windows.Forms.ToolStripMenuItem miNvTrigger1ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem mnuNvResolution;
+ private System.Windows.Forms.ToolStripMenuItem miNvResolutionIncluded;
+ private System.Windows.Forms.ToolStripMenuItem mnuNvActiveResolution;
+ private System.Windows.Forms.ToolStripMenuItem mnuNvVirtualResolution;
}
}
diff --git a/ColorControl/Services/NVIDIA/NvPanel.cs b/ColorControl/Services/NVIDIA/NvPanel.cs
index f243625..f1a6bb4 100644
--- a/ColorControl/Services/NVIDIA/NvPanel.cs
+++ b/ColorControl/Services/NVIDIA/NvPanel.cs
@@ -15,7 +15,6 @@ using NStandard;
using NvAPIWrapper.Display;
using NvAPIWrapper.GPU;
using NvAPIWrapper.Native.Display;
-using NWin32.NativeTypes;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -316,7 +315,7 @@ namespace ColorControl.Services.NVIDIA
{
var preset = GetSelectedNvPreset();
- preset.applyRefreshRate = !preset.applyRefreshRate;
+ preset.DisplayConfig.ApplyRefreshRate = !preset.DisplayConfig.ApplyRefreshRate;
AddOrUpdateItem();
}
@@ -342,6 +341,7 @@ namespace ColorControl.Services.NVIDIA
mnuNvPresetsColorEnhancements.Enabled = preset != null;
mnuRefreshRate.Enabled = preset != null;
mnuNvResolution.Enabled = preset != null;
+ mnuNvActiveResolution.Enabled = preset != null;
miNvPresetDithering.Enabled = preset != null;
miNvHDR.Enabled = preset != null;
miNvCopyId.Visible = presetItemsVisible;
@@ -435,8 +435,8 @@ namespace ColorControl.Services.NVIDIA
mnuNvPresetsColorSettings.Font = _menuItemFonts[preset.applyColorData];
mnuNvPresetsColorEnhancements.Font = _menuItemFonts[preset.ApplyColorEnhancements];
- mnuRefreshRate.Font = _menuItemFonts[preset.applyRefreshRate];
- mnuNvResolution.Font = _menuItemFonts[preset.applyResolution];
+ mnuRefreshRate.Font = _menuItemFonts[preset.DisplayConfig.ApplyRefreshRate];
+ mnuNvResolution.Font = _menuItemFonts[preset.DisplayConfig.ApplyResolution];
miNvPresetDithering.Font = _menuItemFonts[preset.applyDithering];
miNvHDR.Font = _menuItemFonts[preset.applyHDR];
mnuNvOverclocking.Font = _menuItemFonts[preset.applyOverclocking];
@@ -538,17 +538,14 @@ namespace ColorControl.Services.NVIDIA
{
mnuRefreshRate.DropDownItems.RemoveAt(mnuRefreshRate.DropDownItems.Count - 1);
}
- while (mnuNvResolution.DropDownItems.Count > 1)
- {
- mnuNvResolution.DropDownItems.RemoveAt(mnuNvResolution.DropDownItems.Count - 1);
- }
+
+ mnuNvActiveResolution.DropDownItems.Clear();
+ mnuNvVirtualResolution.DropDownItems.Clear();
}
if (mnuRefreshRate.DropDownItems.Count == 1)
{
- var refreshRates = _nvService.GetAvailableRefreshRates(preset);
-
- //var v2 = _nvService.GetAvailableRefreshRatesV2(preset);
+ var refreshRates = _nvService.GetAvailableRefreshRatesV2(preset);
_lastDisplayRefreshRates = displayName;
@@ -560,36 +557,64 @@ namespace ColorControl.Services.NVIDIA
}
}
- if (mnuNvResolution.DropDownItems.Count == 1)
+ var modes = default(List);
+
+ if (mnuNvActiveResolution.DropDownItems.Count == 0)
{
- var modes = _nvService.GetAvailableResolutions(preset);
+ modes = _nvService.GetAvailableResolutionsV2(preset);
foreach (var mode in modes)
{
- var item = mnuNvResolution.DropDownItems.AddCustom($"{mode.dmPelsWidth}x{mode.dmPelsHeight}");
+ var item = mnuNvActiveResolution.DropDownItems.AddCustom(mode.ToString());
item.Tag = mode;
item.Click += resolutionNvMenuItem_Click;
}
}
- miRefreshRateIncluded.Checked = preset.applyRefreshRate;
+ if (mnuNvVirtualResolution.DropDownItems.Count == 0)
+ {
+ modes ??= _nvService.GetAvailableResolutionsV2(preset);
+
+ foreach (var mode in modes)
+ {
+ var item = mnuNvVirtualResolution.DropDownItems.AddCustom(mode.ToString());
+ item.Tag = mode;
+ item.Click += virtualResolutionNvMenuItem_Click;
+ }
+ }
+
+ miRefreshRateIncluded.Checked = preset.DisplayConfig.ApplyRefreshRate;
foreach (var item in mnuRefreshRate.DropDownItems)
{
if (item is ToolStripMenuItem menuItem && menuItem.Tag != null)
{
- menuItem.Checked = (uint)menuItem.Tag == preset.refreshRate;
+ menuItem.Checked = ((Rational)menuItem.Tag).Equals(preset.DisplayConfig.RefreshRate);
}
}
- miNvResolutionIncluded.Checked = preset.applyResolution;
- foreach (var item in mnuNvResolution.DropDownItems)
+ miNvResolutionIncluded.Checked = preset.DisplayConfig.ApplyResolution;
+ foreach (var item in mnuNvActiveResolution.DropDownItems)
{
if (item is ToolStripMenuItem menuItem && menuItem.Tag != null)
{
- var mode = (DEVMODEA)menuItem.Tag;
- menuItem.Checked = mode.dmPelsWidth == preset.resolutionWidth && mode.dmPelsHeight == preset.resolutionHeight;
+ var mode = (VirtualResolution)menuItem.Tag;
+ menuItem.Checked = mode.ActiveWidth == preset.DisplayConfig.Resolution.ActiveWidth && mode.ActiveHeight == preset.DisplayConfig.Resolution.ActiveHeight;
}
}
+
+ foreach (var item in mnuNvVirtualResolution.DropDownItems)
+ {
+ if (item is ToolStripMenuItem menuItem && menuItem.Tag != null)
+ {
+ var mode = (VirtualResolution)menuItem.Tag;
+ menuItem.Checked = mode.VirtualWidth == preset.DisplayConfig.Resolution.VirtualWidth && mode.VirtualHeight == preset.DisplayConfig.Resolution.VirtualHeight;
+ }
+ }
+
+ FormUtils.BuildDropDownMenu(mnuNvResolution, "Scaling/Aspect Ratio", typeof(CCD.DisplayConfigScaling), preset.DisplayConfig, "Scaling", UpdateDisplayConfigScaling, unchanged: false,
+ skipValues: [CCD.DisplayConfigScaling.Zero, CCD.DisplayConfigScaling.Custom, CCD.DisplayConfigScaling.ForceUint32]);
+ FormUtils.BuildDropDownMenu(mnuNvResolution, "Rotation", typeof(CCD.DisplayConfigRotation), preset.DisplayConfig, "Rotation", UpdateDisplayConfigRotation, unchanged: false,
+ skipValues: [CCD.DisplayConfigRotation.Zero, CCD.DisplayConfigRotation.ForceUint32]);
}
private void UpdateNvPresetMenuFont(bool updateTopItems = false)
@@ -809,6 +834,54 @@ namespace ColorControl.Services.NVIDIA
AddOrUpdateItem();
}
+ private void UpdateDisplayConfigScaling(object sender, EventArgs e)
+ {
+ var menuItem = (ToolStripMenuItem)sender;
+ var value = (CCD.DisplayConfigScaling)menuItem.Tag;
+
+ var preset = GetSelectedNvPreset(true);
+ var settings = preset.DisplayConfig;
+
+ if (preset.IsDisplayPreset)
+ {
+ var updatedSettings = new DisplayConfig(settings);
+ updatedSettings.Scaling = value;
+
+ _nvService.SetMode(preset.Display.Name, updatedSettings);
+
+ UpdateDisplayInfoItems();
+ return;
+ }
+
+ preset.DisplayConfig.Scaling = value;
+
+ AddOrUpdateItem();
+ }
+
+ private void UpdateDisplayConfigRotation(object sender, EventArgs e)
+ {
+ var menuItem = (ToolStripMenuItem)sender;
+ var value = (CCD.DisplayConfigRotation)menuItem.Tag;
+
+ var preset = GetSelectedNvPreset(true);
+ var settings = preset.DisplayConfig;
+
+ if (preset.IsDisplayPreset)
+ {
+ var updatedSettings = new DisplayConfig(settings);
+ updatedSettings.Rotation = value;
+
+ _nvService.SetMode(preset.Display.Name, updatedSettings);
+
+ UpdateDisplayInfoItems();
+ return;
+ }
+
+ preset.DisplayConfig.Rotation = value;
+
+ AddOrUpdateItem();
+ }
+
private void nvPresetBrightnessMenuItem_Click(object sender, EventArgs e)
{
var preset = GetSelectedNvPreset(true);
@@ -994,39 +1067,63 @@ namespace ColorControl.Services.NVIDIA
private void refreshRateMenuItem_Click(object sender, EventArgs e)
{
- var refreshRate = (uint)((ToolStripItem)sender).Tag;
+ var refreshRate = (Rational)((ToolStripItem)sender).Tag;
var preset = GetSelectedNvPreset(true);
if (preset.IsDisplayPreset)
{
- _nvService.SetMode(refreshRate: refreshRate);
+ _nvService.SetMode(refreshRate: refreshRate, preset: preset);
UpdateDisplayInfoItems();
return;
}
- preset.refreshRate = refreshRate;
+ preset.DisplayConfig.RefreshRate = refreshRate;
AddOrUpdateItem();
}
private void resolutionNvMenuItem_Click(object sender, EventArgs e)
{
- var mode = (DEVMODEA)((ToolStripItem)sender).Tag;
+ var mode = (VirtualResolution)((ToolStripItem)sender).Tag;
var preset = GetSelectedNvPreset(true);
if (preset.IsDisplayPreset)
{
- _nvService.SetMode(mode.dmPelsWidth, mode.dmPelsHeight);
+ _nvService.SetMode(mode, preset: preset);
UpdateDisplayInfoItems();
return;
}
- preset.resolutionWidth = mode.dmPelsWidth;
- preset.resolutionHeight = mode.dmPelsHeight;
+ preset.DisplayConfig.Resolution.ActiveWidth = mode.ActiveWidth;
+ preset.DisplayConfig.Resolution.ActiveHeight = mode.ActiveHeight;
+
+ AddOrUpdateItem();
+ }
+
+ private void virtualResolutionNvMenuItem_Click(object sender, EventArgs e)
+ {
+ var mode = (VirtualResolution)((ToolStripItem)sender).Tag;
+
+ var preset = GetSelectedNvPreset(true);
+
+ var virtualMode = new VirtualResolution(mode);
+ virtualMode.ActiveWidth = preset.DisplayConfig.Resolution.ActiveWidth;
+ virtualMode.ActiveHeight = preset.DisplayConfig.Resolution.ActiveHeight;
+
+ if (preset.IsDisplayPreset)
+ {
+ _nvService.SetMode(virtualMode, preset: preset);
+
+ UpdateDisplayInfoItems();
+ return;
+ }
+
+ preset.DisplayConfig.Resolution.VirtualWidth = virtualMode.VirtualWidth;
+ preset.DisplayConfig.Resolution.VirtualHeight = virtualMode.VirtualHeight;
AddOrUpdateItem();
}
@@ -1155,7 +1252,9 @@ namespace ColorControl.Services.NVIDIA
return;
}
- var modes = _nvService.GetAvailableResolutions(preset).Select(d => $"{d.dmPelsWidth}x{d.dmPelsHeight}").ToList();
+ var resolutions = _nvService.GetAvailableResolutionsV2(preset);
+
+ var modes = resolutions.Select(r => r.ToString()).ToList();
var modesField = FieldDefinition.CreateDropDownField("Resolution", modes);
@@ -1166,12 +1265,12 @@ namespace ColorControl.Services.NVIDIA
return;
}
- var values = modesField.Value.ToString().Split('x').Select(s => Utils.ParseUInt(s)).ToArray();
+ var value = modesField.Value.ToString();
+ var resolution = resolutions.First(r => r.ToString() == value);
- preset.resolutionWidth = values[0];
- preset.resolutionHeight = values[1];
+ preset.DisplayConfig.Resolution = resolution;
- preset.applyResolution = true;
+ preset.DisplayConfig.ApplyResolution = true;
}
private void AskRefreshRate(NvPreset preset, bool ask = true)
@@ -1181,9 +1280,11 @@ namespace ColorControl.Services.NVIDIA
return;
}
- var modes = _nvService.GetAvailableRefreshRates(preset).Select(d => d.ToString()).ToList();
+ var modes = _nvService.GetAvailableRefreshRatesV2(preset).ToList();
- var modesField = FieldDefinition.CreateDropDownField("Refresh rate", modes);
+ var stringModes = modes.Select(m => m.ToString()).ToList();
+
+ var modesField = FieldDefinition.CreateDropDownField("Refresh rate", stringModes);
var result = MessageForms.ShowDialog("Refresh rate", new[] { modesField });
@@ -1192,10 +1293,14 @@ namespace ColorControl.Services.NVIDIA
return;
}
- var value = modesField.ValueAsUInt;
+ var value = modesField.Value.ToString();
+ var refreshRate = modes.FirstOrDefault(m => m.ToString() == value);
- preset.refreshRate = value;
- preset.applyRefreshRate = true;
+ if (refreshRate != null)
+ {
+ preset.DisplayConfig.RefreshRate = refreshRate;
+ preset.DisplayConfig.ApplyRefreshRate = true;
+ }
}
private void miHDRIncluded_Click(object sender, EventArgs e)
@@ -1320,8 +1425,6 @@ namespace ColorControl.Services.NVIDIA
private void edtShortcut_TextChanged(object sender, EventArgs e)
{
- var text = edtShortcut.Text;
-
var preset = GetSelectedNvPreset();
ServiceFormUtils.UpdateShortcutTextBox(edtShortcut, preset);
@@ -1331,7 +1434,7 @@ namespace ColorControl.Services.NVIDIA
{
var preset = GetSelectedNvPreset();
- preset.applyResolution = !preset.applyResolution;
+ preset.DisplayConfig.ApplyResolution = !preset.DisplayConfig.ApplyResolution;
AddOrUpdateItem();
}
diff --git a/ColorControl/Services/NVIDIA/NvPreset.cs b/ColorControl/Services/NVIDIA/NvPreset.cs
index e34827b..3b8d7dd 100644
--- a/ColorControl/Services/NVIDIA/NvPreset.cs
+++ b/ColorControl/Services/NVIDIA/NvPreset.cs
@@ -27,11 +27,7 @@ namespace ColorControl.Services.NVIDIA
public bool toggleHDR { get; set; }
public bool applyDithering { get; set; }
public bool? ditheringEnabled { get; set; }
- public bool applyRefreshRate { get; set; }
- public uint refreshRate { get; set; }
- public bool applyResolution { get; set; }
- public uint resolutionWidth { get; set; }
- public uint resolutionHeight { get; set; }
+ public DisplayConfig DisplayConfig { get; set; }
public bool primaryDisplay { get; set; }
public string displayName { get; set; }
public uint ditheringBits { get; set; }
@@ -67,11 +63,7 @@ namespace ColorControl.Services.NVIDIA
applyHDR = false;
HDREnabled = false;
toggleHDR = false;
- applyRefreshRate = false;
- refreshRate = 60;
- applyResolution = false;
- resolutionWidth = 0;
- resolutionHeight = 0;
+ DisplayConfig = new DisplayConfig();
primaryDisplay = true;
ditheringBits = 1;
ditheringMode = 4;
@@ -108,11 +100,9 @@ namespace ColorControl.Services.NVIDIA
applyDithering = preset.applyDithering;
ditheringEnabled = preset.ditheringEnabled;
- applyRefreshRate = preset.applyRefreshRate;
- refreshRate = preset.refreshRate;
- applyResolution = preset.applyResolution;
- resolutionWidth = preset.resolutionWidth;
- resolutionHeight = preset.resolutionHeight;
+
+ DisplayConfig = new DisplayConfig(DisplayConfig);
+
applyDriverSettings = preset.applyDriverSettings;
driverSettings = new Dictionary(preset.driverSettings);
@@ -137,7 +127,7 @@ namespace ColorControl.Services.NVIDIA
public static string[] GetColumnNames()
{
- return new[] { "Name", "Display|140", "Color settings (BPC, format, dyn. range, color space)|260", "Color enhancements", "Refresh rate|100", "Resolution|120", "Dithering", "HDR", "Driver settings|300", "HDMI settings|200", "Other|200", "Overclocking|300", "Shortcut", "Apply on startup" };
+ return new[] { "Name", "Display|140", "Color settings (BPC, format, dyn. range, color space)|260", "Color enhancements", "Refresh rate|120", "Resolution|150", "Dithering", "HDR", "Driver settings|300", "HDMI settings|200", "Other|200", "Overclocking|300", "Shortcut", "Apply on startup" };
}
public override List GetDisplayValues(Config config = null)
@@ -158,11 +148,11 @@ namespace ColorControl.Services.NVIDIA
values.Add(FormatDisplaySetting(GetColorEnhancementsDescription(), isCurrent, ApplyColorEnhancements));
- values.Add(FormatDisplaySetting(string.Format("{0}Hz", refreshRate), isCurrent, applyRefreshRate));
+ values.Add(FormatDisplaySetting(string.Format("{0}Hz", DisplayConfig.RefreshRate), isCurrent, DisplayConfig.ApplyRefreshRate));
- if (applyResolution || resolutionWidth > 0)
+ if (DisplayConfig.ApplyResolution || DisplayConfig.Resolution.ActiveWidth > 0)
{
- values.Add(FormatDisplaySetting(string.Format("{0}x{1}", resolutionWidth, resolutionHeight), isCurrent, applyResolution));
+ values.Add(FormatDisplaySetting(string.Format("{0}", DisplayConfig.GetResolutionDesc()), isCurrent, DisplayConfig.ApplyResolution));
}
else
{
@@ -190,7 +180,7 @@ namespace ColorControl.Services.NVIDIA
if (isCurrent)
{
- InfoLine = string.Format("{0}: {1}, {2}Hz, HDR: {3}", displayName, colorSettings, refreshRate, HDREnabled ? "Yes" : "No");
+ InfoLine = string.Format("{0}: {1}, {2}Hz, {3}, HDR: {4}", displayName, colorSettings, DisplayConfig.RefreshRate, DisplayConfig.GetResolutionDesc(), HDREnabled ? "Yes" : "No");
}
return values;
@@ -380,14 +370,14 @@ namespace ColorControl.Services.NVIDIA
sb.Append(colorSettings);
sb.Append(" / ");
}
- if (applyRefreshRate)
+ if (DisplayConfig.ApplyRefreshRate)
{
- sb.AppendFormat("{0}Hz", refreshRate);
+ sb.AppendFormat("{0}Hz", DisplayConfig.RefreshRate);
sb.Append(" / ");
}
- if (applyResolution)
+ if (DisplayConfig.ApplyResolution)
{
- sb.AppendFormat("{0}x{1}", resolutionWidth, resolutionHeight);
+ sb.AppendFormat("{0}", DisplayConfig.GetResolutionDesc());
sb.Append(" / ");
}
if (applyDithering)
diff --git a/ColorControl/Services/NVIDIA/NvService.cs b/ColorControl/Services/NVIDIA/NvService.cs
index 35c3602..de391e4 100644
--- a/ColorControl/Services/NVIDIA/NvService.cs
+++ b/ColorControl/Services/NVIDIA/NvService.cs
@@ -23,7 +23,6 @@ using NvAPIWrapper.Native.GPU.Structures;
using NvAPIWrapper.Native.Helpers;
using NvAPIWrapper.Native.Interfaces.Display;
using NWin32;
-using NWin32.NativeTypes;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -422,11 +421,6 @@ namespace ColorControl.Services.NVIDIA
return false;
}
- if (preset.applyOther && preset.scaling.HasValue)
- {
- SetScaling(display, preset.scaling.Value);
- }
-
var hdrEnabled = IsHDREnabled();
var newHdrEnabled = preset.applyHDR && (preset.HDREnabled || (preset.toggleHDR && !hdrEnabled));
@@ -434,12 +428,13 @@ namespace ColorControl.Services.NVIDIA
if (preset.applyColorData && (ColorDataDiffers(preset.colorData) || (!newHdrEnabled && preset.applyColorData && preset.colorData.Colorimetry != ColorDataColorimetry.Auto)))
{
- if (preset.applyRefreshRate || preset.applyResolution)
+ if (preset.DisplayConfig.ApplyRefreshRate || preset.DisplayConfig.ApplyResolution)
{
var timing = display.DisplayDevice.CurrentTiming;
- if ((preset.applyRefreshRate && preset.refreshRate < timing.Extra.RefreshRate) || (preset.applyResolution && preset.resolutionWidth < timing.HorizontalVisible))
+ if ((preset.DisplayConfig.ApplyRefreshRate && preset.DisplayConfig.RefreshRate.MilliValue < timing.Extra.FrequencyInMillihertz) ||
+ (preset.DisplayConfig.ApplyResolution && preset.DisplayConfig.Resolution.ActiveWidth < timing.HorizontalVisible))
{
- SetMode(preset.applyResolution ? preset.resolutionWidth : 0, preset.applyResolution ? preset.resolutionHeight : 0, preset.applyRefreshRate ? preset.refreshRate : 0, true);
+ SetMode(preset.DisplayConfig, true);
}
}
@@ -464,9 +459,9 @@ namespace ColorControl.Services.NVIDIA
}
}
- if (preset.applyRefreshRate || preset.applyResolution)
+ if (preset.DisplayConfig.ApplyRefreshRate || preset.DisplayConfig.ApplyResolution)
{
- if (!SetMode(preset.applyResolution ? preset.resolutionWidth : 0, preset.applyResolution ? preset.resolutionHeight : 0, preset.applyRefreshRate ? preset.refreshRate : 0, true))
+ if (!SetMode(preset.DisplayConfig, true))
{
result = false;
}
@@ -483,6 +478,11 @@ namespace ColorControl.Services.NVIDIA
{
CCD.SetDisplayDefaultColorProfile(display.Name, preset.ColorProfileSettings.ProfileName, _globalContext.Config.SetMinTmlAndMaxTml);
}
+
+ if (preset.scaling.HasValue)
+ {
+ SetScaling(display, preset.scaling.Value);
+ }
}
if (preset.applyHdmiSettings)
@@ -1035,50 +1035,26 @@ namespace ColorControl.Services.NVIDIA
return dither;
}
- public bool SetMode(uint resolutionWidth = 0, uint resolutionHeight = 0, uint refreshRate = 0, bool updateRegistry = false)
+ public bool SetMode(VirtualResolution resolution = null, Rational refreshRate = null, bool updateRegistry = false, NvPreset preset = null)
{
- var display = GetCurrentDisplay();
+ var display = preset == null ? GetCurrentDisplay() : GetPresetDisplay(preset);
if (display == null)
{
return false;
}
- var desktopRect = GetDesktopRect(display);
-
- if (refreshRate == 0)
- {
- var timing = display.DisplayDevice.CurrentTiming;
- refreshRate = (uint)timing.Extra.RefreshRate;
- }
-
- if (resolutionWidth == 0)
- {
- resolutionWidth = (uint)desktopRect.Width;
- resolutionHeight = (uint)desktopRect.Height;
- }
-
- var portrait = IsDisplayInPortraitMode(display);
-
- return SetRefreshRateInternal(display.Name, (int)refreshRate, portrait, (int)resolutionWidth, (int)resolutionHeight, updateRegistry);
+ return SetMode(display.Name, resolution, refreshRate, updateRegistry);
}
- public List GetAvailableRefreshRates(NvPreset preset = null)
+ public bool SetMode(DisplayConfig displayConfig, bool updateRegistry = false, NvPreset preset = null)
{
- if (preset != null)
- {
- SetCurrentDisplay(preset);
- }
-
- var display = GetCurrentDisplay();
+ var display = preset == null ? GetCurrentDisplay() : GetPresetDisplay(preset);
if (display == null)
{
- return new List();
+ return false;
}
- var portrait = IsDisplayInPortraitMode(display);
- var desktopRect = GetDesktopRect(display);
-
- return GetAvailableRefreshRatesInternal(display.Name, portrait, desktopRect.Width, desktopRect.Height);
+ return SetMode(display.Name, displayConfig, updateRegistry);
}
public List GetAvailableRefreshRatesV2(NvPreset preset = null)
@@ -1094,10 +1070,25 @@ namespace ColorControl.Services.NVIDIA
return [];
}
- var portrait = IsDisplayInPortraitMode(display);
var desktopRect = GetDesktopRect(display);
- return GetAvailableRefreshRatesV2(display.Name, portrait, desktopRect.Width, desktopRect.Height);
+ return GetAvailableRefreshRatesV2(display.Name, desktopRect.Width, desktopRect.Height);
+ }
+
+ public List GetAvailableResolutionsV2(NvPreset preset = null)
+ {
+ if (preset != null)
+ {
+ SetCurrentDisplay(preset);
+ }
+
+ var display = GetCurrentDisplay();
+ if (display == null)
+ {
+ return [];
+ }
+
+ return GetAvailableResolutionsInternalV2(display.Name);
}
private Rectangle GetDesktopRect(Display display)
@@ -1126,25 +1117,6 @@ namespace ColorControl.Services.NVIDIA
}
}
- public List GetAvailableResolutions(NvPreset preset = null)
- {
- if (preset != null)
- {
- SetCurrentDisplay(preset);
- }
-
- var display = GetCurrentDisplay();
- if (display == null)
- {
- return new List();
- }
-
- var portrait = IsDisplayInPortraitMode(display);
- var timing = display.DisplayDevice.CurrentTiming;
-
- return GetAvailableResolutionsInternal(display.Name, portrait, (uint)(timing.Extra.RefreshRate));
- }
-
public bool IsHDREnabled(Display currentDisplay = null)
{
var display = currentDisplay ?? GetCurrentDisplay();
@@ -1537,11 +1509,7 @@ namespace ColorControl.Services.NVIDIA
preset.scaling = GetScaling(display);
preset.ColorProfileSettings.ProfileName = CCD.GetDisplayDefaultColorProfile(display.Name, preset.HDREnabled ? COLORPROFILESUBTYPE.CPST_EXTENDED_DISPLAY_COLOR_MODE : COLORPROFILESUBTYPE.CPST_STANDARD_DISPLAY_COLOR_MODE);
- var mode = GetCurrentMode(display.Name);
-
- preset.refreshRate = mode.dmDisplayFrequency;
- preset.resolutionHeight = mode.dmPelsHeight;
- preset.resolutionWidth = mode.dmPelsWidth;
+ preset.DisplayConfig = CCD.GetDisplayConfig(display.Name);
var ditherInfo = GetDithering(display);
diff --git a/ColorControl/Services/Samsung/SamsungDevice.cs b/ColorControl/Services/Samsung/SamsungDevice.cs
index 57b64f7..7eef059 100644
--- a/ColorControl/Services/Samsung/SamsungDevice.cs
+++ b/ColorControl/Services/Samsung/SamsungDevice.cs
@@ -43,8 +43,8 @@ namespace ColorControl.Services.Samsung
public enum ServiceMenuType
{
- HospitalityMenu,
- FactoryMenu2024,
+ FactoryMenu,
+ HospitalityMenu
}
public delegate void GenericDelegate(object sender);
@@ -702,12 +702,12 @@ namespace ColorControl.Services.Samsung
private async Task ServiceMenuAction(Dictionary _)
{
- var serviceMenuTypes = new[] { ServiceMenuType.HospitalityMenu, ServiceMenuType.FactoryMenu2024 }.Select(t => Utils.GetDescription(t));
+ var serviceMenuTypes = new[] { ServiceMenuType.FactoryMenu, ServiceMenuType.HospitalityMenu }.Select(t => Utils.GetDescription(t));
var serviceMenuTypeField = new FieldDefinition
{
Label = "Service Menu Access Type",
- SubLabel = "Both types will not reset your settings. 'Factory Menu 2024' is recommended for 2024 series. Click 'Next >' to continue or 'X' to stop",
+ SubLabel = "Both types will not reset your settings. 'FactoryMenu' is recommended for 2024 series but will also work for older ones. Click 'Next >' to continue or 'X' to stop",
FieldType = FieldType.DropDown,
Values = serviceMenuTypes,
Value = ServiceMenuType.HospitalityMenu
@@ -720,8 +720,8 @@ namespace ColorControl.Services.Samsung
return serviceMenuTypeField.ValueAsEnum() switch
{
- ServiceMenuType.HospitalityMenu => await OpenHospitalityMenu(),
- ServiceMenuType.FactoryMenu2024 => await OpenFactoryMenu2024()
+ ServiceMenuType.FactoryMenu => await OpenFactoryMenu(),
+ ServiceMenuType.HospitalityMenu => await OpenHospitalityMenu()
};
}
@@ -776,7 +776,7 @@ namespace ColorControl.Services.Samsung
return true;
}
- private async Task OpenFactoryMenu2024()
+ private async Task OpenFactoryMenu()
{
var preset1 = new SamsungPreset("ServiceMenuStep1", null, ["KEY_INFO", "KEY_FACTORY:2000"]);
var preset2 = new SamsungPreset("ServiceMenuStep2", null, ["KEY_UP", "KEY_0", "KEY_0", "KEY_9", "KEY_8"]);
diff --git a/Shared/Contracts/DisplayConfig.cs b/Shared/Contracts/DisplayConfig.cs
new file mode 100644
index 0000000..fcb493d
--- /dev/null
+++ b/Shared/Contracts/DisplayConfig.cs
@@ -0,0 +1,49 @@
+using ColorControl.Shared.Common;
+using static ColorControl.Shared.Native.CCD;
+
+namespace ColorControl.Shared.Contracts;
+
+public class DisplayConfig
+{
+ public bool ApplyResolution { get; set; }
+ public VirtualResolution Resolution { get; set; }
+ public bool ApplyRefreshRate { get; set; }
+ public Rational RefreshRate { get; set; }
+ public DisplayConfigScaling Scaling { get; set; }
+ public DisplayConfigRotation Rotation { get; set; }
+
+ public DisplayConfig()
+ {
+ RefreshRate = new Rational(60000, 1000);
+ Resolution = new VirtualResolution(0, 0);
+ Scaling = DisplayConfigScaling.Identity;
+ Rotation = DisplayConfigRotation.Identity;
+ }
+
+ public DisplayConfig(DisplayConfig displayConfig)
+ {
+ ApplyResolution = displayConfig.ApplyResolution;
+ Resolution = new VirtualResolution(displayConfig.Resolution);
+ ApplyRefreshRate = displayConfig.ApplyRefreshRate;
+ RefreshRate = new Rational(displayConfig.RefreshRate.Numerator, displayConfig.RefreshRate.Denominator);
+ Scaling = displayConfig.Scaling;
+ Rotation = displayConfig.Rotation;
+ }
+
+ public string GetResolutionDesc()
+ {
+ var text = Resolution.ToString();
+
+ if (Rotation is not DisplayConfigRotation.Identity or DisplayConfigRotation.Zero)
+ {
+ text += $" - {Rotation.GetDescription()}";
+ }
+
+ if (Scaling is not DisplayConfigScaling.Identity or DisplayConfigScaling.Zero)
+ {
+ text += $" - {Scaling.GetDescription()}";
+ }
+
+ return text;
+ }
+}
diff --git a/Shared/Contracts/Rational.cs b/Shared/Contracts/Rational.cs
index be81887..0e60c06 100644
--- a/Shared/Contracts/Rational.cs
+++ b/Shared/Contracts/Rational.cs
@@ -1,9 +1,11 @@
-namespace ColorControl.Shared.Contracts;
+using Newtonsoft.Json;
+
+namespace ColorControl.Shared.Contracts;
public class Rational
{
- public uint Numerator { get; }
- public uint Denominator { get; }
+ public uint Numerator { get; set; }
+ public uint Denominator { get; set; }
public Rational(uint numerator, uint denominator)
{
@@ -17,4 +19,12 @@ public class Rational
return $"{value:0.000}";
}
+
+ [JsonIgnore]
+ public uint MilliValue => (uint)(Numerator / (double)Denominator * 1000);
+
+ public bool Equals(Rational other)
+ {
+ return MilliValue == other.MilliValue;
+ }
}
diff --git a/Shared/Contracts/VirtualResolution.cs b/Shared/Contracts/VirtualResolution.cs
new file mode 100644
index 0000000..9ecf123
--- /dev/null
+++ b/Shared/Contracts/VirtualResolution.cs
@@ -0,0 +1,43 @@
+namespace ColorControl.Shared.Contracts;
+
+public class VirtualResolution
+{
+ public uint ActiveWidth { get; set; }
+ public uint ActiveHeight { get; set; }
+ public uint VirtualWidth { get; set; }
+ public uint VirtualHeight { get; set; }
+
+ public VirtualResolution(uint activeWidth, uint activeHeight)
+ {
+ ActiveWidth = activeWidth;
+ ActiveHeight = activeHeight;
+ VirtualWidth = activeWidth;
+ VirtualHeight = activeHeight;
+
+ }
+
+ public VirtualResolution(VirtualResolution resolution)
+ {
+ ActiveWidth = resolution.ActiveWidth;
+ ActiveHeight = resolution.ActiveHeight;
+ VirtualWidth = resolution.VirtualWidth;
+ VirtualHeight = resolution.VirtualHeight;
+ }
+
+ public override string ToString()
+ {
+ if (ActiveWidth == 0 && ActiveHeight == 0)
+ {
+ return "Not set";
+ }
+
+ if (VirtualWidth == 0 && VirtualHeight == 0)
+ {
+ return $"{ActiveWidth}x{ActiveHeight}";
+ }
+
+ return ActiveWidth == VirtualWidth && ActiveHeight == VirtualHeight ?
+ $"{ActiveWidth}x{ActiveHeight}" :
+ $"{VirtualWidth}x{VirtualHeight} ({ActiveWidth}x{ActiveHeight})";
+ }
+}
diff --git a/Shared/EventDispatcher/KeyboardShortcutDispatcher.cs b/Shared/EventDispatcher/KeyboardShortcutDispatcher.cs
index cc65fd0..8743cc2 100644
--- a/Shared/EventDispatcher/KeyboardShortcutDispatcher.cs
+++ b/Shared/EventDispatcher/KeyboardShortcutDispatcher.cs
@@ -313,7 +313,7 @@ public class KeyboardShortcutDispatcher : EventDispatcher 0)
{
- keys |= Keys.Control;
+ keys |= Keys.LWin;
}
keys |= (Keys)key;
diff --git a/Shared/Native/CCD.cs b/Shared/Native/CCD.cs
index d24c49e..e9c2f84 100644
--- a/Shared/Native/CCD.cs
+++ b/Shared/Native/CCD.cs
@@ -1,4 +1,5 @@
-using ColorControl.Shared.Forms;
+using ColorControl.Shared.Contracts;
+using ColorControl.Shared.Forms;
using MHC2Gen;
using NWin32;
using System.ComponentModel;
@@ -12,6 +13,9 @@ namespace ColorControl.Shared.Native
public static class CCD
{
delegate (T, bool) DisplayConfigModeInfoDelegate(DisplayConfigModeInfo modeInfo);
+ delegate (T, bool) DisplayConfigModeInfosDelegate(DisplayConfigPathInfo pathInfo, DisplayConfigModeInfo sourceMode, DisplayConfigModeInfo targetMode);
+
+ private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
public enum DisplayTopology
{
@@ -21,6 +25,13 @@ namespace ColorControl.Shared.Native
Clone
}
+ public static double GetDpiForSystem()
+ {
+ var dpi = NativeMethods.GetDpiForSystem();
+
+ return dpi / 96.0;
+ }
+
public static DisplayTopology GetDisplayTopology()
{
uint numPathArrayElements;
@@ -64,40 +75,100 @@ namespace ColorControl.Shared.Native
}
}
- public static void GetAllPaths()
+ public static DisplayConfig GetDisplayConfig(string displayName)
{
- uint numPathArrayElements;
- uint numModeInfoArrayElements;
+ var config = new DisplayConfig();
- NativeMethods.GetDisplayConfigBufferSizes(QueryDisplayFlags.AllPaths, out numPathArrayElements, out numModeInfoArrayElements);
+ ExecuteForModeConfigs((pathInfo, sourceMode, targetMode) =>
+ {
+ config.RefreshRate.Numerator = targetMode.targetMode.targetVideoSignalInfo.vSyncFreq.numerator;
+ config.RefreshRate.Denominator = targetMode.targetMode.targetVideoSignalInfo.vSyncFreq.denominator;
+ config.Resolution.ActiveWidth = targetMode.targetMode.targetVideoSignalInfo.activeSize.cx;
+ config.Resolution.ActiveHeight = targetMode.targetMode.targetVideoSignalInfo.activeSize.cy;
- var pathArray = new DisplayConfigPathInfo[numPathArrayElements];
- var modeArray = new DisplayConfigModeInfo[numModeInfoArrayElements];
+ config.Resolution.VirtualWidth = sourceMode.sourceMode.width;
+ config.Resolution.VirtualHeight = sourceMode.sourceMode.height;
- var result = NativeMethods.QueryDisplayConfig(QueryDisplayFlags.AllPaths, ref numPathArrayElements, pathArray, ref numModeInfoArrayElements, modeArray, out Unsafe.NullRef());
+ config.Scaling = pathInfo.targetInfo.scaling;
+ config.Rotation = pathInfo.targetInfo.rotation;
+
+ return (default(DisplayConfigModeInfo), true);
+ }, displayName
+ );
+
+ return config;
}
- public static void SetDisplayConfig()
+ public static bool SetDisplayConfig(string displayName, DisplayConfig displayConfig, bool updateRegistry)
{
- uint numPathArrayElements;
- uint numModeInfoArrayElements;
+ uint pathCount, modeCount;
- NativeMethods.GetDisplayConfigBufferSizes(QueryDisplayFlags.AllPaths, out numPathArrayElements, out numModeInfoArrayElements);
+ var err = NativeMethods.GetDisplayConfigBufferSizes(QueryDisplayFlags.OnlyActivePaths, out pathCount, out modeCount);
+ try
+ {
+ if (err != NativeConstants.ERROR_SUCCESS)
+ {
+ return false;
+ }
+ var pathsArray = new DisplayConfigPathInfo[pathCount];
+ var modesArray = new DisplayConfigModeInfo[modeCount];
- var pathArray = new DisplayConfigPathInfo[numPathArrayElements];
- var modeArray = new DisplayConfigModeInfo[numModeInfoArrayElements];
+ err = NativeMethods.QueryDisplayConfig(QueryDisplayFlags.OnlyActivePaths, ref pathCount, pathsArray, ref modeCount, modesArray, out Unsafe.NullRef());
+ if (err != NativeConstants.ERROR_SUCCESS)
+ {
+ return false;
+ }
- var result = NativeMethods.QueryDisplayConfig(QueryDisplayFlags.AllPaths, ref numPathArrayElements, pathArray, ref numModeInfoArrayElements, modeArray, out Unsafe.NullRef());
+ var resolution = displayConfig.Resolution;
+ var refreshRate = displayConfig.RefreshRate;
- var sourceIndex = pathArray[0].sourceInfo.modeInfoIdx;
- var targetIndex = pathArray[0].targetInfo.modeInfoIdx;
+ foreach (var path in pathsArray)
+ {
+ if (!MatchDisplayNames(path, displayName))
+ {
+ continue;
+ }
- modeArray[targetIndex].targetMode.targetVideoSignalInfo.vSyncFreq = new DisplayConfigRational { denominator = 1000, numerator = 145000 };
+ var sourceIndex = path.sourceInfo.modeInfoIdx;
+ var targetIndex = path.targetInfo.modeInfoIdx;
+ var sourceMode = modesArray[sourceIndex];
+ var targetMode = modesArray[targetIndex];
- result = NativeMethods.SetDisplayConfig(1, pathArray, 2, modeArray, SdcFlags.Apply | SdcFlags.UseSuppliedDisplayConfig | SdcFlags.AllowChanges);
+ targetMode.targetMode.targetVideoSignalInfo.vSyncFreq = new DisplayConfigRational { denominator = refreshRate.Denominator, numerator = refreshRate.Numerator };
+ targetMode.targetMode.targetVideoSignalInfo.activeSize.cx = resolution.ActiveWidth;
+ targetMode.targetMode.targetVideoSignalInfo.activeSize.cy = resolution.ActiveHeight;
+
+ sourceMode.sourceMode.width = resolution.VirtualWidth;
+ sourceMode.sourceMode.height = resolution.VirtualHeight;
+
+ var flags = SdcFlags.Apply | SdcFlags.UseSuppliedDisplayConfig | SdcFlags.AllowChanges;
+
+ if (updateRegistry)
+ {
+ flags |= SdcFlags.SaveToDatabase;
+ }
+
+ var path2 = path;
+ path2.targetInfo.scaling = displayConfig.Scaling == DisplayConfigScaling.Zero ? DisplayConfigScaling.Identity : displayConfig.Scaling;
+ path2.targetInfo.rotation = displayConfig.Rotation == DisplayConfigRotation.Zero ? DisplayConfigRotation.Identity : displayConfig.Rotation;
+ path2.targetInfo.refreshRate = new DisplayConfigRational { numerator = displayConfig.RefreshRate.Numerator, denominator = displayConfig.RefreshRate.Denominator };
+
+ err = NativeMethods.SetDisplayConfig(1, [path2], 2, [targetMode, sourceMode], flags);
+
+ return err == 0;
+ }
+
+ return false;
+ }
+ finally
+ {
+ if (err != 0)
+ {
+ Logger.Warn($"Could not set display config {displayConfig.Resolution}@{displayConfig.RefreshRate} on display {displayName} because: error code {err}");
+ }
+ }
}
-
public static LUID GetAdapterId(string displayName = null)
{
return ExecuteForModeConfig((modeInfo) =>
@@ -437,7 +508,7 @@ namespace ColorControl.Shared.Native
);
}
- private static T ExecuteForModeConfig(DisplayConfigModeInfoDelegate infoDelegate, string displayName = null)
+ private static T ExecuteForModeConfig(DisplayConfigModeInfoDelegate infoDelegate, string displayName = null, QueryDisplayFlags queryDisplayFlags = QueryDisplayFlags.OnlyActivePaths)
{
uint pathCount, modeCount;
@@ -447,7 +518,14 @@ namespace ColorControl.Shared.Native
var pathsArray = new DisplayConfigPathInfo[pathCount];
var modesArray = new DisplayConfigModeInfo[modeCount];
- err = NativeMethods.QueryDisplayConfig(QueryDisplayFlags.DatabaseCurrent, ref pathCount, pathsArray, ref modeCount, modesArray, out _);
+ if (queryDisplayFlags == QueryDisplayFlags.OnlyActivePaths)
+ {
+ err = NativeMethods.QueryDisplayConfig(queryDisplayFlags, ref pathCount, pathsArray, ref modeCount, modesArray, out Unsafe.NullRef());
+ }
+ else
+ {
+ err = NativeMethods.QueryDisplayConfig(queryDisplayFlags, ref pathCount, pathsArray, ref modeCount, modesArray, out _);
+ }
if (err == NativeConstants.ERROR_SUCCESS)
{
foreach (var path in pathsArray)
@@ -480,6 +558,56 @@ namespace ColorControl.Shared.Native
return default;
}
+ private static T ExecuteForModeConfigs(DisplayConfigModeInfosDelegate infoDelegate, string displayName = null, QueryDisplayFlags queryDisplayFlags = QueryDisplayFlags.OnlyActivePaths)
+ {
+ uint pathCount, modeCount;
+
+ var err = NativeMethods.GetDisplayConfigBufferSizes(QueryDisplayFlags.OnlyActivePaths, out pathCount, out modeCount);
+ if (err == NativeConstants.ERROR_SUCCESS)
+ {
+ var pathsArray = new DisplayConfigPathInfo[pathCount];
+ var modesArray = new DisplayConfigModeInfo[modeCount];
+
+ if (queryDisplayFlags == QueryDisplayFlags.OnlyActivePaths)
+ {
+ err = NativeMethods.QueryDisplayConfig(queryDisplayFlags, ref pathCount, pathsArray, ref modeCount, modesArray, out Unsafe.NullRef());
+ }
+ else
+ {
+ err = NativeMethods.QueryDisplayConfig(queryDisplayFlags, ref pathCount, pathsArray, ref modeCount, modesArray, out _);
+ }
+ if (err == NativeConstants.ERROR_SUCCESS)
+ {
+ foreach (var path in pathsArray)
+ {
+ if (!MatchDisplayNames(path, displayName))
+ {
+ continue;
+ }
+
+ var sourceIndex = path.sourceInfo.modeInfoIdx;
+ var targetIndex = path.targetInfo.modeInfoIdx;
+ var sourceMode = modesArray[sourceIndex];
+ var targetMode = modesArray[targetIndex];
+
+ var result = infoDelegate(path, sourceMode, targetMode);
+
+ if (!result.Item2)
+ {
+ return result.Item1;
+ }
+ }
+ }
+ }
+
+ if (err != NativeConstants.ERROR_SUCCESS)
+ {
+ throw new Win32Exception(err);
+ }
+
+ return default;
+ }
+
public static void SetHDRState(bool enabled, string displayName = null)
{
ExecuteForModeConfig((modeInfo) =>
@@ -658,6 +786,8 @@ namespace ColorControl.Shared.Native
private enum DISPLAYCONFIG_DEVICE_INFO_TYPE
{
+ DISPLAYCONFIG_DEVICE_INFO_GET_DPI_SCALE = -3,
+ DISPLAYCONFIG_DEVICE_INFO_SET_DPI_SCALE = -4,
DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME = 1,
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME = 2,
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE = 3,
@@ -766,19 +896,23 @@ namespace ColorControl.Shared.Native
}
[Flags]
- enum DisplayConfigRotation : uint
+ public enum DisplayConfigRotation : uint
{
Zero = 0x0,
+ [Description("Landscape")]
Identity = 1,
+ [Description("Portrait")]
Rotate90 = 2,
+ [Description("Landscape (flipped)")]
Rotate180 = 3,
+ [Description("Portrait (flipped)")]
Rotate270 = 4,
ForceUint32 = 0xFFFFFFFF
}
[Flags]
- enum DisplayConfigPixelFormat : uint
+ public enum DisplayConfigPixelFormat : uint
{
Zero = 0x0,
@@ -791,13 +925,17 @@ namespace ColorControl.Shared.Native
}
[Flags]
- enum DisplayConfigScaling : uint
+ public enum DisplayConfigScaling : uint
{
Zero = 0x0,
+ [Description("Default")]
Identity = 1,
+ [Description("Centered")]
Centered = 2,
+ [Description("Stretched")]
Stretched = 3,
+ [Description("Aspect Ratio Centered Max")]
Aspectratiocenteredmax = 4,
Custom = 5,
Preferred = 128,
@@ -805,14 +943,14 @@ namespace ColorControl.Shared.Native
}
[StructLayout(LayoutKind.Sequential)]
- struct DisplayConfigRational
+ public struct DisplayConfigRational
{
public uint numerator;
public uint denominator;
}
[Flags]
- enum DisplayConfigScanLineOrdering : uint
+ public enum DisplayConfigScanLineOrdering : uint
{
Unspecified = 0,
Progressive = 1,
@@ -831,7 +969,7 @@ namespace ColorControl.Shared.Native
}
[Flags]
- enum DisplayConfigModeInfoType : uint
+ public enum DisplayConfigModeInfoType : uint
{
Zero = 0,
@@ -841,7 +979,7 @@ namespace ColorControl.Shared.Native
}
[StructLayout(LayoutKind.Explicit)]
- struct DisplayConfigModeInfo
+ public struct DisplayConfigModeInfo
{
[FieldOffset(0)]
public DisplayConfigModeInfoType infoType;
@@ -860,14 +998,14 @@ namespace ColorControl.Shared.Native
}
[StructLayout(LayoutKind.Sequential)]
- struct DisplayConfig2DRegion
+ public struct DisplayConfig2DRegion
{
- uint cx;
- uint cy;
+ public uint cx;
+ public uint cy;
}
[Flags]
- enum D3DmdtVideoSignalStandard : uint
+ public enum D3DmdtVideoSignalStandard : uint
{
Uninitialized = 0,
VesaDmt = 1,
@@ -905,7 +1043,7 @@ namespace ColorControl.Shared.Native
}
[StructLayout(LayoutKind.Sequential)]
- struct DisplayConfigVideoSignalInfo
+ public struct DisplayConfigVideoSignalInfo
{
public long pixelRate;
public DisplayConfigRational hSyncFreq;
@@ -918,20 +1056,20 @@ namespace ColorControl.Shared.Native
}
[StructLayout(LayoutKind.Sequential)]
- struct DisplayConfigTargetMode
+ public struct DisplayConfigTargetMode
{
public DisplayConfigVideoSignalInfo targetVideoSignalInfo;
}
[StructLayout(LayoutKind.Sequential)]
- struct PointL
+ public struct PointL
{
public int x;
public int y;
}
[StructLayout(LayoutKind.Sequential)]
- struct DisplayConfigSourceMode
+ public struct DisplayConfigSourceMode
{
public uint width;
public uint height;
@@ -1119,6 +1257,38 @@ namespace ColorControl.Shared.Native
CPST_EXTENDED_DISPLAY_COLOR_MODE
};
+ [StructLayout(LayoutKind.Sequential)]
+ private struct DISPLAYCONFIG_SOURCE_DPI_SCALE_GET
+ {
+ public DISPLAYCONFIG_DEVICE_INFO_HEADER header;
+ /*
+ * @brief min value of DPI scaling is always 100, minScaleRel gives no. of steps down from recommended scaling
+ * eg. if minScaleRel is -3 => 100 is 3 steps down from recommended scaling => recommended scaling is 175%
+ */
+ public int minScaleRel;
+
+ /*
+ * @brief currently applied DPI scaling value wrt the recommended value. eg. if recommended value is 175%,
+ * => if curScaleRel == 0 the current scaling is 175%, if curScaleRel == -1, then current scale is 150%
+ */
+ public int curScaleRel;
+
+ /*
+ * @brief maximum supported DPI scaling wrt recommended value
+ */
+ public int maxScaleRel;
+ };
+
+ private struct DISPLAYCONFIG_SOURCE_DPI_SCALE_SET
+ {
+ public DISPLAYCONFIG_DEVICE_INFO_HEADER header;
+ /*
+ * @brief The value we want to set. The value should be relative to the recommended DPI scaling value of source.
+ * eg. if scaleRel == 1, and recommended value is 175% => we are trying to set 200% scaling for the source
+ */
+ public int scaleRel;
+ };
+
enum DeviceClassFlags : UInt32
{
// from: c:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\um\Icm.h
@@ -1205,6 +1375,11 @@ namespace ColorControl.Shared.Native
public static extern int DisplayConfigGetDeviceInfo(ref DISPLAYCONFIG_GET_DISPLAY_INFO requestPacket);
[DllImport("user32")]
public static extern int DisplayConfigSetDeviceInfo(ref DISPLAYCONFIG_SET_ADVANCED_COLOR_PARAM setPacket);
+
+ [DllImport("user32")]
+ public static extern uint GetDpiForSystem();
+
+
[DllImport("mscms", CharSet = CharSet.Unicode)]
public static extern bool InstallColorProfileW(string machineName, string profilename);
diff --git a/Shared/Native/DXWrapper.cs b/Shared/Native/DXWrapper.cs
index c66f461..55445e1 100644
--- a/Shared/Native/DXWrapper.cs
+++ b/Shared/Native/DXWrapper.cs
@@ -3799,18 +3799,18 @@ public class SafeNativeMethods
public class DXWrapper : DXNativeMethods
{
- private IDXGIFactory2 @interface;
+ private IDXGIFactory1 @interface;
//private readonly IList adapters = new List(1);
public IEnumerable GetModes(string displayName, uint width = 0, uint height = 0)
{
- int hr = CreateDXGIFactory2(
-#if DEBUG
- CREATE_FACTORY.DEBUG,
-#else
- CREATE_FACTORY.NONE,
-#endif
- typeof(IDXGIFactory4).GUID,
+ int hr = CreateDXGIFactory1(
+ //#if DEBUG
+ // CREATE_FACTORY.DEBUG,
+ //#else
+ // CREATE_FACTORY.NONE,
+ //#endif
+ typeof(IDXGIFactory1).GUID,
out var result);
if (Failed(hr))
@@ -3819,15 +3819,15 @@ public class DXWrapper : DXNativeMethods
}
else
{
- @interface = result as IDXGIFactory4;
+ @interface = result as IDXGIFactory1;
}
if (@interface == null)
{
- throw new NotImplementedException("IDXGIFactory4");
+ throw new NotImplementedException("IDXGIFactory2");
}
else
{
- SetPrivateString(@interface, "Factory4");
+ SetPrivateString(@interface, "Factory2");
}
return GetModesFromAdapter(displayName, width, height);
@@ -3865,7 +3865,7 @@ public class DXWrapper : DXNativeMethods
continue;
}
- OUTPUT_DESC outputDesc = new OUTPUT_DESC();
+ var outputDesc = new OUTPUT_DESC();
output1.GetDesc(out outputDesc);
if (outputDesc.DeviceName == displayName)