forked from dmnd/Caffeinated
-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathModernMenuRenderer.cs
More file actions
69 lines (54 loc) · 2.18 KB
/
ModernMenuRenderer.cs
File metadata and controls
69 lines (54 loc) · 2.18 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
using System.Drawing;
using System.Windows.Forms;
namespace Caffeinated;
public class ModernMenuRenderer : ToolStripProfessionalRenderer {
private readonly bool isLightTheme;
public ModernMenuRenderer(bool isLightTheme) : base(new ModernColorTable(isLightTheme)) {
this.isLightTheme = isLightTheme;
RoundedEdges = false;
}
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) {
if (e.Item.Selected) {
Rectangle rect = new(Point.Empty, e.Item.Size);
Color hoverColor = isLightTheme
? Color.FromArgb(240, 240, 240)
: Color.FromArgb(50, 50, 50);
using SolidBrush brush = new(hoverColor);
e.Graphics.FillRectangle(brush, rect);
Color borderColor = isLightTheme
? Color.FromArgb(0, 120, 215)
: Color.FromArgb(0, 120, 215);
using Pen pen = new(borderColor, 1);
Rectangle borderRect = rect;
borderRect.Width -= 1;
borderRect.Height -= 1;
e.Graphics.DrawRectangle(pen, borderRect);
}
else {
base.OnRenderMenuItemBackground(e);
}
}
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) {
if (e.Item is ToolStripSeparator) {
base.OnRenderItemText(e);
return;
}
e.TextColor = isLightTheme
? Color.FromArgb(32, 32, 32)
: Color.FromArgb(240, 240, 240);
e.TextFont = new Font("Segoe UI", 10.5f, FontStyle.Regular);
Rectangle adjustedRect = e.TextRectangle;
adjustedRect.Y += 4;
adjustedRect.Height += 4;
e.TextRectangle = adjustedRect;
base.OnRenderItemText(e);
}
protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) {
Rectangle rect = new(0, e.Item.Height / 2, e.Item.Width, 1);
Color separatorColor = isLightTheme
? Color.FromArgb(220, 220, 220)
: Color.FromArgb(60, 60, 60);
using Pen pen = new(separatorColor);
e.Graphics.DrawLine(pen, rect.Left + 30, rect.Top, rect.Right - 5, rect.Top);
}
}