private void ManipulatorControl_MouseMove( object sender, MouseEventArgs e )
{
if ( tracking )
{
// get mouse point relatively to manipulation area's center
int cX = e.X - areaMargin - areaRadius;
int cY = e.Y - areaMargin - areaRadius;
if ( isSquareLook )
{
cX = Math.Min( areaRadius, Math.Max( -areaRadius, cX ) );
cY = Math.Min( areaRadius, Math.Max( -areaRadius, cY ) );
}
else
{
// get distance from center
int cR = (int) Math.Sqrt( cX * cX + cY * cY );
// correct point if it is too far away
if ( cR > areaRadius )
{
double coef = (double) areaRadius / cR;
cX = (int) ( coef * cX );
cY = (int) ( coef * cY );
}
}
manipulatatorX = (float) cX / areaRadius;
manipulatatorY = (float) -cY / areaRadius;
Invalidate( );
// notify user after 5 timer ticks
ticksBeforeNotificiation = 5;
}
}