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(path); } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static EditorWindow[] GetAllOpenEditorWindows() { return Resources.FindObjectsOfTypeAll(); } } }