private void ColorSlider_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Rectangle rc = this.ClientRectangle;
Brush brush;
int x = (rc.Right - width) / 2;
int y = 2;
// draw rectangle around the control
g.DrawRectangle(blackPen, x - 1, y - 1, width + 1, height + 1);
switch (type)
{
case ColorSliderType.Gradient:
case ColorSliderType.InnerGradient:
case ColorSliderType.OuterGradient:
// create gradient brush
brush = new LinearGradientBrush(new Point(x, 0), new Point(x + width, 0), startColor, endColor);
g.FillRectangle(brush, x, y, width, height);
brush.Dispose();
// check type
if (type == ColorSliderType.InnerGradient)
{
// inner gradient
brush = new SolidBrush(fillColor);
if (min != 0)
{
g.FillRectangle(brush, x, y, min, height);
}
if (max != 255)
{
g.FillRectangle(brush, x + max + 1, y, 255 - max, height);
}
brush.Dispose();
}
else if (type == ColorSliderType.OuterGradient)
{
// outer gradient
brush = new SolidBrush(fillColor);
// fill space between min & max with color 3
g.FillRectangle(brush, x + min, y, max - min + 1, height);
brush.Dispose();
}
break;
case ColorSliderType.Threshold:
// 1 - fill with color 1
brush = new SolidBrush(startColor);
g.FillRectangle(brush, x, y, width, height);
brush.Dispose();
// 2 - fill space between min & max with color 2
brush = new SolidBrush(endColor);
g.FillRectangle(brush, x + min, y, max - min + 1, height);
brush.Dispose();
break;
}
// draw arrows
x -= 4;
y += 1 + height;
g.DrawImage(arrow, x + min, y, 9, 6);
if (doubleArrow)
g.DrawImage(arrow, x + max, y, 9, 6);
}