#region Imports
|
|
using System;
|
using System.Drawing;
|
using System.Drawing.Drawing2D;
|
using System.Windows.Forms;
|
|
#endregion
|
|
namespace DPumpHydr.WinFrmUI.RLT.Controls
|
{
|
#region DungeonControlBox
|
|
public class DungeonControlBox : Control
|
{
|
|
#region Enums
|
|
public enum MouseState
|
{
|
None = 0,
|
Over = 1,
|
Down = 2
|
}
|
|
#endregion
|
#region MouseStates
|
private MouseState State = MouseState.None;
|
private int X;
|
private Rectangle CloseBtn = new(3, 2, 17, 17);
|
private Rectangle MinBtn = new(23, 2, 17, 17);
|
private Rectangle MaxBtn = new(43, 2, 17, 17);
|
|
protected override void OnMouseDown(MouseEventArgs e)
|
{
|
base.OnMouseDown(e);
|
|
State = MouseState.Down;
|
Invalidate();
|
}
|
protected override void OnMouseUp(MouseEventArgs e)
|
{
|
base.OnMouseUp(e);
|
if (X is > 3 and < 20)
|
{
|
FindForm().Close();
|
}
|
else if (X is > 23 and < 40)
|
{
|
if (_EnableMinimize == true)
|
{
|
FindForm().WindowState = FormWindowState.Minimized;
|
}
|
else if (_EnableMaximize == true)
|
{
|
if (FindForm().WindowState == FormWindowState.Maximized)
|
{
|
FindForm().WindowState = FormWindowState.Minimized;
|
FindForm().WindowState = FormWindowState.Normal;
|
}
|
else
|
{
|
FindForm().WindowState = FormWindowState.Minimized;
|
FindForm().WindowState = FormWindowState.Maximized;
|
}
|
}
|
}
|
else if (X is > 43 and < 60)
|
{
|
if (_EnableMaximize == true)
|
{
|
if (FindForm().WindowState == FormWindowState.Maximized)
|
{
|
FindForm().WindowState = FormWindowState.Minimized;
|
FindForm().WindowState = FormWindowState.Normal;
|
}
|
else
|
{
|
FindForm().WindowState = FormWindowState.Minimized;
|
FindForm().WindowState = FormWindowState.Maximized;
|
}
|
}
|
}
|
State = MouseState.Over;
|
Invalidate();
|
}
|
protected override void OnMouseEnter(EventArgs e)
|
{
|
base.OnMouseEnter(e);
|
State = MouseState.Over;
|
Invalidate();
|
}
|
protected override void OnMouseLeave(EventArgs e)
|
{
|
base.OnMouseLeave(e);
|
State = MouseState.None;
|
Invalidate();
|
}
|
protected override void OnMouseMove(MouseEventArgs e)
|
{
|
base.OnMouseMove(e);
|
X = e.Location.X;
|
Invalidate();
|
}
|
#endregion
|
#region Properties
|
|
private bool _DefaultLocation = true;
|
public bool DefaultLocation
|
{
|
get => _DefaultLocation;
|
set
|
{
|
_DefaultLocation = value;
|
Invalidate();
|
}
|
}
|
|
private bool _EnableMaximize = true;
|
public bool EnableMaximize
|
{
|
get => _EnableMaximize;
|
set
|
{
|
_EnableMaximize = value;
|
if (_EnableMaximize == false || _EnableMinimize == false)
|
{
|
if (_EnableMaximize == false && _EnableMinimize == false)
|
{
|
Size = new(24, 22);
|
}
|
else
|
{
|
Size = new(44, 22);
|
}
|
}
|
else
|
{
|
Size = new(64, 22);
|
}
|
|
Invalidate();
|
}
|
}
|
|
private bool _EnableMinimize = true;
|
public bool EnableMinimize
|
{
|
get => _EnableMinimize;
|
set
|
{
|
_EnableMinimize = value;
|
if (_EnableMaximize == false || _EnableMinimize == false)
|
{
|
if (_EnableMaximize == false && _EnableMinimize == false)
|
{
|
Size = new(24, 22);
|
}
|
else
|
{
|
Size = new(44, 22);
|
}
|
}
|
else
|
{
|
Size = new(64, 22);
|
}
|
|
Invalidate();
|
}
|
}
|
|
#endregion
|
|
public DungeonControlBox()
|
{
|
SetStyle(ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor | ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer, true);
|
DoubleBuffered = true;
|
BackColor = Color.Transparent;
|
Font = new("Marlett", 7);
|
Anchor = AnchorStyles.Top | AnchorStyles.Left;
|
}
|
|
protected override void OnResize(EventArgs e)
|
{
|
base.OnResize(e);
|
if (_EnableMaximize == false || _EnableMinimize == false)
|
{
|
if (_EnableMaximize == false && _EnableMinimize == false)
|
{
|
Size = new(23, 22);
|
}
|
else
|
{
|
Size = new(44, 22);
|
}
|
}
|
else
|
{
|
Size = new(64, 22);
|
}
|
}
|
|
protected override void OnCreateControl()
|
{
|
base.OnCreateControl();
|
// Auto-decide control location on the theme container
|
if (DefaultLocation)
|
{
|
Location = new(5, 13);
|
}
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
Bitmap B = new(Width, Height);
|
Graphics G = Graphics.FromImage(B);
|
|
base.OnPaint(e);
|
G.SmoothingMode = SmoothingMode.AntiAlias;
|
|
LinearGradientBrush LGBClose = new(CloseBtn, Color.FromArgb(242, 132, 99), Color.FromArgb(224, 82, 33), 90);
|
G.FillEllipse(LGBClose, CloseBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), CloseBtn);
|
G.DrawString("r", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle((int)6.5, 8, 0, 0));
|
|
if (_EnableMinimize == true && _EnableMaximize == true)
|
{
|
LinearGradientBrush LGBMinimize = new(MinBtn, Color.FromArgb(130, 129, 123), Color.FromArgb(103, 102, 96), 90);
|
G.FillEllipse(LGBMinimize, MinBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MinBtn);
|
G.DrawString("0", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(26, (int)4.4, 0, 0));
|
|
LinearGradientBrush LGBMaximize = new(MaxBtn, Color.FromArgb(130, 129, 123), Color.FromArgb(103, 102, 96), 90);
|
G.FillEllipse(LGBMaximize, MaxBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MaxBtn);
|
G.DrawString("1", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(46, 7, 0, 0));
|
}
|
else if (_EnableMinimize == true && _EnableMaximize == false)
|
{
|
LinearGradientBrush LGBMinimize = new(MinBtn, Color.FromArgb(130, 129, 123), Color.FromArgb(103, 102, 96), 90);
|
G.FillEllipse(LGBMinimize, MinBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MinBtn);
|
G.DrawString("0", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(26, (int)4.4, 0, 0));
|
}
|
else
|
{
|
LinearGradientBrush LGBMaximize = new(MinBtn, Color.FromArgb(130, 129, 123), Color.FromArgb(103, 102, 96), 90);
|
G.FillEllipse(LGBMaximize, MinBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MinBtn);
|
G.DrawString("1", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(26, 7, 0, 0));
|
}
|
|
switch (State)
|
{
|
case MouseState.None:
|
LinearGradientBrush xLGBClose_1 = new(CloseBtn, Color.FromArgb(242, 132, 99), Color.FromArgb(224, 82, 33), 90);
|
G.FillEllipse(xLGBClose_1, CloseBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), CloseBtn);
|
G.DrawString("r", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle((int)6.5, 8, 0, 0));
|
|
if (_EnableMinimize == true && _EnableMaximize == true)
|
{
|
LinearGradientBrush xLGBMinimize_1 = new(MinBtn, Color.FromArgb(130, 129, 123), Color.FromArgb(103, 102, 96), 90);
|
G.FillEllipse(xLGBMinimize_1, MinBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MinBtn);
|
G.DrawString("0", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(26, (int)4.4, 0, 0));
|
|
LinearGradientBrush xLGBMaximize = new(MaxBtn, Color.FromArgb(130, 129, 123), Color.FromArgb(103, 102, 96), 90);
|
G.FillEllipse(xLGBMaximize, MaxBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MaxBtn);
|
G.DrawString("1", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(46, 7, 0, 0));
|
}
|
else if (_EnableMinimize == true && _EnableMaximize == false)
|
{
|
LinearGradientBrush xLGBMinimize_1 = new(MinBtn, Color.FromArgb(130, 129, 123), Color.FromArgb(103, 102, 96), 90);
|
G.FillEllipse(xLGBMinimize_1, MinBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MinBtn);
|
G.DrawString("0", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(26, (int)4.4, 0, 0));
|
}
|
else
|
{
|
LinearGradientBrush xLGBMaximize = new(MinBtn, Color.FromArgb(130, 129, 123), Color.FromArgb(103, 102, 96), 90);
|
G.FillEllipse(xLGBMaximize, MinBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MinBtn);
|
G.DrawString("1", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(26, 7, 0, 0));
|
}
|
Cursor = Cursors.Hand;
|
break;
|
case MouseState.Over:
|
if (X is > 3 and < 20)
|
{
|
LinearGradientBrush xLGBClose = new(CloseBtn, Color.FromArgb(248, 152, 124), Color.FromArgb(231, 92, 45), 90);
|
G.FillEllipse(xLGBClose, CloseBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), CloseBtn);
|
G.DrawString("r", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle((int)6.5, 8, 0, 0));
|
}
|
else if (X is > 23 and < 40)
|
{
|
if (_EnableMinimize == true)
|
{
|
LinearGradientBrush xLGBMinimize = new(MinBtn, Color.FromArgb(196, 196, 196), Color.FromArgb(173, 173, 173), 90);
|
G.FillEllipse(xLGBMinimize, MinBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MinBtn);
|
G.DrawString("0", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(26, (int)4.4, 0, 0));
|
}
|
else if (_EnableMaximize == true)
|
{
|
LinearGradientBrush xLGBMaximize = new(MinBtn, Color.FromArgb(196, 196, 196), Color.FromArgb(173, 173, 173), 90);
|
G.FillEllipse(xLGBMaximize, MinBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MinBtn);
|
G.DrawString("1", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(26, 7, 0, 0));
|
}
|
}
|
else if (X is > 43 and < 60)
|
{
|
if (_EnableMaximize == true && _EnableMinimize == true)
|
{
|
LinearGradientBrush xLGBMaximize = new(MaxBtn, Color.FromArgb(196, 196, 196), Color.FromArgb(173, 173, 173), 90);
|
G.FillEllipse(xLGBMaximize, MaxBtn);
|
G.DrawEllipse(new(Color.FromArgb(57, 56, 53)), MaxBtn);
|
G.DrawString("1", new Font("Marlett", 7), new SolidBrush(Color.FromArgb(52, 50, 46)), new Rectangle(46, 7, 0, 0));
|
}
|
}
|
break;
|
}
|
|
e.Graphics.DrawImage((Image)B.Clone(), 0, 0);
|
G.Dispose();
|
B.Dispose();
|
}
|
}
|
|
#endregion
|
}
|