private void ManipulatorControl_Paint( object sender, PaintEventArgs e )
{
Graphics g = e.Graphics;
// calculate size of the manipulator's ares
areaSize = Math.Min( ClientRectangle.Width, ClientRectangle.Height ) - areaMargin * 2;
areaRadius = areaSize / 2;
// draw area
if ( areaSize > 1 )
{
if ( isSquareLook )
{
// square looking control
int halfAreaSize = areaSize / 2;
g.FillRectangle( ( !this.Enabled ) ? disabledBrash : topLeftBackgroundBrush, areaMargin, areaMargin, halfAreaSize, halfAreaSize );
g.FillRectangle( ( !this.Enabled ) ? disabledBrash : topRightBackgroundBrush, areaMargin + halfAreaSize, areaMargin, areaSize - halfAreaSize, halfAreaSize );
g.FillRectangle( ( !this.Enabled ) ? disabledBrash : bottomLeftBackgroundBrush, areaMargin, areaMargin + halfAreaSize, halfAreaSize, areaSize - halfAreaSize );
g.FillRectangle( ( !this.Enabled ) ? disabledBrash : bottomRightBackgroundBrush, areaMargin + halfAreaSize, areaMargin + halfAreaSize,
areaSize - halfAreaSize, areaSize - halfAreaSize );
g.DrawRectangle( borderPen, areaMargin, areaMargin, areaSize - 1, areaSize - 1 );
}
else
{
// round looking control
g.FillPie( ( this.Enabled ) ? topRightBackgroundBrush : disabledBrash, areaMargin, areaMargin, areaSize - 1, areaSize - 1, 0, -90 );
g.FillPie( ( this.Enabled ) ? topLeftBackgroundBrush : disabledBrash, areaMargin, areaMargin, areaSize - 1, areaSize - 1, -90, -90 );
g.FillPie( ( this.Enabled ) ? bottomRightBackgroundBrush : disabledBrash, areaMargin, areaMargin, areaSize - 1, areaSize - 1, 0, 90 );
g.FillPie( ( this.Enabled ) ? bottomLeftBackgroundBrush : disabledBrash, areaMargin, areaMargin, areaSize - 1, areaSize - 1, 90, 90 );
g.DrawEllipse( borderPen, areaMargin, areaMargin, areaSize - 1, areaSize - 1 );
}
}
// draw axis or not ?
if ( drawHorizontalAxis )
{
g.DrawLine( borderPen, areaMargin, areaMargin + areaRadius, areaMargin + areaSize - 1, areaMargin + areaRadius );
}
if ( drawVerticalAxis )
{
g.DrawLine( borderPen, areaMargin + areaRadius, areaMargin, areaMargin + areaRadius, areaMargin + areaSize - 1 );
}
// calculate manipulator's center point
int ctrlManipulatorX = (int) ( manipulatatorX * areaRadius ) + areaMargin + areaRadius;
int ctrlManipulatorY = (int) ( -manipulatatorY * areaRadius ) + areaMargin + areaRadius;
// draw manipulator
g.FillEllipse ( ( this.Enabled ) ? manipulatorBrush : disabledBrash,
ctrlManipulatorX - manipulatorRadius, ctrlManipulatorY - manipulatorRadius,
manipulatorSize, manipulatorSize );
g.DrawEllipse( borderPen,
ctrlManipulatorX - manipulatorRadius, ctrlManipulatorY - manipulatorRadius,
manipulatorSize, manipulatorSize );
}