module-editoruitoolkitcusto.../Editor/EditorUIToolkitCustomization.cs

71 lines
2 KiB
C#

using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace Module.UIToolkit.Editor
{
internal static class EditorUIToolkitCustomization
{
private static StyleSheet _ussCollectionView;
[InitializeOnLoadMethod]
private static void Initialize()
{
EditorApplication.update -= EditorTick;
EditorApplication.update += EditorTick;
}
private static void EditorTick()
{
ApplyChanges();
}
private static void InitializeStyleSheets()
{
if (_ussCollectionView == null)
_ussCollectionView = FindStyleSheet("editor-collection-view");
}
internal static void ApplyChanges()
{
InitializeStyleSheets();
var settings = Settings.Load();
var windows = GetAllOpenEditorWindows();
for (var i = 0; i < windows.Length; i++)
{
var window = windows[i];
var ve = window.rootVisualElement;
if (ve == null)
continue;
if (_ussCollectionView != null)
{
if (settings.listViewDisableMaxHeight)
ve.styleSheets.Add(_ussCollectionView);
else
ve.styleSheets.Remove(_ussCollectionView);
}
}
}
private static StyleSheet FindStyleSheet(string name)
{
var guids = AssetDatabase.FindAssets($"t:{nameof(StyleSheet)} {name}");
if (guids.Length == 0)
return null;
var path = AssetDatabase.GUIDToAssetPath(guids[0]);
return AssetDatabase.LoadAssetAtPath<StyleSheet>(path);
}
private static EditorWindow[] GetAllOpenEditorWindows()
{
return Resources.FindObjectsOfTypeAll<EditorWindow>();
}
}
}