示例#1
0
        /// <summary>
        /// Draws a rect that has a border.
        /// </summary>
        /// <param name="backgroundRect">The rect we will draw.</param>
        /// <param name="borderThickness">The border size in pixels.</param>
        /// <param name="background">The color of the rect that is the background. This is drawn second.</param>
        /// <param name="border">The color of the rect that is the border. This is drawn first.</param>
        /// <param name="drawPlacement">The placement of the border. Inside will draw the border starting at give rects initial size and inward. Outside draws outward. Centered draws equal in and outside of the rect.</param>
        /// <returns></returns>
        public static Rect BorderRect(Rect backgroundRect, float borderThickness, Color background, Color border, BorderDrawPlacement drawPlacement)
        {
            Rect borderRect        = new Rect();
            Rect newBackgroundRect = new Rect();

            switch (drawPlacement)
            {
            case BorderDrawPlacement.Inside:
                borderRect = backgroundRect;

                newBackgroundRect = new Rect(
                    backgroundRect.x + borderThickness,
                    backgroundRect.y + borderThickness,
                    backgroundRect.width - (borderThickness * 2),
                    backgroundRect.height - (borderThickness * 2)
                    );

                break;

            case BorderDrawPlacement.Outside:
                borderRect = new Rect(
                    backgroundRect.x - borderThickness,
                    backgroundRect.y - borderThickness,
                    backgroundRect.width + (borderThickness * 2),
                    backgroundRect.height + (borderThickness * 2)
                    );

                newBackgroundRect = backgroundRect;
                break;

            case BorderDrawPlacement.Centered:
                borderRect = new Rect(
                    backgroundRect.x - (borderThickness / 2),
                    backgroundRect.y - (borderThickness / 2),
                    backgroundRect.width + (borderThickness / 2),
                    backgroundRect.height + (borderThickness / 2)
                    );

                newBackgroundRect = new Rect(
                    backgroundRect.x + (borderThickness / 2),
                    backgroundRect.y + (borderThickness / 2),
                    backgroundRect.width - borderThickness,
                    backgroundRect.height - borderThickness
                    );
                break;
            }


            EditorGUI.DrawRect(borderRect, border);

            EditorGUI.DrawRect(newBackgroundRect, background);

            return(borderRect);
        }
        /// <summary>
        /// Draws a rectangle that is colored and may have a border.
        /// </summary>
        public static Rect Box(this HUMEditor.Data.Immediate immediate, Color backgroundColor, Color borderColor, BorderDrawPlacement drawPlacement, float border = 1f)
        {
            Rect borderRect        = new Rect();
            Rect newBackgroundRect = new Rect();

            switch (drawPlacement)
            {
            case BorderDrawPlacement.Inside:
                borderRect = immediate.rect;

                newBackgroundRect = new Rect(
                    immediate.rect.x + border,
                    immediate.rect.y + border,
                    immediate.rect.width - (border * 2),
                    immediate.rect.height - (border * 2)
                    );

                break;

            case BorderDrawPlacement.Outside:
                borderRect = new Rect(
                    immediate.rect.x - border,
                    immediate.rect.y - border,
                    immediate.rect.width + (border * 2),
                    immediate.rect.height + (border * 2)
                    );

                newBackgroundRect = immediate.rect;
                break;

            case BorderDrawPlacement.Centered:
                borderRect = new Rect(
                    immediate.rect.x - (border / 2),
                    immediate.rect.y - (border / 2),
                    immediate.rect.width + (border / 2),
                    immediate.rect.height + (border / 2)
                    );

                newBackgroundRect = new Rect(
                    immediate.rect.x + (border / 2),
                    immediate.rect.y + (border / 2),
                    immediate.rect.width - border,
                    immediate.rect.height - border
                    );
                break;
            }

            EditorGUI.DrawRect(borderRect, borderColor);

            EditorGUI.DrawRect(newBackgroundRect, backgroundColor);

            return(borderRect);
        }