You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
4.8 KiB
C#
85 lines
4.8 KiB
C#
2 weeks ago
|
namespace Fusion.Editor {
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEditor;
|
||
|
using UnityEngine;
|
||
|
|
||
|
#if FUSION_DEV
|
||
|
[CreateAssetMenu(menuName = "Fusion/Editor Skin")]
|
||
|
#endif
|
||
|
partial class FusionEditorSkin : ScriptableObject {
|
||
|
|
||
|
private static FusionEditorSkin s_Instance;
|
||
|
|
||
|
public static FusionEditorSkin instance {
|
||
|
get {
|
||
|
if (s_Instance == null) {
|
||
|
s_Instance = CreateInstance<FusionEditorSkin>();
|
||
|
s_Instance.hideFlags = HideFlags.HideAndDontSave;
|
||
|
}
|
||
|
|
||
|
return s_Instance;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public GUISkin Skin;
|
||
|
|
||
|
public static GUIStyle HelpButtonStyle => instance.Skin.GetStyle(EditorGUIUtility.isProSkin ? "dark-help-button" : "light-help-button");
|
||
|
public static GUIStyle InlineBoxFullWidthStyle => instance.Skin.GetStyle("inline-box-full-width");
|
||
|
public static GUIStyle InlineBoxFullWidthScopeStyle => instance.Skin.GetStyle("inline-box-full-width-scope");
|
||
|
public static GUIStyle ScriptHeaderBackgroundStyle => instance.Skin.GetStyle("script-header-bg");
|
||
|
public static GUIStyle ScriptHeaderIconStyle => instance.Skin.GetStyle("script-header-icon");
|
||
|
public static GUIStyle ScriptHeaderLabelStyle => instance.Skin.GetStyle("script-header-label");
|
||
|
public static GUIStyle RichLabelStyle => instance.Skin.GetStyle(EditorGUIUtility.isProSkin ? "dark-rich-label" : "light-rich-label");
|
||
|
public static GUIStyle InlineSelectorStyle => instance.Skin.GetStyle("inline-selector");
|
||
|
public static GUIStyle OutlineBoxStyle => instance.Skin.GetStyle("outline-box");
|
||
|
|
||
|
|
||
|
public static Color HelpInlineBoxColor => EditorGUIUtility.isProSkin ? new Color(0.317f, 0.337f, 0.352f, 1.000f) : new Color(0.686f, 0.776f, 0.859f);
|
||
|
public static Color WarningInlineBoxColor => EditorGUIUtility.isProSkin ? new Color(0.36f, 0.33f, 0.22f, 1.00f) : new Color(0.98f, 0.94f, 0.80f, 0.90f);
|
||
|
public static Color ErrorInlineBoxColor => EditorGUIUtility.isProSkin ? new Color(0.40f, 0.15f, 0.10f, 1.00f) : new Color(0.9f, 0.70f, 0.70f, 1.00f);
|
||
|
|
||
|
public static readonly LazyAsset<Texture2D> InfoIcon = LazyAsset.Create(() => FindTextureOrThrow(EditorGUIUtility.isProSkin ? "d_console.infoicon.sml@2x" : "console.infoicon.sml@2x"));
|
||
|
public static readonly LazyAsset<Texture2D> WarningIcon = LazyAsset.Create(() => FindTextureOrThrow(EditorGUIUtility.isProSkin ? "d_console.warnicon.sml@2x" : "console.warnicon.sml@2x"));
|
||
|
public static readonly LazyAsset<Texture2D> ErrorIcon = LazyAsset.Create(() => FindTextureOrThrow(EditorGUIUtility.isProSkin ? "d_console.erroricon.sml@2x" : "console.erroricon.sml@2x"));
|
||
|
public static readonly LazyAsset<Texture2D> LoadStateIcon = LazyAsset.Create(() => FindTextureOrThrow("blendSampler"));
|
||
|
public static readonly LazyAsset<Texture2D> RefreshIcon = LazyAsset.Create(() => FindTextureOrThrow(EditorGUIUtility.isProSkin ? "d_Refresh@2x" : "Refresh@2x"));
|
||
|
|
||
|
public static readonly LazyGUIStyle OverlayLabelStyle = LazyGUIStyle.Create(_ => {
|
||
|
var result = new GUIStyle(EditorStyles.miniLabel);
|
||
|
result.alignment = TextAnchor.MiddleRight;
|
||
|
result.contentOffset = new Vector2(-2, 0);
|
||
|
result.normal.textColor = EditorGUIUtility.isProSkin ? new Color(255f / 255f, 221 / 255f, 0 / 255f, 1f) : Color.blue;
|
||
|
return result;
|
||
|
});
|
||
|
|
||
|
public static readonly LazyGUIStyle RawDataStyle = LazyGUIStyle.Create(_ => new GUIStyle(EditorStyles.textArea) { wordWrap = true });
|
||
|
|
||
|
private static Texture2D FindTextureOrThrow(string id) {
|
||
|
return EditorGUIUtility.FindTexture(id) ?? throw new ArgumentOutOfRangeException($"Could not find texture with id {id}");
|
||
|
}
|
||
|
|
||
|
private Dictionary<ScriptHeaderBackColor, Color> _scriptHeaderStyles = new() {
|
||
|
{ ScriptHeaderBackColor.None, new Color() },
|
||
|
{ ScriptHeaderBackColor.Gray, new Color(0.35f, 0.35f, 0.35f) },
|
||
|
{ ScriptHeaderBackColor.Blue, new Color(0.15f, 0.25f, 0.6f) },
|
||
|
{ ScriptHeaderBackColor.Red, new Color(0.5f, 0.1f, 0.1f) },
|
||
|
{ ScriptHeaderBackColor.Green, new Color(0.1f, 0.4f, 0.1f) },
|
||
|
{ ScriptHeaderBackColor.Orange, new Color(0.6f, 0.35f, 0.1f) },
|
||
|
{ ScriptHeaderBackColor.Black, new Color(0.1f, 0.1f, 0.1f) },
|
||
|
{ ScriptHeaderBackColor.Steel, new Color(0.32f, 0.35f, 0.38f) },
|
||
|
{ ScriptHeaderBackColor.Sand, new Color(0.38f, 0.35f, 0.32f) },
|
||
|
{ ScriptHeaderBackColor.Olive, new Color(0.25f, 0.33f, 0.15f) },
|
||
|
{ ScriptHeaderBackColor.Cyan, new Color(0.25f, 0.5f, 0.5f) },
|
||
|
{ ScriptHeaderBackColor.Violet, new Color(0.35f, 0.2f, 0.4f) },
|
||
|
};
|
||
|
|
||
|
public static Color GetScriptHeaderColor(ScriptHeaderBackColor settingsBackColor) {
|
||
|
if (instance._scriptHeaderStyles.TryGetValue(settingsBackColor, out var color)) {
|
||
|
return color;
|
||
|
}
|
||
|
return default;
|
||
|
}
|
||
|
}
|
||
|
}
|