#region Imports using DPumpHydr.WinFrmUI.RLT.Util; using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; #endregion namespace DPumpHydr.WinFrmUI.RLT.Controls { #region SkyButton public class SkyButton : Control { #region " Control Help - MouseState & Flicker Control" private MouseStateSky State = MouseStateSky.None; protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); State = MouseStateSky.Over; Invalidate(); } protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); State = MouseStateSky.Down; Invalidate(); } protected override void OnMouseLeave(EventArgs e) { base.OnMouseLeave(e); State = MouseStateSky.None; Invalidate(); } protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); State = MouseStateSky.Over; Invalidate(); } protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); Invalidate(); } #endregion #region Variables private SmoothingMode _SmoothingType = SmoothingMode.HighQuality; #endregion #region Settings public SmoothingMode SmoothingType { get => _SmoothingType; set { _SmoothingType = value; Invalidate(); } } public Color NormalBGColorA { get; set; } = Color.FromArgb(245, 245, 245); public Color NormalBGColorB { get; set; } = Color.FromArgb(230, 230, 230); public Color HoverBGColorA { get; set; } = Color.FromArgb(70, 153, 205); public Color HoverBGColorB { get; set; } = Color.FromArgb(53, 124, 170); public Color DownBGColorA { get; set; } = Color.FromArgb(70, 153, 205); public Color DownBGColorB { get; set; } = Color.FromArgb(53, 124, 170); public Color NormalForeColor { get; set; } = Color.FromArgb(27, 94, 137); public Color HoverForeColor { get; set; } = Color.White; public Color DownForeColor { get; set; } = Color.White; public Color NormalShadowForeColor { get; set; } = Color.FromArgb(200, Color.White); public Color HoverShadowForeColor { get; set; } = Color.FromArgb(200, Color.Black); public Color DownShadowForeColor { get; set; } = Color.FromArgb(200, Color.Black); public Color NormalBorderColorA { get; set; } = Color.FromArgb(252, 252, 252); public Color NormalBorderColorB { get; set; } = Color.FromArgb(249, 249, 249); public Color NormalBorderColorC { get; set; } = Color.FromArgb(189, 189, 189); public Color NormalBorderColorD { get; set; } = Color.FromArgb(200, 168, 168, 168); public Color HoverBorderColorA { get; set; } = Color.FromArgb(88, 168, 221); public Color HoverBorderColorB { get; set; } = Color.FromArgb(76, 149, 194); public Color HoverBorderColorC { get; set; } = Color.FromArgb(38, 93, 131); public Color HoverBorderColorD { get; set; } = Color.FromArgb(200, 25, 73, 109); public Color DownBorderColorA { get; set; } = Color.FromArgb(88, 168, 221); public Color DownBorderColorB { get; set; } = Color.FromArgb(76, 149, 194); public Color DownBorderColorC { get; set; } = Color.FromArgb(38, 93, 131); public Color DownBorderColorD { get; set; } = Color.FromArgb(200, 25, 73, 109); #endregion public SkyButton() : base() { SetStyle(ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true); BackColor = Color.Transparent; ForeColor = Color.FromArgb(27, 94, 137); DoubleBuffered = true; Size = new(75, 23); Font = new("Verdana", 6.75f, FontStyle.Bold); Cursor = Cursors.Hand; } protected override void OnPaint(PaintEventArgs e) { Bitmap B = new(Width, Height); Graphics G = Graphics.FromImage(B); //object ClientRectangle = new Rectangle(0, 0, Width - 1, Height - 1); base.OnPaint(e); G.SmoothingMode = SmoothingType; G.Clear(BackColor); switch (State) { case MouseStateSky.None: //Mouse None LinearGradientBrush bodyGrad = new(new Rectangle(0, 0, Width - 1, Height - 2), NormalBGColorA, NormalBGColorB, 90); G.FillRectangle(bodyGrad, bodyGrad.Rectangle); LinearGradientBrush bodyInBorder = new(new Rectangle(1, 1, Width - 3, Height - 4), NormalBorderColorA, NormalBorderColorB, 90); G.DrawRectangle(new(bodyInBorder), new Rectangle(1, 1, Width - 3, Height - 4)); G.DrawRectangle(new(NormalBorderColorC), new Rectangle(0, 0, Width - 1, Height - 2)); G.DrawLine(new(NormalBorderColorD), new Point(1, Height - 1), new Point(Width - 2, Height - 1)); ForeColor = NormalForeColor; G.DrawString(Text, Font, new SolidBrush(NormalShadowForeColor), new Rectangle(-1, 0, Width - 1, Height - 1), new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center }); break; case MouseStateSky.Over: //Mouse Hover LinearGradientBrush bodyGradOver = new(new Rectangle(0, 0, Width - 1, Height - 2), HoverBGColorA, HoverBGColorB, 90); G.FillRectangle(bodyGradOver, bodyGradOver.Rectangle); LinearGradientBrush bodyInBorderOver = new(new Rectangle(1, 1, Width - 3, Height - 4), HoverBorderColorA, HoverBorderColorB, 90); G.DrawRectangle(new(bodyInBorderOver), new Rectangle(1, 1, Width - 3, Height - 4)); G.DrawRectangle(new(HoverBorderColorC), new Rectangle(0, 0, Width - 1, Height - 2)); G.DrawLine(new(HoverBorderColorD), new Point(1, Height - 1), new Point(Width - 2, Height - 1)); ForeColor = HoverForeColor; G.DrawString(Text, Font, new SolidBrush(HoverShadowForeColor), new Rectangle(-1, -2, Width - 1, Height - 1), new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center }); break; case MouseStateSky.Down: //Mouse Down LinearGradientBrush bodyGradDown = new(new Rectangle(0, 0, Width - 1, Height - 2), DownBGColorA, DownBGColorB, 270); G.FillRectangle(bodyGradDown, bodyGradDown.Rectangle); LinearGradientBrush bodyInBorderDown = new(new Rectangle(1, 1, Width - 3, Height - 4), DownBorderColorA, DownBorderColorB, 270); G.DrawRectangle(new(bodyInBorderDown), new Rectangle(1, 1, Width - 3, Height - 4)); G.DrawRectangle(new(DownBorderColorC), new Rectangle(0, 0, Width - 1, Height - 2)); G.DrawLine(new(DownBorderColorD), new Point(1, Height - 1), new Point(Width - 2, Height - 1)); ForeColor = DownForeColor; G.DrawString(Text, Font, new SolidBrush(DownShadowForeColor), new Rectangle(-1, -2, Width - 1, Height - 1), new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center }); break; } G.DrawString(Text, Font, new SolidBrush(ForeColor), new Rectangle(-1, -1, Width - 1, Height - 1), new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center }); e.Graphics.DrawImage(B, 0, 0); G.Dispose(); B.Dispose(); } } #endregion }