#region Imports using DPumpHydr.WinFrmUI.RLT.Colors; using DPumpHydr.WinFrmUI.RLT.Util; using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Windows.Forms; #endregion namespace DPumpHydr.WinFrmUI.RLT.Controls { #region HopeButton public class HopeButton : Control { #region Variables private bool enterFlag = false; private bool clickFlag = false; #endregion #region Settings [RefreshProperties(RefreshProperties.Repaint)] public HopeButtonType ButtonType { get; set; } = HopeButtonType.Primary; [RefreshProperties(RefreshProperties.Repaint)] public Color TextColor { get; set; } = Color.White; [RefreshProperties(RefreshProperties.Repaint)] public Color DefaultColor { get; set; } = HopeColors.DefaultColor; [RefreshProperties(RefreshProperties.Repaint)] public Color PrimaryColor { get; set; } = HopeColors.PrimaryColor; [RefreshProperties(RefreshProperties.Repaint)] public Color SuccessColor { get; set; } = HopeColors.Success; [RefreshProperties(RefreshProperties.Repaint)] public Color InfoColor { get; set; } = HopeColors.Info; [RefreshProperties(RefreshProperties.Repaint)] public Color WarningColor { get; set; } = HopeColors.Warning; [RefreshProperties(RefreshProperties.Repaint)] public Color DangerColor { get; set; } = HopeColors.Danger; [RefreshProperties(RefreshProperties.Repaint)] public Color BorderColor { get; set; } = HopeColors.OneLevelBorder; [RefreshProperties(RefreshProperties.Repaint)] public Color HoverTextColor { get; set; } = HopeColors.MainText; #endregion #region Events protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); enterFlag = true; Invalidate(); } protected override void OnMouseLeave(EventArgs e) { base.OnMouseLeave(e); enterFlag = false; Invalidate(); } protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); clickFlag = true; Invalidate(); } protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); clickFlag = false; Invalidate(); } #endregion protected override void OnPaint(PaintEventArgs e) { Graphics graphics = e.Graphics; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; graphics.Clear(Parent.BackColor); if (ButtonType == HopeButtonType.Default) { GraphicsPath BG = RoundRectangle.CreateRoundRect(0.5f, 0.5f, Width - 1, Height - 1, 3); graphics.FillPath(new SolidBrush(enterFlag ? Color.FromArgb(25, DefaultColor) : DefaultColor), BG); graphics.DrawPath(new(clickFlag ? DefaultColor : BorderColor, 1), BG); graphics.DrawString(Text, Font, new SolidBrush(enterFlag ? HoverTextColor : TextColor), new RectangleF(0, 0, Width, Height), HopeStringAlign.Center); } else { GraphicsPath BG = RoundRectangle.CreateRoundRect(0, 0, Width, Height, 3); Color backColor = DefaultColor; switch (ButtonType) { case HopeButtonType.Primary: backColor = PrimaryColor; break; case HopeButtonType.Success: backColor = SuccessColor; break; case HopeButtonType.Info: backColor = InfoColor; break; case HopeButtonType.Warning: backColor = WarningColor; break; case HopeButtonType.Danger: backColor = DangerColor; break; default: break; } SolidBrush brush = new(enterFlag ? (clickFlag ? backColor : Color.FromArgb(225, backColor)) : backColor); graphics.FillPath(brush, BG); if (!Enabled) { graphics.FillPath(new SolidBrush(Color.FromArgb(125, BorderColor)), BG); } graphics.DrawString(Text, Font, new SolidBrush(enterFlag ? HoverTextColor : TextColor), new RectangleF(0, 0, Width, Height), HopeStringAlign.Center); } } public HopeButton() { SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer, true); DoubleBuffered = true; Font = new("Segoe UI", 12); Size = new(120, 40); Cursor = Cursors.Hand; } } #endregion }