Skip to content
This repository has been archived by the owner on Jan 13, 2024. It is now read-only.

Commit

Permalink
Fix csproj, improve dark mode toggling
Browse files Browse the repository at this point in the history
1. Add automatic handling of GroupBoxes, DataGridViews
2. Fix problems with .csproj caused by rebase
  • Loading branch information
molsonkiko committed Jun 20, 2023
1 parent 39bd4b8 commit 16d3516
Show file tree
Hide file tree
Showing 5 changed files with 183 additions and 50 deletions.
92 changes: 64 additions & 28 deletions Demo Plugin/NppManagedPluginDemo/Demo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -205,44 +205,56 @@ static internal void PluginCleanUp()
/// </summary>
/// <param name="form">a Windows Form</param>
/// <param name="isDark">is Notepad++ dark mode on?</param>
static internal void ToggleDarkMode(Form form, bool isDark)
static internal void ToggleDarkMode(Control ctrl, bool isDark)
{
if (form == null)
if (ctrl == null)
return;
IntPtr themePtr = notepad.GetDarkModeColors();
if (isDark && themePtr == IntPtr.Zero)
return;
var theme = (DarkModeColors)Marshal.PtrToStructure(themePtr, typeof(DarkModeColors));
foreach (Form childForm in form.OwnedForms)
if (ctrl is Form form)
{
// allow possibility that some forms will have other child forms
// JsonTools does this in a couple of places
ToggleDarkMode(childForm, isDark);
foreach (Form childForm in form.OwnedForms)
{
// allow possibility that some forms will have other child forms
// JsonTools does this in a couple of places
ToggleDarkMode(childForm, isDark);
}
}
if (isDark)
{
form.BackColor = NppDarkMode.BGRToColor(theme.Background);
form.ForeColor = NppDarkMode.BGRToColor(theme.Text);
ctrl.BackColor = NppDarkMode.BGRToColor(theme.Background);
ctrl.ForeColor = NppDarkMode.BGRToColor(theme.Text);
}
else
{
form.ResetForeColor();
form.ResetBackColor();
ctrl.ResetForeColor();
ctrl.ResetBackColor();
}
foreach (Control ctrl in form.Controls)
foreach (Control child in ctrl.Controls)
{
if (isDark)
{
// this doesn't actually make disabled controls have different colors
// windows forms don't make it easy for the user to choose the
// color of a disabled control. See https://stackoverflow.com/questions/136129/windows-forms-how-do-you-change-the-font-color-for-a-disabled-label
var textTheme = ctrl.Enabled ? theme.Text : theme.DisabledText;
if (ctrl is Button btn)
var textTheme = child.Enabled ? theme.Text : theme.DisabledText;
Color foreColor = NppDarkMode.BGRToColor(textTheme);
Color backColor = NppDarkMode.BGRToColor(theme.PureBackground);
Color InBetween = Color.FromArgb(
foreColor.R / 4 + 3 * backColor.R / 4,
foreColor.G / 4 + 3 * backColor.G / 4,
foreColor.B / 4 + 3 * backColor.B / 4
);
if (child is GroupBox)
ToggleDarkMode(child, isDark);
else if (child is Button btn)
{
btn.BackColor = NppDarkMode.BGRToColor(theme.SofterBackground);
btn.ForeColor = NppDarkMode.BGRToColor(textTheme);
btn.ForeColor = foreColor;
}
else if (ctrl is LinkLabel llbl)
else if (child is LinkLabel llbl)
{
llbl.BackColor = NppDarkMode.BGRToColor(theme.ErrorBackground);
llbl.ForeColor = NppDarkMode.BGRToColor(theme.DarkerText);
Expand All @@ -251,36 +263,60 @@ static internal void ToggleDarkMode(Form form, bool isDark)
llbl.VisitedLinkColor = NppDarkMode.BGRToColor(theme.DarkerText);
}
// other common text-based controls
else if (ctrl is TextBox
|| ctrl is Label
|| ctrl is ListBox
|| ctrl is ComboBox)
else if (child is TextBox
|| child is Label
|| child is ListBox
|| child is ComboBox)
{
ctrl.BackColor = NppDarkMode.BGRToColor(theme.PureBackground);
ctrl.ForeColor = NppDarkMode.BGRToColor(textTheme);
child.BackColor = backColor;
child.ForeColor = foreColor;
}
else if (ctrl is TreeView tv)
else if (child is TreeView tv)
{
tv.BackColor = NppDarkMode.BGRToColor(theme.HotBackground);
tv.ForeColor = NppDarkMode.BGRToColor(textTheme);
tv.ForeColor = foreColor;
}
else if (child is DataGridView dgv)
{
dgv.EnableHeadersVisualStyles = false;
dgv.BackgroundColor = InBetween;
dgv.ForeColor = foreColor;
dgv.GridColor = foreColor;
dgv.ColumnHeadersDefaultCellStyle.ForeColor = foreColor;
dgv.ColumnHeadersDefaultCellStyle.BackColor = backColor;
dgv.RowHeadersDefaultCellStyle.ForeColor = foreColor;
dgv.RowHeadersDefaultCellStyle.BackColor = backColor;
dgv.RowsDefaultCellStyle.ForeColor = foreColor;
dgv.RowsDefaultCellStyle.BackColor = backColor;
}
else
{
// other controls I haven't thought of yet
ctrl.BackColor = NppDarkMode.BGRToColor(theme.SofterBackground);
ctrl.ForeColor = NppDarkMode.BGRToColor(textTheme);
child.BackColor = NppDarkMode.BGRToColor(theme.SofterBackground);
child.ForeColor = foreColor;
}
}
else // normal light mode
{
ctrl.ResetForeColor();
ctrl.ResetBackColor();
if (ctrl is LinkLabel llbl)
child.ResetForeColor();
child.ResetBackColor();
if (child is GroupBox)
ToggleDarkMode(child, isDark);
if (child is LinkLabel llbl)
{
llbl.LinkColor = Color.Blue;
llbl.ActiveLinkColor = Color.Red;
llbl.VisitedLinkColor = Color.Purple;
}
else if (child is DataGridView dgv)
{
dgv.EnableHeadersVisualStyles = true;
dgv.BackgroundColor = SystemColors.ControlDark;
dgv.ForeColor = SystemColors.ControlText;
dgv.GridColor = SystemColors.ControlLight;
dgv.RowsDefaultCellStyle.ForeColor = SystemColors.ControlText;
dgv.RowsDefaultCellStyle.BackColor = SystemColors.Window;
}
}
}
Marshal.FreeHGlobal(themePtr);
Expand Down
101 changes: 81 additions & 20 deletions Demo Plugin/NppManagedPluginDemo/Forms/DarkModeTestForm.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion Demo Plugin/NppManagedPluginDemo/Forms/DarkModeTestForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
Expand All @@ -18,6 +17,12 @@ public DarkModeTestForm()
var notepad = new NotepadPPGateway();
Main.ToggleDarkMode(this, notepad.IsDarkModeEnabled());
comboBox1.SelectedIndex = 0;
DataGridViewRow row = new DataGridViewRow();
row.CreateCells(dataGridView1);
row.Cells[0].Value = "Value1";
row.Cells[1].Value = "Should look pretty";
row.Cells[2].Value = "Value3";
dataGridView1.Rows.Add(row);
}

private void LinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
Expand Down
20 changes: 19 additions & 1 deletion Demo Plugin/NppManagedPluginDemo/Forms/DarkModeTestForm.resx
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw
CgAAAk1TRnQBSQFMAgEBAwEAAQgBAAEIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CgAAAk1TRnQBSQFMAgEBAwEAARABAAEQAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
Expand Down Expand Up @@ -174,4 +174,22 @@
AgABgAEBAccB8wHHAfMCAAHgAQcB4AEHAeABBwIAAfABDwH4AR8B+AEfAgAL
</value>
</data>
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>
Loading

0 comments on commit 16d3516

Please sign in to comment.