/// <summary> /// Align the <see cref="Rectangle"/> structure on the outside of the destination <see cref="Rectangle"/>. /// </summary> /// <param name="rect">Structure <see cref="Rectangle"/> to be aligned.</param> /// <param name="alignment">One of the values in the enumeration <see cref="OutsideAlignment"/> that represents the type of alignment.</param> /// <param name="destRect">Structure <see cref="Rectangle"/> where it will be aligned.</param> /// <returns> /// A <see cref="Rectangle"/> structure that represents the destination rectangle that contains the aligned element. /// </returns> public static Rectangle AlignOutside(this Rectangle rect, OutsideAlignment alignment, Rectangle destRect) { switch (alignment) { case OutsideAlignment.TopLeftCorner: rect.Offset(destRect.X - rect.X - rect.Width, destRect.Y - rect.Y); break; case OutsideAlignment.TopLeft: rect.Offset(destRect.X - rect.X, destRect.Y - rect.Y - rect.Height); break; case OutsideAlignment.TopCenter: rect.Offset(destRect.X - rect.X + (destRect.Width - rect.Width) >> 1, destRect.Y - rect.Y - rect.Height); break; case OutsideAlignment.TopRight: rect.Offset(destRect.X - rect.X + destRect.Width - rect.Width, destRect.Y - rect.Y - rect.Height); break; case OutsideAlignment.TopRightCorner: rect.Offset(destRect.X - rect.X + destRect.Width, destRect.Y - rect.Y); break; case OutsideAlignment.MiddleRight: rect.Offset(destRect.X - rect.X + destRect.Width, destRect.Y - rect.Y + (destRect.Height - rect.Height) >> 1); break; case OutsideAlignment.BottomRightCorner: rect.Offset(destRect.X - rect.X + destRect.Width, destRect.Bottom - rect.Height); break; case OutsideAlignment.BottomRight: rect.Offset(destRect.X - rect.X + destRect.Width - rect.Width, destRect.Y + destRect.Height - rect.Y); break; case OutsideAlignment.BottomCenter: rect.Offset(destRect.X - rect.X + (destRect.Width - rect.Width) >> 1, destRect.Y + destRect.Height - rect.Y); break; case OutsideAlignment.BottomLeft: rect.Offset(destRect.X - rect.X, destRect.Y + destRect.Height - rect.Y); break; case OutsideAlignment.BottomLeftCorner: rect.Offset(destRect.X - rect.X - rect.Width, destRect.Bottom - rect.Height); break; case OutsideAlignment.MiddleLeft: rect.Offset(destRect.X - rect.X - rect.Width, destRect.Y - rect.Y + (destRect.Height - rect.Height) >> 1); break; } return(rect); }
/// <summary> /// Align the <see cref="Size"/> structure outside the target rectangle. /// </summary> /// <param name="size">Estructura <see cref="Size"/> que se va alinear.</param> /// <param name="alignment">One of the values in the enumeration <see cref="OutsideAlignment"/> that represents the type of alignment.</param> /// <param name="destRect">Structure <see cref="Rectangle"/> where it will be aligned.</param> /// <returns> /// Structure <see cref="Rectangle"/> that represents the destination rectangle that contains the aligned element. /// </returns> public static Rectangle AlignOutside(this Size size, OutsideAlignment alignment, Rectangle destRect) { Rectangle rect = new Rectangle(destRect.Location, size); return(rect.AlignOutside(alignment, destRect)); }