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 );
}