/// <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); }