using System; using UnityEngine; namespace UnityEditor.Timeline { readonly struct OverlayDrawer { enum OverlayType { BackgroundColor, BackgroundTexture, TextBox } readonly OverlayType m_Type; readonly Rect m_Rect; readonly string m_Text; readonly Texture2D m_Texture; readonly Color m_Color; readonly GUIStyle m_BackgroundTextStyle; readonly GUIStyle m_TextStyle; OverlayDrawer(Rect rectangle, Color backgroundColor) { m_Type = OverlayType.BackgroundColor; m_Rect = rectangle; m_Color = backgroundColor; m_Text = string.Empty; m_Texture = null; m_BackgroundTextStyle = null; m_TextStyle = null; } OverlayDrawer(Rect rectangle, Texture2D backTexture) { m_Type = OverlayType.BackgroundTexture; m_Rect = rectangle; m_Color = Color.clear; m_Text = string.Empty; m_Texture = backTexture; m_BackgroundTextStyle = null; m_TextStyle = null; } OverlayDrawer(Rect rectangle, string msg, GUIStyle textStyle, Color textColor, Color bgTextColor, GUIStyle bgTextStyle) { m_Type = OverlayType.TextBox; m_Rect = rectangle; m_Text = msg; m_TextStyle = textStyle; m_TextStyle.normal.textColor = textColor; m_BackgroundTextStyle = bgTextStyle; m_BackgroundTextStyle.normal.textColor = bgTextColor; m_Texture = null; m_Color = Color.clear; } public static OverlayDrawer CreateColorOverlay(Rect rectangle, Color backgroundColor) { return new OverlayDrawer(rectangle, backgroundColor); } public static OverlayDrawer CreateTextureOverlay(Rect rectangle, Texture2D backTexture) { return new OverlayDrawer(rectangle, backTexture); } public static OverlayDrawer CreateTextBoxOverlay(Rect rectangle, string msg, GUIStyle textStyle, Color textColor, Color bgTextColor, GUIStyle bgTextStyle) { return new OverlayDrawer(rectangle, msg, textStyle, textColor, bgTextColor, bgTextStyle); } public void Draw() { Rect overlayRect = GUIClip.Clip(m_Rect); switch (m_Type) { case OverlayType.BackgroundColor: EditorGUI.DrawRect(overlayRect, m_Color); break; case OverlayType.BackgroundTexture: Graphics.DrawTextureRepeated(overlayRect, m_Texture); break; case OverlayType.TextBox: { using (new GUIColorOverride(m_BackgroundTextStyle.normal.textColor)) GUI.Box(overlayRect, GUIContent.none, m_BackgroundTextStyle); Graphics.ShadowLabel(overlayRect, GUIContent.Temp(m_Text), m_TextStyle, m_TextStyle.normal.textColor, Color.black); break; } } } } }