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