Some color selector improvements
This commit is contained in:
parent
24e7eba5d1
commit
eb0ddc7864
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user