#region Imports
|
|
using DPumpHydr.WinFrmUI.RLT.Colors;
|
using DPumpHydr.WinFrmUI.RLT.Util;
|
using System;
|
using System.Drawing;
|
using System.Windows.Forms;
|
|
#endregion
|
|
namespace DPumpHydr.WinFrmUI.RLT.Controls
|
{
|
#region RoyalButton
|
|
public class RoyalButton : ControlRoyalBase
|
{
|
public event EventHandler HotTrackChanged;
|
public event EventHandler SelectedChanged;
|
|
public bool HotTracked { get; private set; } = false;
|
|
public bool Pressed { get; private set; } = false;
|
|
private bool drawBorder;
|
public bool DrawBorder
|
{
|
get => drawBorder;
|
set { drawBorder = value; Invalidate(); }
|
}
|
|
private Color hotTrackColor;
|
public Color HotTrackColor
|
{
|
get => hotTrackColor;
|
set { hotTrackColor = value; Invalidate(); }
|
}
|
|
private Color pressedColor;
|
public Color PressedColor
|
{
|
get => pressedColor;
|
set { pressedColor = value; Invalidate(); }
|
}
|
|
private Color pressedForeColor;
|
public Color PressedForeColor
|
{
|
get => pressedForeColor;
|
set { pressedForeColor = value; Invalidate(); }
|
}
|
|
private Color borderColor;
|
public Color BorderColor
|
{
|
get => borderColor;
|
set { borderColor = value; Invalidate(); }
|
}
|
|
private int borderThickness;
|
public int BorderThickness
|
{
|
get => borderThickness;
|
set { borderThickness = value; Invalidate(); }
|
}
|
|
private Image image;
|
public Image Image
|
{
|
get => image;
|
set { image = value; Invalidate(); }
|
}
|
|
private RoyalLayoutFlags layoutFlags;
|
public RoyalLayoutFlags LayoutFlags
|
{
|
get => layoutFlags;
|
set { layoutFlags = value; Invalidate(); }
|
}
|
|
public RoyalButton()
|
{
|
BackColor = RoyalColors.BackColor;
|
HotTrackColor = RoyalColors.HotTrackColor;
|
PressedColor = RoyalColors.PressedBackColor;
|
PressedForeColor = RoyalColors.PressedForeColor;
|
BorderColor = RoyalColors.BorderColor;
|
ForeColor = RoyalColors.ForeColor;
|
DrawBorder = true;
|
BorderThickness = 3;
|
|
Image = null;
|
LayoutFlags = RoyalLayoutFlags.ImageBeforeText;
|
Size = new(120, 40);
|
Cursor = Cursors.Hand;
|
|
HotTrackChanged = new EventHandler(OnHotTrackChanged);
|
SelectedChanged = new EventHandler(OnSelectedChanged);
|
}
|
|
protected virtual void OnHotTrackChanged(object sender, EventArgs e)
|
{
|
Refresh();
|
}
|
|
protected virtual void OnSelectedChanged(object sender, EventArgs e)
|
{
|
Refresh();
|
}
|
|
protected override void OnMouseEnter(EventArgs e)
|
{
|
HotTracked = true;
|
HotTrackChanged(this, EventArgs.Empty);
|
base.OnMouseEnter(e);
|
}
|
|
protected override void OnMouseLeave(EventArgs e)
|
{
|
HotTracked = false;
|
HotTrackChanged(this, EventArgs.Empty);
|
base.OnMouseLeave(e);
|
}
|
|
protected override void OnMouseDown(MouseEventArgs e)
|
{
|
Pressed = true;
|
SelectedChanged(this, EventArgs.Empty);
|
base.OnMouseDown(e);
|
}
|
|
protected override void OnMouseUp(MouseEventArgs e)
|
{
|
Pressed = false;
|
SelectedChanged(this, EventArgs.Empty);
|
base.OnMouseUp(e);
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
Color foreColor = ForeColor;
|
Color backColor = BackColor;
|
|
if (HotTracked && !Pressed)
|
{
|
backColor = hotTrackColor;
|
}
|
else if (Pressed)
|
{
|
foreColor = pressedForeColor;
|
backColor = pressedColor;
|
}
|
|
e.Graphics.FillRectangle(new SolidBrush(backColor), e.ClipRectangle);
|
|
if (DrawBorder)
|
{
|
e.Graphics.DrawRectangle(new(BorderColor, BorderThickness), new Rectangle(1, 1, Width - BorderThickness, Height - BorderThickness));
|
}
|
|
SizeF textSize = e.Graphics.MeasureString(Text, Font);
|
|
if (Image != null)
|
{
|
if (LayoutFlags == RoyalLayoutFlags.ImageBeforeText)
|
{
|
e.Graphics.DrawImage(Image, new Point(0, 0));
|
e.Graphics.DrawString(Text, Font, new SolidBrush(foreColor), new PointF(Image.Width + 2, (Height - textSize.Height) / 2));
|
}
|
else if (LayoutFlags == RoyalLayoutFlags.TextBeforeImage)
|
{
|
e.Graphics.DrawString(Text, Font, new SolidBrush(foreColor), new PointF(0, (Height - textSize.Height) / 2));
|
e.Graphics.DrawImage(Image, new Point(Width - Image.Width, 0));
|
}
|
else if (LayoutFlags == RoyalLayoutFlags.ImageOnly)
|
{
|
e.Graphics.DrawImage(Image, new Point((Width - Image.Width) / 2, (Height - Image.Height) / 2));
|
}
|
else if (LayoutFlags == RoyalLayoutFlags.TextOnly)
|
{
|
e.Graphics.DrawString(Text, Font, new SolidBrush(foreColor), new PointF((Width - textSize.Width) / 2, (Height - textSize.Height) / 2));
|
}
|
}
|
else
|
{
|
e.Graphics.DrawString(Text, Font, new SolidBrush(foreColor), new PointF((Width - textSize.Width) / 2, (Height - textSize.Height) / 2));
|
}
|
|
base.OnPaint(e);
|
}
|
}
|
|
#endregion
|
}
|