122 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			122 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using UnityEngine; | ||
|  | 
 | ||
|  | namespace UnityEditor.Timeline | ||
|  | { | ||
|  |     static class Graphics | ||
|  |     { | ||
|  |         public static void ShadowLabel(Rect rect, string text, GUIStyle style, Color textColor, Color shadowColor) | ||
|  |         { | ||
|  |             ShadowLabel(rect, GUIContent.Temp(text), style, textColor, shadowColor); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void ShadowLabel(Rect rect, GUIContent content, GUIStyle style, Color textColor, Color shadowColor) | ||
|  |         { | ||
|  |             var shadowRect = rect; | ||
|  |             shadowRect.xMin += 2.0f; | ||
|  |             shadowRect.yMin += 2.0f; | ||
|  |             style.normal.textColor = shadowColor; | ||
|  |             style.hover.textColor = shadowColor; | ||
|  |             GUI.Label(shadowRect, content, style); | ||
|  | 
 | ||
|  |             style.normal.textColor = textColor; | ||
|  |             style.hover.textColor = textColor; | ||
|  |             GUI.Label(rect, content, style); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void DrawLine(Vector3 p1, Vector3 p2, Color color) | ||
|  |         { | ||
|  |             var c = Handles.color; | ||
|  |             Handles.color = color; | ||
|  |             Handles.DrawLine(p1, p2); | ||
|  |             Handles.color = c; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void DrawPolygonAA(Color color, Vector3[] vertices) | ||
|  |         { | ||
|  |             var prevColor = Handles.color; | ||
|  |             Handles.color = color; | ||
|  |             Handles.DrawAAConvexPolygon(vertices); | ||
|  |             Handles.color = prevColor; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void DrawDottedLine(Vector3 p1, Vector3 p2, float segmentsLength, Color col) | ||
|  |         { | ||
|  |             HandleUtility.ApplyWireMaterial(); | ||
|  | 
 | ||
|  |             GL.Begin(GL.LINES); | ||
|  |             GL.Color(col); | ||
|  | 
 | ||
|  |             var length = Vector3.Distance(p1, p2); // ignore z component | ||
|  |             var count = Mathf.CeilToInt(length / segmentsLength); | ||
|  |             for (var i = 0; i < count; i += 2) | ||
|  |             { | ||
|  |                 GL.Vertex((Vector3.Lerp(p1, p2, i * segmentsLength / length))); | ||
|  |                 GL.Vertex((Vector3.Lerp(p1, p2, (i + 1) * segmentsLength / length))); | ||
|  |             } | ||
|  | 
 | ||
|  |             GL.End(); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void DrawLineAtTime(WindowState state, double time, Color color, bool dotted = false) | ||
|  |         { | ||
|  |             var t = state.TimeToPixel(time); | ||
|  | 
 | ||
|  |             var p0 = new Vector3(t, state.timeAreaRect.yMax); | ||
|  |             var p1 = new Vector3(t, state.timeAreaRect.yMax + state.windowHeight - WindowConstants.sliderWidth); | ||
|  | 
 | ||
|  |             if (dotted) | ||
|  |                 DrawDottedLine(p0, p1, 4.0f, color); | ||
|  |             else | ||
|  |                 DrawLine(p0, p1, color); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void DrawTextureRepeated(Rect area, Texture texture) | ||
|  |         { | ||
|  |             if (texture == null || Event.current.type != EventType.Repaint) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             GUI.BeginClip(area); | ||
|  |             int w = Mathf.CeilToInt(area.width / texture.width); | ||
|  |             int h = Mathf.CeilToInt(area.height / texture.height); | ||
|  |             for (int x = 0; x < w; x++) | ||
|  |             { | ||
|  |                 for (int y = 0; y < h; y++) | ||
|  |                 { | ||
|  |                     GUI.DrawTexture(new Rect(x * texture.width, y * texture.height, texture.width, texture.height), texture); | ||
|  |                 } | ||
|  |             } | ||
|  | 
 | ||
|  |             GUI.EndClip(); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void DrawShadow(Rect clientRect) | ||
|  |         { | ||
|  |             var rect = clientRect; | ||
|  |             rect.height = WindowConstants.shadowUnderTimelineHeight; | ||
|  |             GUI.Box(rect, GUIContent.none, DirectorStyles.Instance.bottomShadow); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void DrawBackgroundRect(WindowState state, Rect rect, bool subSequenceMode = false) | ||
|  |         { | ||
|  |             Color c = subSequenceMode ? DirectorStyles.Instance.customSkin.colorSubSequenceBackground : DirectorStyles.Instance.customSkin.colorSequenceBackground; | ||
|  |             EditorGUI.DrawRect(rect, c); | ||
|  |             if (state.IsEditingAPrefabAsset()) | ||
|  |             { | ||
|  |                 c = SceneView.kSceneViewPrefabBackground.Color; | ||
|  |                 c.a = 0.5f; | ||
|  |                 EditorGUI.DrawRect(rect, c); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public static Rect CalculateTextBoxSize(Rect trackRect, GUIStyle font, GUIContent content, float padding) | ||
|  |         { | ||
|  |             Rect textRect = trackRect; | ||
|  |             textRect.width = font.CalcSize(content).x + padding; | ||
|  |             textRect.x += (trackRect.width - textRect.width) / 2f; | ||
|  |             textRect.height -= 4f; | ||
|  |             textRect.y += 2f; | ||
|  |             return textRect; | ||
|  |         } | ||
|  |     } | ||
|  | } |