#region Imports
|
|
using System;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Drawing.Drawing2D;
|
using System.Windows.Forms;
|
|
#endregion
|
|
namespace DPumpHydr.WinFrmUI.RLT.Controls
|
{
|
#region DungeonCheckBox
|
|
[DefaultEvent("CheckedChanged")]
|
public class DungeonCheckBox : Control
|
{
|
#region Variables
|
|
private GraphicsPath Shape;
|
private LinearGradientBrush GB;
|
private Rectangle R1;
|
private Rectangle R2;
|
private bool _Checked;
|
|
public event CheckedChangedEventHandler CheckedChanged;
|
public delegate void CheckedChangedEventHandler(object sender);
|
|
#endregion
|
|
#region Properties
|
|
public bool Checked
|
{
|
get => _Checked;
|
set
|
{
|
_Checked = value;
|
CheckedChanged?.Invoke(this);
|
Invalidate();
|
}
|
}
|
|
public Color CheckedColor { get; set; } = Color.FromArgb(255, 255, 255);
|
|
public Color CheckedBackColorA { get; set; } = Color.FromArgb(213, 85, 32);
|
|
public Color CheckedBackColorB { get; set; } = Color.FromArgb(224, 123, 82);
|
|
public Color CheckedBorderColor { get; set; } = Color.FromArgb(182, 88, 55);
|
|
#endregion
|
|
public DungeonCheckBox()
|
{
|
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint, true);
|
|
BackColor = Color.Transparent;
|
DoubleBuffered = true;
|
// Reduce control flicker
|
Font = new("Segoe UI", 12);
|
Size = new(160, 26);
|
ForeColor = Color.FromArgb(76, 76, 95);
|
Cursor = Cursors.Hand;
|
}
|
|
protected override void OnClick(EventArgs e)
|
{
|
_Checked = !_Checked;
|
CheckedChanged?.Invoke(this);
|
Focus();
|
Invalidate();
|
base.OnClick(e);
|
}
|
|
protected override void OnTextChanged(EventArgs e)
|
{
|
Invalidate();
|
base.OnTextChanged(e);
|
}
|
|
protected override void OnResize(EventArgs e)
|
{
|
if (Width > 0 && Height > 0)
|
{
|
Shape = new();
|
|
R1 = new(17, 0, Width, Height + 1);
|
R2 = new(0, 0, Width, Height);
|
GB = new(new Rectangle(0, 0, 25, 25), CheckedBackColorA, CheckedBackColorB, 90);
|
|
GraphicsPath MyDrawer = Shape;
|
MyDrawer.AddArc(0, 0, 7, 7, 180, 90);
|
MyDrawer.AddArc(7, 0, 7, 7, -90, 90);
|
MyDrawer.AddArc(7, 7, 7, 7, 0, 90);
|
MyDrawer.AddArc(0, 7, 7, 7, 90, 90);
|
MyDrawer.CloseAllFigures();
|
Height = 15;
|
}
|
|
Invalidate();
|
base.OnResize(e);
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
base.OnPaint(e);
|
|
Graphics MyDrawer = e.Graphics;
|
//MyDrawer.Clear(BackColor);
|
MyDrawer.SmoothingMode = SmoothingMode.AntiAlias;
|
|
MyDrawer.FillPath(GB, Shape);
|
// Fill the body of the CheckBox
|
MyDrawer.DrawPath(new(CheckedBorderColor), Shape);
|
// Draw the border
|
|
MyDrawer.DrawString(Text, Font, new SolidBrush(ForeColor), new Rectangle(17, 0, Width, Height - 1), new StringFormat { LineAlignment = StringAlignment.Center });
|
|
if (Checked)
|
{
|
MyDrawer.DrawString("ü", new Font("Wingdings", 12), new SolidBrush(CheckedColor), new Rectangle(-2, 1, Width, Height + 2), new StringFormat { LineAlignment = StringAlignment.Center });
|
}
|
|
e.Dispose();
|
}
|
}
|
|
#endregion
|
}
|