private void Move_Stick( Rectangle toRect, bool bInsideStick )
{
// compare distance from toRect to formRect
// and then with the found distances, compare the most closed position
if ( formRect.Bottom >= (toRect.Top - stickGap) && formRect.Top <= (toRect.Bottom + stickGap) )
{
if ( bInsideStick )
{
if ( (Math.Abs(formRect.Left - toRect.Right) <= Math.Abs(formOffsetPoint.X) ) )
{ // left 2 right
formOffsetPoint.X = toRect.Right - formRect.Left;
}
if ( (Math.Abs(formRect.Left + formRect.Width - toRect.Left) <= Math.Abs(formOffsetPoint.X) ) )
{ // right 2 left
formOffsetPoint.X = toRect.Left - formRect.Width - formRect.Left;
}
}
if ( Math.Abs(formRect.Left - toRect.Left) <= Math.Abs(formOffsetPoint.X) )
{ // snap left 2 left
formOffsetPoint.X = toRect.Left - formRect.Left;
}
if ( Math.Abs(formRect.Left + formRect.Width - toRect.Left - toRect.Width ) <= Math.Abs(formOffsetPoint.X))
{ // snap right 2 right
formOffsetPoint.X = toRect.Left + toRect.Width - formRect.Width - formRect.Left;
}
}
if ( formRect.Right >= (toRect.Left - stickGap) && formRect.Left <= (toRect.Right + stickGap) )
{
if ( bInsideStick )
{
if (Math.Abs(formRect.Top - toRect.Bottom) <= Math.Abs(formOffsetPoint.Y) && bInsideStick )
{ // Stick Top to Bottom
formOffsetPoint.Y = toRect.Bottom - formRect.Top;
}
if (Math.Abs(formRect.Top + formRect.Height - toRect.Top) <= Math.Abs(formOffsetPoint.Y) && bInsideStick )
{ // snap Bottom to Top
formOffsetPoint.Y = toRect.Top - formRect.Height - formRect.Top;
}
}
// try to snap top 2 top also
if (Math.Abs(formRect.Top - toRect.Top) <= Math.Abs(formOffsetPoint.Y))
{ // top 2 top
formOffsetPoint.Y = toRect.Top - formRect.Top;
}
if ( Math.Abs(formRect.Top + formRect.Height - toRect.Top - toRect.Height ) <= Math.Abs(formOffsetPoint.Y))
{ // bottom 2 bottom
formOffsetPoint.Y = toRect.Top + toRect.Height - formRect.Height - formRect.Top;
}
}
}