Fix dark mode: theme the plain TextBox/CheckBox controls UIFramework can't skin

This commit is contained in:
Claude Code committed 2026-07-22 10:56:35 +02:00
1 parent c76d834ace
commit 53b26f0f98
1 file changed
+30 -1
+30 -1
View File
@@ -47,10 +47,15 @@ namespace OrbisForge.Gui
_darkModeCheck.Text = "Dark mode";
_darkModeCheck.AutoSize = true;
_darkModeCheck.FlatStyle = FlatStyle.Flat;
_darkModeCheck.Anchor = AnchorStyles.Top | AnchorStyles.Right;
_darkModeCheck.Location = new Point(ClientSize.Width - 110, y);
_darkModeCheck.Checked = GuiSettings.LoadDarkMode();
_darkModeCheck.CheckedChanged += (s, e) => ApplyTheme(_darkModeCheck.Checked, save: true);
_darkModeCheck.CheckedChanged += (s, e) =>
{
ApplyTheme(_darkModeCheck.Checked, save: true);
RefreshPlainControlColors();
};
root.Controls.Add(_darkModeCheck);
ApplyTheme(_darkModeCheck.Checked, save: false);
@@ -84,11 +89,13 @@ namespace OrbisForge.Gui
_pkgCheck.Text = "Also generate full .pkg installer (EXE only)";
_pkgCheck.Location = new Point(left, y);
_pkgCheck.AutoSize = true;
_pkgCheck.FlatStyle = FlatStyle.Flat;
y += 28;
_deployCheck.Text = "Deploy to PS4 via FTP after build";
_deployCheck.Location = new Point(left, y);
_deployCheck.AutoSize = true;
_deployCheck.FlatStyle = FlatStyle.Flat;
_deployCheck.CheckedChanged += (s, e) => UpdateDeployFieldsEnabled();
y += 24;
@@ -149,6 +156,7 @@ namespace OrbisForge.Gui
UpdatePkgCheckEnabled();
UpdateDeployFieldsEnabled();
RefreshPlainControlColors();
Shown += (s, e) => DetectEnvironment();
}
@@ -158,6 +166,27 @@ namespace OrbisForge.Gui
if (save) GuiSettings.SaveDarkMode(dark);
}
// _statusBox and the CheckBoxes are plain WinForms controls -- UIFramework has no
// skinned equivalents for them (no multiline/scrollable SkinTextBox variant, no
// SkinCheckBox at all) -- so they don't auto-repaint on a skin change like every
// other control here does. Left at their WinForms defaults, they stay bright white
// regardless of the active skin, which looks broken next to a dark-themed form.
private void RefreshPlainControlColors()
{
var textAppearance = SkinManager.Current.GetAppearance(ElementKeys.TextBox, ElementState.Normal);
_statusBox.BackColor = textAppearance.Background;
_statusBox.ForeColor = textAppearance.ForeColor;
var panelAppearance = SkinManager.Current.GetAppearance(ElementKeys.Panel, ElementState.Normal);
var labelAppearance = SkinManager.Current.GetAppearance(ElementKeys.Label, ElementState.Normal);
foreach (var checkBox in new[] { _pkgCheck, _deployCheck, _darkModeCheck })
{
checkBox.UseVisualStyleBackColor = false;
checkBox.BackColor = panelAppearance.Background;
checkBox.ForeColor = labelAppearance.ForeColor;
}
}
private void UpdatePkgCheckEnabled()
{
bool isExe = SelectedType() == OrbisTargetType.Exe;