You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.3 KiB
C#
92 lines
3.3 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Windows.Forms;
|
|
|
|
namespace CleanFlashCommon {
|
|
public class GradientButton : Button {
|
|
public Color Color1 { get; set; }
|
|
public Color Color2 { get; set; }
|
|
public double HoverAlpha { get; set; }
|
|
public double DisableAlpha { get; set; }
|
|
|
|
private bool Hovered = false;
|
|
|
|
public GradientButton() {
|
|
Color1 = Color.Black;
|
|
Color2 = Color.White;
|
|
HoverAlpha = 0.875;
|
|
DisableAlpha = 0.644;
|
|
}
|
|
|
|
protected override void OnMouseDown(MouseEventArgs mevent) {
|
|
Hovered = false;
|
|
base.OnMouseDown(mevent);
|
|
Refresh();
|
|
}
|
|
|
|
protected override void OnMouseUp(MouseEventArgs mevent) {
|
|
Hovered = true;
|
|
base.OnMouseUp(mevent);
|
|
Refresh();
|
|
}
|
|
|
|
protected override void OnMouseEnter(EventArgs e) {
|
|
Hovered = true;
|
|
base.OnMouseEnter(e);
|
|
Refresh();
|
|
}
|
|
|
|
protected override void OnMouseLeave(EventArgs e) {
|
|
Hovered = false;
|
|
base.OnMouseLeave(e);
|
|
Refresh();
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs e) {
|
|
Color c1 = Color1;
|
|
Color c2 = Color2;
|
|
Color c3 = BackColor;
|
|
Color c4 = ForeColor;
|
|
|
|
if (!Enabled) {
|
|
c1 = Color.FromArgb(255, (int)(c1.R * DisableAlpha), (int)(c1.G * DisableAlpha), (int)(c1.B * DisableAlpha));
|
|
c2 = Color.FromArgb(255, (int)(c2.R * DisableAlpha), (int)(c2.G * DisableAlpha), (int)(c2.B * DisableAlpha));
|
|
c3 = Color.FromArgb(255, (int)(c3.R * DisableAlpha), (int)(c3.G * DisableAlpha), (int)(c3.B * DisableAlpha));
|
|
c4 = Color.FromArgb(255, (int)(c4.R * DisableAlpha), (int)(c4.G * DisableAlpha), (int)(c4.B * DisableAlpha));
|
|
} else if (!Hovered) {
|
|
c1 = Color.FromArgb(255, (int)(c1.R * HoverAlpha), (int)(c1.G * HoverAlpha), (int)(c1.B * HoverAlpha));
|
|
c2 = Color.FromArgb(255, (int)(c2.R * HoverAlpha), (int)(c2.G * HoverAlpha), (int)(c2.B * HoverAlpha));
|
|
}
|
|
|
|
SizeF size = e.Graphics.MeasureString(Text, Font);
|
|
|
|
using (Brush brush = new LinearGradientBrush(ClientRectangle, c1, c2, 90.0F)) {
|
|
e.Graphics.FillRectangle(brush, ClientRectangle);
|
|
}
|
|
|
|
int thickness = 1;
|
|
int halfThickness = thickness / 2;
|
|
|
|
using (Pen pen = new Pen(c3, thickness)) {
|
|
e.Graphics.DrawRectangle(
|
|
pen, new Rectangle(
|
|
halfThickness, halfThickness,
|
|
ClientRectangle.Width - thickness, ClientRectangle.Height - thickness
|
|
)
|
|
);
|
|
}
|
|
|
|
Point point = new Point(
|
|
(ClientRectangle.Width - (int)size.Width) / 2,
|
|
(ClientRectangle.Height - (int)size.Height) / 2
|
|
);
|
|
|
|
using (Brush brush = new SolidBrush(c4)) {
|
|
e.Graphics.DrawString(Text, Font, new SolidBrush(c3), new Point(point.X + 1, point.Y + 1));
|
|
e.Graphics.DrawString(Text, Font, brush, point);
|
|
}
|
|
}
|
|
}
|
|
}
|