101 lines
3.2 KiB
C#

using System;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace DevComponents.DotNetBar.ColorPickers
{
internal class CombCell
{
#region Private Variables
private Color m_Color = Color.Empty;
private Point[] m_HexagonPoints=new Point[6];
private const float Tan30 = 0.57735026918962F;
private bool m_MouseOver = false;
private bool m_Selected = false;
private Rectangle m_Bounds = Rectangle.Empty;
#endregion
#region Internal Implementation
public Color Color
{
get { return m_Color; }
set { m_Color=value; }
}
public void SetPosition(float x, float y, int nWidth)
{
float nSideLength = (float)((float)nWidth * Tan30);
m_HexagonPoints[0] = new Point((int)Math.Floor(x - (float)(nWidth / 2)), (int)Math.Floor(y - (nSideLength / 2))-1);
m_HexagonPoints[1] = new Point((int)Math.Floor((float)x), (int)Math.Floor(y - (float)(nWidth / 2))-1);
m_HexagonPoints[2] = new Point((int)Math.Floor(x + (float)(nWidth / 2)), (int)Math.Floor(y - (nSideLength / 2))-1);
m_HexagonPoints[3] = new Point((int)Math.Floor(x + (float)(nWidth / 2)), (int)Math.Floor(y + (nSideLength / 2)) + 1);
m_HexagonPoints[4] = new Point((int)Math.Floor((float)x), (int)Math.Floor(y + (float)(nWidth / 2)) + 1);
m_HexagonPoints[5] = new Point((int)Math.Floor(x - (float)(nWidth / 2)), (int)Math.Floor(y + (nSideLength / 2)) + 1);
GraphicsPath path = new GraphicsPath();
path.AddPolygon(m_HexagonPoints);
m_Bounds = Rectangle.Round(path.GetBounds());
m_Bounds.Inflate(2, 2);
}
public void Draw(Graphics g)
{
GraphicsPath path = new GraphicsPath();
path.AddPolygon(m_HexagonPoints);
path.CloseAllFigures();
using (SolidBrush brush = new SolidBrush(m_Color))
{
g.FillPath(brush, path);
}
if (m_MouseOver || m_Selected)
{
SmoothingMode sm = g.SmoothingMode;
g.SmoothingMode = SmoothingMode.AntiAlias;
using (Pen pen = new Pen(Color.FromArgb(41, 92, 150), 2))
g.DrawPath(pen, path);
using (Pen pen = new Pen(Color.FromArgb(149, 178, 239), 1))
g.DrawPath(pen, path);
g.SmoothingMode = sm;
}
path.Dispose();
}
public void Draw(Graphics g, Color c)
{
GraphicsPath path = new GraphicsPath();
path.AddPolygon(m_HexagonPoints);
using (SolidBrush brush = new SolidBrush(c))
{
g.FillPath(brush, path);
}
path.Dispose();
}
public Rectangle Bounds
{
get
{
return m_Bounds;
}
}
public bool MouseOver
{
get { return m_MouseOver; }
set { m_MouseOver = value; }
}
public bool Selected
{
get { return m_Selected; }
set { m_Selected = value; }
}
#endregion
}
}