forked from ReClassNET/ReClass.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTheme.cs
More file actions
153 lines (139 loc) · 4.42 KB
/
Theme.cs
File metadata and controls
153 lines (139 loc) · 4.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
namespace ReClassNET.UI
{
public static class Theme
{
public static readonly Color Background = Color.FromArgb(30, 30, 30);
public static readonly Color Foreground = Color.FromArgb(220, 220, 220);
public static readonly Color ControlBackground = Color.FromArgb(37, 37, 38);
public static readonly Color ControlBorder = Color.FromArgb(62, 62, 64);
public static readonly Color MenuHoverBackground = Color.FromArgb(62, 62, 64);
public static readonly Color MenuPressedBackground = Color.FromArgb(51, 51, 55);
public static void ApplyDarkTheme(Control control)
{
if (control == null)
{
return;
}
ApplyColors(control);
foreach (Control child in control.Controls)
{
ApplyDarkTheme(child);
}
}
public static void ApplyDarkThemeToContextMenus(Form form)
{
if (form == null)
{
return;
}
var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
foreach (var field in form.GetType().GetFields(flags))
{
if (field.GetValue(form) is ToolStrip strip)
{
ApplyToolStrip(strip);
}
}
}
private static void ApplyColors(Control control)
{
switch (control)
{
case Form form:
form.BackColor = Background;
form.ForeColor = Foreground;
break;
case TabPage _:
case Panel _:
case GroupBox _:
case SplitContainer _:
control.BackColor = Background;
control.ForeColor = Foreground;
break;
case TextBoxBase _:
control.BackColor = ControlBackground;
control.ForeColor = Foreground;
break;
case ButtonBase _:
control.BackColor = ControlBackground;
control.ForeColor = Foreground;
break;
case ListView _:
case TreeView _:
control.BackColor = ControlBackground;
control.ForeColor = Foreground;
break;
case DataGridView grid:
grid.BackgroundColor = Background;
grid.ForeColor = Foreground;
grid.EnableHeadersVisualStyles = false;
grid.ColumnHeadersDefaultCellStyle.BackColor = ControlBackground;
grid.ColumnHeadersDefaultCellStyle.ForeColor = Foreground;
grid.DefaultCellStyle.BackColor = ControlBackground;
grid.DefaultCellStyle.ForeColor = Foreground;
grid.DefaultCellStyle.SelectionBackColor = Color.FromArgb(51, 51, 55);
grid.DefaultCellStyle.SelectionForeColor = Foreground;
grid.GridColor = ControlBorder;
break;
case ToolStrip strip:
ApplyToolStrip(strip);
break;
default:
control.BackColor = Background;
control.ForeColor = Foreground;
break;
}
}
private static void ApplyToolStrip(ToolStrip strip)
{
strip.BackColor = Background;
strip.ForeColor = Foreground;
strip.Renderer = new DarkToolStripRenderer();
if (strip is ToolStripDropDown dropDown)
{
dropDown.BackColor = Background;
dropDown.ForeColor = Foreground;
}
foreach (ToolStripItem item in strip.Items)
{
item.BackColor = Background;
item.ForeColor = Foreground;
if (item is ToolStripDropDownItem dropDownItem)
{
ApplyToolStrip(dropDownItem.DropDown);
}
}
}
}
internal sealed class DarkToolStripRenderer : ToolStripProfessionalRenderer
{
public DarkToolStripRenderer()
: base(new DarkColorTable())
{
}
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
e.TextColor = Theme.Foreground;
base.OnRenderItemText(e);
}
}
internal sealed class DarkColorTable : ProfessionalColorTable
{
public override Color MenuBorder => Theme.ControlBorder;
public override Color ToolStripBorder => Theme.ControlBorder;
public override Color MenuItemBorder => Theme.ControlBorder;
public override Color MenuItemSelected => Theme.MenuHoverBackground;
public override Color MenuItemSelectedGradientBegin => Theme.MenuHoverBackground;
public override Color MenuItemSelectedGradientEnd => Theme.MenuHoverBackground;
public override Color MenuItemPressedGradientBegin => Theme.MenuPressedBackground;
public override Color MenuItemPressedGradientMiddle => Theme.MenuPressedBackground;
public override Color MenuItemPressedGradientEnd => Theme.MenuPressedBackground;
public override Color ToolStripDropDownBackground => Theme.Background;
public override Color ImageMarginGradientBegin => Theme.Background;
public override Color ImageMarginGradientMiddle => Theme.Background;
public override Color ImageMarginGradientEnd => Theme.Background;
}
}