#region Imports
|
|
using DPumpHydr.WinFrmUI.RLT.Colors;
|
using DPumpHydr.WinFrmUI.RLT.Util;
|
using System;
|
using System.Drawing;
|
using System.Drawing.Drawing2D;
|
using System.Drawing.Text;
|
using System.Windows.Forms;
|
|
#endregion
|
|
namespace DPumpHydr.WinFrmUI.RLT.Controls
|
{
|
#region HopeRadioButton
|
|
public class HopeRadioButton : System.Windows.Forms.RadioButton
|
{
|
#region Variables
|
private Color _EnabledCheckedColor = HopeColors.PrimaryColor;
|
private Color _EnabledUncheckedColor = ColorTranslator.FromHtml("#9c9ea1");
|
private Color _DisabledColor = ColorTranslator.FromHtml("#c4c6ca");
|
private Color _EnabledStringColor = ColorTranslator.FromHtml("#929292");
|
private Color _DisabledStringColor = ColorTranslator.FromHtml("#babbbd");
|
private Color _CheckedColor = HopeColors.PrimaryColor;
|
private int SizeAnimationNum = 0;
|
private int PointAnimationNum = 10;
|
private readonly Timer SizeAnimationTimer = new() { Interval = 35 };
|
private bool enterFalg = false;
|
private bool _Enable = true;
|
#endregion
|
|
#region Settings
|
public bool Enable
|
{
|
get => _Enable;
|
set
|
{
|
_Enable = value;
|
Invalidate();
|
}
|
}
|
|
public Color EnabledCheckedColor
|
{
|
get => _EnabledCheckedColor;
|
set
|
{
|
_EnabledCheckedColor = value;
|
Invalidate();
|
}
|
}
|
|
public Color EnabledUncheckedColor
|
{
|
get => _EnabledUncheckedColor;
|
set
|
{
|
_EnabledUncheckedColor = value;
|
Invalidate();
|
}
|
}
|
|
public Color DisabledColor
|
{
|
get => _DisabledColor;
|
set
|
{
|
_DisabledColor = value;
|
Invalidate();
|
}
|
}
|
|
public Color EnabledStringColor
|
{
|
get => _EnabledStringColor;
|
set
|
{
|
_EnabledStringColor = value;
|
Invalidate();
|
}
|
}
|
|
public Color DisabledStringColor
|
{
|
get => _DisabledStringColor;
|
set
|
{
|
_DisabledStringColor = value;
|
Invalidate();
|
}
|
}
|
|
public Color CheckedColor
|
{
|
get => _CheckedColor;
|
set
|
{
|
_CheckedColor = value;
|
Invalidate();
|
}
|
}
|
#endregion
|
|
#region Events
|
protected override void OnHandleCreated(EventArgs e)
|
{
|
base.OnHandleCreated(e);
|
SizeAnimationTimer.Start();
|
}
|
|
protected override void OnResize(EventArgs e)
|
{
|
Height = 20;
|
//Width = 25 + (int)CreateGraphics().MeasureString(Text, Font).Width;
|
Width = 25 + TextRenderer.MeasureText(Text, Font).Width;
|
}
|
|
protected override void OnCreateControl()
|
{
|
base.OnCreateControl();
|
Height = 20;
|
//Width = 25 + (int)CreateGraphics().MeasureString(Text, Font).Width;
|
Width = 25 + TextRenderer.MeasureText(Text, Font).Width;
|
}
|
|
protected override void OnMouseEnter(EventArgs eventargs)
|
{
|
base.OnMouseEnter(eventargs);
|
enterFalg = true;
|
|
if (_Enable)
|
{
|
Cursor = Cursors.Hand;
|
}
|
else
|
{
|
Cursor = Cursors.Default;
|
}
|
|
Invalidate();
|
}
|
|
protected override void OnMouseLeave(EventArgs eventargs)
|
{
|
base.OnMouseLeave(eventargs);
|
enterFalg = false;
|
Invalidate();
|
}
|
#endregion
|
|
protected override void OnPaint(PaintEventArgs pevent)
|
{
|
Graphics graphics = pevent.Graphics;
|
graphics.SmoothingMode = SmoothingMode.HighQuality;
|
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
|
graphics.Clear(BackColor);
|
|
Rectangle BGEllipse = new(1, 1, 18, 18);
|
SolidBrush BG = new(_Enable ? (Checked || enterFalg ? _EnabledCheckedColor : _EnabledUncheckedColor) : _DisabledColor);
|
|
graphics.FillEllipse(BG, BGEllipse);
|
graphics.FillEllipse(new SolidBrush(Color.White), new Rectangle(3, 3, 14, 14));
|
|
graphics.FillEllipse(BG, new Rectangle(PointAnimationNum, PointAnimationNum, SizeAnimationNum, SizeAnimationNum));
|
|
graphics.DrawString(Text, Font, new SolidBrush(_Enable ? (Checked ? _CheckedColor : ForeColor) : _DisabledStringColor), new RectangleF(22, 0, Width - 22, Height), HopeStringAlign.Center);
|
}
|
|
private void AnimationTick(object sender, EventArgs e)
|
{
|
if (Checked)
|
{
|
if (SizeAnimationNum < 8)
|
{
|
SizeAnimationNum += 2;
|
PointAnimationNum -= 1;
|
Invalidate();
|
}
|
}
|
else if (SizeAnimationNum != 0)
|
{
|
SizeAnimationNum -= 2;
|
PointAnimationNum += 1;
|
Invalidate();
|
}
|
}
|
|
public HopeRadioButton()
|
{
|
SizeAnimationTimer.Tick += new EventHandler(AnimationTick);
|
DoubleBuffered = true;
|
Font = new("Segoe UI", 12);
|
ForeColor = Color.Black;
|
Cursor = Cursors.Hand;
|
}
|
}
|
|
#endregion
|
}
|