1
0
mirror of synced 2024-11-28 01:10:51 +01:00

Some color selector improvements

This commit is contained in:
KillzXGaming 2020-02-17 19:50:18 -05:00
parent 24e7eba5d1
commit eb0ddc7864
2 changed files with 94 additions and 21 deletions

View File

@ -391,30 +391,45 @@ namespace Toolbox.Library.Forms
if (mouseLoc != Point.Empty) if (mouseLoc != Point.Empty)
{ {
if (AllHit.IsHit(mouseLoc)) if (AllHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, AllHit); DrawSelectionOutline(pe, AllHit, AllColor);
if (TopLeftHit.IsHit(mouseLoc)) if (TopLeftHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, TopLeftHit); DrawSelectionOutline(pe, TopLeftHit, TopLeftColor);
if (TopRightHit.IsHit(mouseLoc)) if (TopRightHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, TopRightHit); DrawSelectionOutline(pe, TopRightHit, TopRightColor);
if (BottomLeftHit.IsHit(mouseLoc)) if (BottomLeftHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, BottomLeftHit); DrawSelectionOutline(pe, BottomLeftHit, BottomLeftColor);
if (BottomRightHit.IsHit(mouseLoc)) if (BottomRightHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, BottomRightHit); DrawSelectionOutline(pe, BottomRightHit, BottomRightColor);
if (TopHit.IsHit(mouseLoc)) if (TopHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, TopHit); DrawSelectionOutline(pe, TopHit, ColorBlend(TopRightColor, TopLeftColor));
if (BottomHit.IsHit(mouseLoc)) if (BottomHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, BottomHit); DrawSelectionOutline(pe, BottomHit, ColorBlend(BottomRightColor, BottomLeftColor));
if (RightHit.IsHit(mouseLoc)) if (RightHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, RightHit); DrawSelectionOutline(pe, RightHit, ColorBlend(BottomRightColor, TopRightColor));
if (LeftHit.IsHit(mouseLoc)) if (LeftHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, LeftHit); DrawSelectionOutline(pe, LeftHit, ColorBlend(BottomLeftColor, TopLeftColor));
} }
base.OnPaint(pe); base.OnPaint(pe);
} }
private void DrawSelectionOutline(PaintEventArgs pe, Rectangle rect) { private static Color ColorBlend(Color A, Color B)
{
Color[] colors = new Color[2]
{ A, B };
return Color.FromArgb(
(int)colors.Average(a => a.A),
(int)colors.Average(a => a.R),
(int)colors.Average(a => a.G),
(int)colors.Average(a => a.B));
}
private void DrawSelectionOutline(PaintEventArgs pe, Rectangle rect, Color color) {
//Select entire regions //Select entire regions
var colorAmount = color.GrayScale(true).Inverse();
int lineThickness = 2; int lineThickness = 2;
Rectangle selection = rect; Rectangle selection = rect;
if (rect == TopHit || rect == BottomHit) { if (rect == TopHit || rect == BottomHit) {
@ -428,7 +443,7 @@ namespace Toolbox.Library.Forms
lineThickness = 2; lineThickness = 2;
} }
pe.Graphics.DrawRectangle(new Pen(new SolidBrush(Color.Black), lineThickness), new Rectangle( pe.Graphics.DrawRectangle(new Pen(new SolidBrush(colorAmount), lineThickness), new Rectangle(
selection.X + (lineThickness / 2), selection.Y + (lineThickness / 2), selection.X + (lineThickness / 2), selection.Y + (lineThickness / 2),
selection.Width - lineThickness, selection.Height - lineThickness)); selection.Width - lineThickness, selection.Height - lineThickness));
} }

View File

@ -14,6 +14,7 @@ namespace Toolbox.Library.Forms
{ {
public EventHandler OnColorChanged; public EventHandler OnColorChanged;
private Point mouseLoc = Point.Empty;
private Color TColor; private Color TColor;
private Color BColor; private Color BColor;
@ -65,6 +66,8 @@ namespace Toolbox.Library.Forms
this.BackgroundImage = Properties.Resources.CheckerBackground; this.BackgroundImage = Properties.Resources.CheckerBackground;
this.BackColor = Color.Transparent; this.BackColor = Color.Transparent;
this.MouseClick += OnMouseClick; this.MouseClick += OnMouseClick;
this.MouseMove += OnMouseMove;
this.MouseLeave += OnMouseLeave;
this.SetStyle( this.SetStyle(
ControlStyles.AllPaintingInWmPaint | ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint | ControlStyles.UserPaint |
@ -72,8 +75,23 @@ namespace Toolbox.Library.Forms
true); true);
} }
private void OnMouseMove(object sender, MouseEventArgs e) {
if (dialogActive) return;
mouseLoc = e.Location;
Invalidate();
}
private void OnMouseLeave(object sender, EventArgs e) {
if (dialogActive) return;
mouseLoc = Point.Empty;
Invalidate();
}
public void DisposeControl() public void DisposeControl()
{ {
mouseLoc = Point.Empty;
if (colorDlg != null) if (colorDlg != null)
{ {
colorDlg.Close(); colorDlg.Close();
@ -102,7 +120,9 @@ namespace Toolbox.Library.Forms
colorDlg.Show(); colorDlg.Show();
colorDlg.FormClosed += delegate colorDlg.FormClosed += delegate
{ {
mouseLoc = Point.Empty;
dialogActive = false; dialogActive = false;
this.Invalidate();
}; };
colorDlg.ColorChanged += delegate colorDlg.ColorChanged += delegate
{ {
@ -137,7 +157,9 @@ namespace Toolbox.Library.Forms
colorDlg = new STColorDialog(color); colorDlg = new STColorDialog(color);
colorDlg.FormClosed += delegate colorDlg.FormClosed += delegate
{ {
mouseLoc = Point.Empty;
dialogActive = false; dialogActive = false;
this.Invalidate();
}; };
colorDlg.Show(); colorDlg.Show();
colorDlg.ColorChanged += delegate colorDlg.ColorChanged += delegate
@ -153,6 +175,8 @@ namespace Toolbox.Library.Forms
private Rectangle BottomHit; private Rectangle BottomHit;
private Rectangle AllHit; private Rectangle AllHit;
private bool DisplayHitboxes = true;
protected override void OnPaint(PaintEventArgs pe) protected override void OnPaint(PaintEventArgs pe)
{ {
pe.Graphics.InterpolationMode = InterpolationMode.Bilinear; pe.Graphics.InterpolationMode = InterpolationMode.Bilinear;
@ -163,16 +187,14 @@ namespace Toolbox.Library.Forms
int halfWidth = r.Width / 2; int halfWidth = r.Width / 2;
int halfHeight = r.Height / 2; int halfHeight = r.Height / 2;
int LeftX = 10;
int RightX = r.Width - 30;
int topY = 10;
int BottomY = r.Height - 25;
var linearGradientBrush = new LinearGradientBrush(r, var linearGradientBrush = new LinearGradientBrush(r,
TopColor, BottomColor, LinearGradientMode.Vertical); TopColor, BottomColor, LinearGradientMode.Vertical);
pe.Graphics.FillRectangle(linearGradientBrush, r); pe.Graphics.FillRectangle(linearGradientBrush, r);
int topY = 10;
int BottomY = r.Height - 25;
var font = new Font(this.Font, FontStyle.Bold); var font = new Font(this.Font, FontStyle.Bold);
using (Brush br = new SolidBrush(AllColor.GrayScale(true).Inverse())) using (Brush br = new SolidBrush(AllColor.GrayScale(true).Inverse()))
@ -184,14 +206,50 @@ namespace Toolbox.Library.Forms
using (Brush br = new SolidBrush(BottomColor.GrayScale(true).Inverse())) using (Brush br = new SolidBrush(BottomColor.GrayScale(true).Inverse()))
pe.Graphics.DrawString("B", font, br, new Point(halfWidth - 7, BottomY)); pe.Graphics.DrawString("B", font, br, new Point(halfWidth - 7, BottomY));
// pe.Graphics.FillRectangle(linearGradientBrush, ClientRectangle); topY = 0;
BottomY = r.Height - 32;
const int hitSize = 40; const int hitSize = 32;
TopHit = new Rectangle(halfWidth - 10, topY, hitSize, hitSize); TopHit = new Rectangle(r.X, topY, r.Width, hitSize);
BottomHit = new Rectangle(halfWidth - 10, BottomY, hitSize, hitSize); BottomHit = new Rectangle(r.X, BottomY, r.Width, hitSize);
AllHit = new Rectangle(halfWidth - 10, halfHeight - 10, hitSize, hitSize); AllHit = new Rectangle(r.X, halfHeight - 16, r.Width, hitSize);
if (mouseLoc != Point.Empty)
{
if (AllHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, AllHit, AllColor);
if (TopHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, TopHit, TopColor);
if (BottomHit.IsHit(mouseLoc))
DrawSelectionOutline(pe, BottomHit, BottomColor);
}
// pe.Graphics.FillRectangle(linearGradientBrush, ClientRectangle);
base.OnPaint(pe); base.OnPaint(pe);
} }
private void DrawSelectionOutline(PaintEventArgs pe, Rectangle rect, Color color)
{
//Select entire regions
var colorAmount = color.GrayScale(true).Inverse();
int lineThickness = 2;
Rectangle selection = rect;
if (rect == TopHit || rect == BottomHit)
{
selection = new Rectangle(rect.X, rect.Y, pe.ClipRectangle.Width, rect.Height);
}
if (rect == AllHit)
{
selection = ClientRectangle;
lineThickness = 2;
}
pe.Graphics.DrawRectangle(new Pen(new SolidBrush(colorAmount), lineThickness), new Rectangle(
selection.X + (lineThickness / 2), selection.Y + (lineThickness / 2),
selection.Width - lineThickness, selection.Height - lineThickness));
}
} }
} }