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

72 lines
2.1 KiB
C#

using System.Runtime.CompilerServices;
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();
}
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 || _ussCollectionView == null)
continue;
if (settings.collectionViewDisableMaxHeight)
ve.styleSheets.Add(_ussCollectionView);
else
ve.styleSheets.Remove(_ussCollectionView);
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static void InitializeStyleSheets()
{
if (_ussCollectionView == null)
_ussCollectionView = FindStyleSheet("editor-collection-view");
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
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);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static EditorWindow[] GetAllOpenEditorWindows()
{
return Resources.FindObjectsOfTypeAll<EditorWindow>();
}
}
}