Skip to content

Commit

Permalink
Dark/Light Theme Feature
Browse files Browse the repository at this point in the history
- new menu tab "Settings"
Issue:
- Highlight color of current step value makes reading in dark theme difficult without highlighting text with mouse.
  • Loading branch information
ArsonArrow committed Nov 30, 2024
1 parent 39df520 commit ef580c9
Showing 1 changed file with 50 additions and 1 deletion.
51 changes: 50 additions & 1 deletion SIC Simulator/Form1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ public Form1() {
this.txtSICInput.ContextMenuStrip = cms;
//System.Threading.Thread St = new System.Threading.Thread( this.RefreshCPUDisplays);

//Settings tab with switch between dark and light theme
var toggleThemeMenuItem = new ToolStripMenuItem("Toggle Theme");
toggleThemeMenuItem.Click += (sender, e) => ToggleTheme();

var settingsMenu = new ToolStripMenuItem("Settings");
settingsMenu.DropDownItems.Add(toggleThemeMenuItem);

this.MainMenuStrip.Items.Add(settingsMenu);
}

private void tsmAbout_About_DropDownItemClicked(object sender, EventArgs e) {
Expand Down Expand Up @@ -1181,7 +1189,7 @@ await Task.Run(() => {
if (highlighStart1 != -1) {
this.txtSICInput.SelectionStart = highlighStart1;
this.txtSICInput.SelectionLength = highlightLength1;
this.txtSICInput.SelectionBackColor = Color.Yellow;
this.txtSICInput.SelectionBackColor = Color.Green;
}

if (highlighStart2 != -1) {
Expand Down Expand Up @@ -1338,5 +1346,46 @@ private void saveNewSICSourceFileToolStripMenuItem_Click(object sender, EventArg

}
}

private Color lightBackColor = Color.White;
private Color lightForeColor = Color.Black;
private Color darkBackColor = Color.Black;
private Color darkForeColor = Color.White;
private bool isDarkMode = false;

private void ToggleTheme()
{
isDarkMode = !isDarkMode;

Color backColor = isDarkMode ? darkBackColor : lightBackColor;
Color foreColor = isDarkMode ? darkForeColor : lightForeColor;

this.BackColor = backColor;
this.ForeColor = foreColor;

foreach (Control control in this.Controls)
{
ApplyThemeToControl(control, backColor, foreColor);
}
}

private void ApplyThemeToControl(Control control, Color backColor, Color foreColor)
{
control.BackColor = backColor;
control.ForeColor = foreColor;

if (control is ToolStrip toolStrip)
{
toolStrip.BackColor = backColor;
toolStrip.ForeColor = foreColor;
}

foreach (Control child in control.Controls)
{
ApplyThemeToControl(child, backColor, foreColor);
}
}


}
}

0 comments on commit ef580c9

Please sign in to comment.