#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 SkyRadioButton
|
|
[DefaultEvent("CheckedChanged")]
|
public class SkyRadioButton : Control
|
{
|
#region " Control Help - MouseState & Flicker Control"
|
private Point mouse = new(0, 0);
|
protected override void OnResize(EventArgs e)
|
{
|
base.OnResize(e);
|
Height = 14;
|
}
|
|
protected override void OnMouseMove(MouseEventArgs e)
|
{
|
mouse = e.Location;
|
base.OnMouseMove(e);
|
}
|
|
protected override void OnTextChanged(EventArgs e)
|
{
|
base.OnTextChanged(e);
|
Invalidate();
|
}
|
|
private bool _Checked;
|
public bool Checked
|
{
|
get => _Checked;
|
set
|
{
|
_Checked = value;
|
InvalidateControls();
|
CheckedChanged?.Invoke(this);
|
Invalidate();
|
}
|
}
|
|
protected override void OnClick(EventArgs e)
|
{
|
if (mouse.X <= Height - 1 || mouse.Y <= Width - 1)
|
{
|
if (!_Checked)
|
{
|
Checked = true;
|
}
|
|
Invalidate();
|
}
|
base.OnClick(e);
|
}
|
|
public event CheckedChangedEventHandler CheckedChanged;
|
public delegate void CheckedChangedEventHandler(object sender);
|
|
protected override void OnCreateControl()
|
{
|
base.OnCreateControl();
|
InvalidateControls();
|
}
|
|
private void InvalidateControls()
|
{
|
if (!IsHandleCreated || !_Checked)
|
{
|
return;
|
}
|
|
foreach (Control C in Parent.Controls)
|
{
|
if (!object.ReferenceEquals(C, this) && C is SkyRadioButton button)
|
{
|
button.Checked = false;
|
}
|
}
|
}
|
#endregion
|
|
#region Variables
|
private SmoothingMode _SmoothingType = SmoothingMode.HighQuality;
|
#endregion
|
|
#region Settings
|
public SmoothingMode SmoothingType
|
{
|
get => _SmoothingType;
|
set
|
{
|
_SmoothingType = value;
|
Invalidate();
|
}
|
}
|
|
public Color EllipseBorderColorA { get; set; } = Color.FromArgb(168, 168, 168);
|
|
public Color EllipseBorderColorB { get; set; } = Color.FromArgb(252, 252, 252);
|
|
public Color EllipseBackColorA { get; set; } = Color.FromArgb(245, 245, 245);
|
|
public Color EllipseBackColorB { get; set; } = Color.FromArgb(231, 231, 231);
|
|
public Color CheckedColorA { get; set; } = Color.FromArgb(27, 94, 137);
|
|
public Color CheckedColorB { get; set; } = Color.FromArgb(150, 118, 177, 211);
|
#endregion
|
|
public SkyRadioButton() : base()
|
{
|
SetStyle(ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true);
|
BackColor = Color.Transparent;
|
ForeColor = Color.FromArgb(27, 94, 137);
|
Font = new("Verdana", 6.75f, FontStyle.Bold);
|
Size = new(105, 14);
|
DoubleBuffered = true;
|
Cursor = Cursors.Hand;
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
Bitmap B = new(Width, Height);
|
Graphics G = Graphics.FromImage(B);
|
|
G.SmoothingMode = SmoothingType;
|
G.Clear(Parent.FindForm().BackColor);
|
|
G.DrawEllipse(new(EllipseBorderColorA), new Rectangle(0, 0, Height - 2, Height - 1));
|
LinearGradientBrush bgGrad = new(new Rectangle(0, 0, Height - 2, Height - 2), EllipseBackColorA, EllipseBackColorB, 90);
|
G.FillEllipse(bgGrad, new Rectangle(0, 0, Height - 2, Height - 2));
|
G.DrawEllipse(new(EllipseBorderColorB), new Rectangle(1, 1, Height - 4, Height - 4));
|
|
if (Checked)
|
{
|
G.FillEllipse(new SolidBrush(CheckedColorA), new Rectangle(3, 3, Height - 8, Height - 8));
|
G.FillEllipse(new SolidBrush(CheckedColorB), new Rectangle(4, 4, Height - 10, Height - 10));
|
}
|
|
G.DrawString(Text, Font, new SolidBrush(ForeColor), new Point(16, 1), new StringFormat
|
{
|
Alignment = StringAlignment.Near,
|
LineAlignment = StringAlignment.Near
|
});
|
|
e.Graphics.DrawImage(B, 0, 0);
|
G.Dispose();
|
B.Dispose();
|
}
|
}
|
|
#endregion
|
}
|