private void ManipulatorControl_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
// calculate size of the manipulator's ares
areaSize = System.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);
}