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.
CleanFlashInstaller/CleanFlashCommon/GradientButton.cs

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);
}
}
}
}