You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
362 lines
12 KiB
362 lines
12 KiB
//-------------------------------------------------------------------------------------------------------------------------------- |
|
// Cartoon FX |
|
// (c) 2012-2020 Jean Moreno |
|
//-------------------------------------------------------------------------------------------------------------------------------- |
|
|
|
using UnityEngine; |
|
using UnityEditor; |
|
|
|
// GUI Styles and UI methods |
|
|
|
namespace CartoonFX |
|
{ |
|
public static class Styles |
|
{ |
|
//================================================================================================================================ |
|
// GUI Styles |
|
//================================================================================================================================ |
|
|
|
//================================================================================================================================ |
|
// (x) close button |
|
static GUIStyle _closeCrossButton; |
|
public static GUIStyle CloseCrossButton |
|
{ |
|
get |
|
{ |
|
if(_closeCrossButton == null) |
|
{ |
|
//Try to load GUISkin according to its GUID |
|
//Assumes that its .meta file should always stick with it! |
|
string guiSkinPath = AssetDatabase.GUIDToAssetPath("02d396fa782e5d7438e231ea9f8be23c"); |
|
var gs = AssetDatabase.LoadAssetAtPath<GUISkin>(guiSkinPath); |
|
if(gs != null) |
|
{ |
|
_closeCrossButton = System.Array.Find<GUIStyle>(gs.customStyles, x => x.name == "CloseCrossButton"); |
|
} |
|
|
|
//Else fall back to minibutton |
|
if(_closeCrossButton == null) |
|
_closeCrossButton = EditorStyles.miniButton; |
|
} |
|
return _closeCrossButton; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Shuriken Toggle with label alignment fix |
|
static GUIStyle _shurikenToggle; |
|
public static GUIStyle ShurikenToggle |
|
{ |
|
get |
|
{ |
|
if(_shurikenToggle == null) |
|
{ |
|
_shurikenToggle = new GUIStyle("ShurikenToggle"); |
|
_shurikenToggle.fontSize = 9; |
|
_shurikenToggle.contentOffset = new Vector2(16, -1); |
|
if(EditorGUIUtility.isProSkin) |
|
{ |
|
var textColor = new Color(.8f, .8f, .8f); |
|
_shurikenToggle.normal.textColor = textColor; |
|
_shurikenToggle.active.textColor = textColor; |
|
_shurikenToggle.focused.textColor = textColor; |
|
_shurikenToggle.hover.textColor = textColor; |
|
_shurikenToggle.onNormal.textColor = textColor; |
|
_shurikenToggle.onActive.textColor = textColor; |
|
_shurikenToggle.onFocused.textColor = textColor; |
|
_shurikenToggle.onHover.textColor = textColor; |
|
} |
|
} |
|
return _shurikenToggle; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Bold mini-label (the one from EditorStyles isn't actually "mini") |
|
static GUIStyle _miniBoldLabel; |
|
public static GUIStyle MiniBoldLabel |
|
{ |
|
get |
|
{ |
|
if(_miniBoldLabel == null) |
|
{ |
|
_miniBoldLabel = new GUIStyle(EditorStyles.boldLabel); |
|
_miniBoldLabel.fontSize = 10; |
|
_miniBoldLabel.margin = new RectOffset(0, 0, 0, 0); |
|
} |
|
return _miniBoldLabel; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Bold mini-foldout |
|
static GUIStyle _miniBoldFoldout; |
|
public static GUIStyle MiniBoldFoldout |
|
{ |
|
get |
|
{ |
|
if(_miniBoldFoldout == null) |
|
{ |
|
_miniBoldFoldout = new GUIStyle(EditorStyles.foldout); |
|
_miniBoldFoldout.fontSize = 10; |
|
_miniBoldFoldout.fontStyle = FontStyle.Bold; |
|
_miniBoldFoldout.margin = new RectOffset(0, 0, 0, 0); |
|
} |
|
return _miniBoldFoldout; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Gray right-aligned label for Orderable List (Material Animator) |
|
static GUIStyle _PropertyTypeLabel; |
|
public static GUIStyle PropertyTypeLabel |
|
{ |
|
get |
|
{ |
|
if(_PropertyTypeLabel == null) |
|
{ |
|
_PropertyTypeLabel = new GUIStyle(EditorStyles.label); |
|
_PropertyTypeLabel.alignment = TextAnchor.MiddleRight; |
|
_PropertyTypeLabel.normal.textColor = Color.gray; |
|
_PropertyTypeLabel.fontSize = 9; |
|
} |
|
return _PropertyTypeLabel; |
|
} |
|
} |
|
|
|
// Dark Gray right-aligned label for Orderable List (Material Animator) |
|
static GUIStyle _PropertyTypeLabelFocused; |
|
public static GUIStyle PropertyTypeLabelFocused |
|
{ |
|
get |
|
{ |
|
if(_PropertyTypeLabelFocused == null) |
|
{ |
|
_PropertyTypeLabelFocused = new GUIStyle(EditorStyles.label); |
|
_PropertyTypeLabelFocused.alignment = TextAnchor.MiddleRight; |
|
_PropertyTypeLabelFocused.normal.textColor = new Color(.2f, .2f, .2f); |
|
_PropertyTypeLabelFocused.fontSize = 9; |
|
} |
|
return _PropertyTypeLabelFocused; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Rounded Box |
|
static GUIStyle _roundedBox; |
|
public static GUIStyle RoundedBox |
|
{ |
|
get |
|
{ |
|
if(_roundedBox == null) |
|
{ |
|
_roundedBox = new GUIStyle(EditorStyles.helpBox); |
|
} |
|
return _roundedBox; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Center White Label ("Editing Spline" label in Scene View) |
|
static GUIStyle _CenteredWhiteLabel; |
|
public static GUIStyle CenteredWhiteLabel |
|
{ |
|
get |
|
{ |
|
if(_CenteredWhiteLabel == null) |
|
{ |
|
_CenteredWhiteLabel = new GUIStyle(EditorStyles.centeredGreyMiniLabel); |
|
_CenteredWhiteLabel.fontSize = 20; |
|
_CenteredWhiteLabel.normal.textColor = Color.white; |
|
} |
|
return _CenteredWhiteLabel; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Used to draw lines for separators |
|
static public GUIStyle _LineStyle; |
|
static public GUIStyle LineStyle |
|
{ |
|
get |
|
{ |
|
if(_LineStyle == null) |
|
{ |
|
_LineStyle = new GUIStyle(); |
|
_LineStyle.normal.background = EditorGUIUtility.whiteTexture; |
|
_LineStyle.stretchWidth = true; |
|
} |
|
|
|
return _LineStyle; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// HelpBox with rich text formatting support |
|
static GUIStyle _HelpBoxRichTextStyle; |
|
static public GUIStyle HelpBoxRichTextStyle |
|
{ |
|
get |
|
{ |
|
if(_HelpBoxRichTextStyle == null) |
|
{ |
|
_HelpBoxRichTextStyle = new GUIStyle("HelpBox"); |
|
_HelpBoxRichTextStyle.richText = true; |
|
} |
|
return _HelpBoxRichTextStyle; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Material Blue Header |
|
static public GUIStyle _MaterialHeaderStyle; |
|
static public GUIStyle MaterialHeaderStyle |
|
{ |
|
get |
|
{ |
|
if(_MaterialHeaderStyle == null) |
|
{ |
|
_MaterialHeaderStyle = new GUIStyle(EditorStyles.label); |
|
_MaterialHeaderStyle.fontStyle = FontStyle.Bold; |
|
_MaterialHeaderStyle.fontSize = 11; |
|
_MaterialHeaderStyle.padding.top = 0; |
|
_MaterialHeaderStyle.padding.bottom = 0; |
|
_MaterialHeaderStyle.normal.textColor = EditorGUIUtility.isProSkin ? new Color32(75, 128, 255, 255) : new Color32(0, 50, 230, 255); |
|
_MaterialHeaderStyle.stretchWidth = true; |
|
} |
|
|
|
return _MaterialHeaderStyle; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Material Header emboss effect |
|
static public GUIStyle _MaterialHeaderStyleHighlight; |
|
static public GUIStyle MaterialHeaderStyleHighlight |
|
{ |
|
get |
|
{ |
|
if(_MaterialHeaderStyleHighlight == null) |
|
{ |
|
_MaterialHeaderStyleHighlight = new GUIStyle(MaterialHeaderStyle); |
|
_MaterialHeaderStyleHighlight.contentOffset = new Vector2(1, 1); |
|
_MaterialHeaderStyleHighlight.normal.textColor = EditorGUIUtility.isProSkin ? new Color32(255, 255, 255, 16) : new Color32(255, 255, 255, 32); |
|
} |
|
|
|
return _MaterialHeaderStyleHighlight; |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Filled rectangle |
|
|
|
static private GUIStyle _WhiteRectangleStyle; |
|
|
|
static public void DrawRectangle(Rect position, Color color) |
|
{ |
|
var col = GUI.color; |
|
GUI.color *= color; |
|
DrawRectangle(position); |
|
GUI.color = col; |
|
} |
|
static public void DrawRectangle(Rect position) |
|
{ |
|
if(_WhiteRectangleStyle == null) |
|
{ |
|
_WhiteRectangleStyle = new GUIStyle(); |
|
_WhiteRectangleStyle.normal.background = EditorGUIUtility.whiteTexture; |
|
} |
|
|
|
if(Event.current != null && Event.current.type == EventType.Repaint) |
|
{ |
|
_WhiteRectangleStyle.Draw(position, false, false, false, false); |
|
} |
|
} |
|
|
|
//================================================================================================================================ |
|
// Methods |
|
//================================================================================================================================ |
|
|
|
static public void DrawLine(float height = 2f) |
|
{ |
|
DrawLine(Color.black, height); |
|
} |
|
static public void DrawLine(Color color, float height = 1f) |
|
{ |
|
Rect position = GUILayoutUtility.GetRect(0f, float.MaxValue, height, height, LineStyle); |
|
DrawLine(position, color); |
|
} |
|
static public void DrawLine(Rect position, Color color) |
|
{ |
|
if(Event.current.type == EventType.Repaint) |
|
{ |
|
Color orgColor = GUI.color; |
|
GUI.color = orgColor * color; |
|
LineStyle.Draw(position, false, false, false, false); |
|
GUI.color = orgColor; |
|
} |
|
} |
|
|
|
static public void MaterialDrawHeader(GUIContent guiContent) |
|
{ |
|
var rect = GUILayoutUtility.GetRect(guiContent, MaterialHeaderStyle); |
|
GUI.Label(rect, guiContent, MaterialHeaderStyleHighlight); |
|
GUI.Label(rect, guiContent, MaterialHeaderStyle); |
|
} |
|
|
|
static public void MaterialDrawSeparator() |
|
{ |
|
GUILayout.Space(4); |
|
if(EditorGUIUtility.isProSkin) |
|
DrawLine(new Color(.3f, .3f, .3f, 1f), 1); |
|
else |
|
DrawLine(new Color(.6f, .6f, .6f, 1f), 1); |
|
GUILayout.Space(4); |
|
} |
|
|
|
static public void MaterialDrawSeparatorDouble() |
|
{ |
|
GUILayout.Space(6); |
|
if(EditorGUIUtility.isProSkin) |
|
{ |
|
DrawLine(new Color(.1f, .1f, .1f, 1f), 1); |
|
DrawLine(new Color(.4f, .4f, .4f, 1f), 1); |
|
} |
|
else |
|
{ |
|
DrawLine(new Color(.3f, .3f, .3f, 1f), 1); |
|
DrawLine(new Color(.9f, .9f, .9f, 1f), 1); |
|
} |
|
GUILayout.Space(6); |
|
} |
|
|
|
//built-in console icons, also used in help box |
|
static Texture2D warnIcon; |
|
static Texture2D infoIcon; |
|
static Texture2D errorIcon; |
|
|
|
static public void HelpBoxRichText(Rect position, string message, MessageType msgType) |
|
{ |
|
Texture2D icon = null; |
|
switch(msgType) |
|
{ |
|
case MessageType.Warning: icon = warnIcon ?? (warnIcon = EditorGUIUtility.Load("console.warnicon") as Texture2D); break; |
|
case MessageType.Info: icon = infoIcon ?? (infoIcon = EditorGUIUtility.Load("console.infoicon") as Texture2D); break; |
|
case MessageType.Error: icon = errorIcon ?? (errorIcon = EditorGUIUtility.Load("console.erroricon") as Texture2D); break; |
|
} |
|
EditorGUI.LabelField(position, GUIContent.none, new GUIContent(message, icon), HelpBoxRichTextStyle); |
|
} |
|
|
|
static public void HelpBoxRichText(string message, MessageType msgType) |
|
{ |
|
Texture2D icon = null; |
|
switch(msgType) |
|
{ |
|
case MessageType.Warning: icon = warnIcon ?? (warnIcon = EditorGUIUtility.Load("console.warnicon") as Texture2D); break; |
|
case MessageType.Info: icon = infoIcon ?? (infoIcon = EditorGUIUtility.Load("console.infoicon") as Texture2D); break; |
|
case MessageType.Error: icon = errorIcon ?? (errorIcon = EditorGUIUtility.Load("console.erroricon") as Texture2D); break; |
|
} |
|
EditorGUILayout.LabelField(GUIContent.none, new GUIContent(message, icon), HelpBoxRichTextStyle); |
|
} |
|
} |
|
}
|
|
|