UnityGame/Library/PackageCache/com.unity.timeline/Editor/Window/OverlayDrawer.cs

95 lines
3.1 KiB
C#
Raw Normal View History

2024-10-27 10:53:47 +03:00
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;
}
}
}
}
}