Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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));
        }