forked from Itroublve/DiscordJoiner
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RoundBtn.cs
131 lines (121 loc) · 3.53 KB
/
RoundBtn.cs
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
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
public class RoundBtn : Button
{
public RoundBtn()
{
DoubleBuffered = true;
MouseEnter += delegate (object sender, EventArgs e)
{
_isHovering = true;
Invalidate();
};
MouseLeave += delegate (object sender, EventArgs e)
{
_isHovering = false;
Invalidate();
};
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics graphics = e.Graphics;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
Brush brush = new SolidBrush(_isHovering ? _onHoverBorderColor : _borderColor);
graphics.FillEllipse(brush, 0, 0, Height, Height);
graphics.FillEllipse(brush, Width - Height, 0, Height, Height);
graphics.FillRectangle(brush, Height / 2, 0, Width - Height, Height);
brush.Dispose();
brush = new SolidBrush(_isHovering ? _onHoverButtonColor : _buttonColor);
graphics.FillEllipse(brush, _borderThicknessByTwo, _borderThicknessByTwo, Height - _borderThickness, Height - _borderThickness);
graphics.FillEllipse(brush, Width - Height + _borderThicknessByTwo, _borderThicknessByTwo, Height - _borderThickness, Height - _borderThickness);
graphics.FillRectangle(brush, Height / 2 + _borderThicknessByTwo, _borderThicknessByTwo, Width - Height - _borderThickness, Height - _borderThickness);
brush.Dispose();
brush = new SolidBrush(_isHovering ? _onHoverTextColor : _textColor);
SizeF sizeF = graphics.MeasureString(Text, Font);
graphics.DrawString(Text, Font, brush, ((float)Width - sizeF.Width) / 2f, ((float)Height - sizeF.Height) / 2f);
}
public Color BorderColor
{
get
{
return _borderColor;
}
set
{
_borderColor = value;
base.Invalidate();
}
}
public Color OnHoverBorderColor
{
get
{
return _onHoverBorderColor;
}
set
{
_onHoverBorderColor = value;
base.Invalidate();
}
}
public Color ButtonColor
{
get
{
return _buttonColor;
}
set
{
_buttonColor = value;
base.Invalidate();
}
}
public Color OnHoverButtonColor
{
get
{
return _onHoverButtonColor;
}
set
{
_onHoverButtonColor = value;
Invalidate();
}
}
public Color TextColor
{
get
{
return _textColor;
}
set
{
_textColor = value;
base.Invalidate();
}
}
public Color OnHoverTextColor
{
get
{
return _onHoverTextColor;
}
set
{
_onHoverTextColor = value;
base.Invalidate();
}
}
private Color _borderColor = Color.Silver;
private Color _onHoverBorderColor = Color.Gray;
private Color _buttonColor = Color.Red;
private Color _onHoverButtonColor = Color.Yellow;
private Color _textColor = Color.White;
private Color _onHoverTextColor = Color.Gray;
private bool _isHovering;
private int _borderThickness = 6;
private int _borderThicknessByTwo = 3;
}