95 lines
3.1 KiB
C#
95 lines
3.1 KiB
C#
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|