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.
CrowdControl/Assets/3rd/Plugins/Smart-Inspector/Patches/AssetPreviewPatch.cs

78 lines
2.5 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using HarmonyLib;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
using Debug = UnityEngine.Debug;
namespace AV.Inspector
{
internal class AssetPreviewPatch : PatchBase
{
static InspectorPrefs prefs = InspectorPrefs.Loaded;
protected override IEnumerable<Patch> GetPatches()
{
var labelGUIType = EditorAssembly.GetType("UnityEditor.LabelGUI");
var assetBundleGUIType = EditorAssembly.GetType("UnityEditor.AssetBundleNameGUI");
var onLabelGUI = AccessTools.Method(labelGUIType, "OnLabelGUI");
var onAssetBundleGUI = AccessTools.Method(assetBundleGUIType, "OnAssetBundleNameGUI");
var drawPreviewAndLabels = AccessTools.Method(PropertyEditorRef.type, "DrawPreviewAndLabels");
yield return new Patch(onLabelGUI, nameof(_OnLabelGUI));
yield return new Patch(onAssetBundleGUI, nameof(_OnAssetBundleNameGUI), apply: Apply.OnGUI);
yield return new Patch(drawPreviewAndLabels, nameof(DrawPreviewAndLabels_), apply: Apply.OnGUI);
}
static bool _OnLabelGUI()
{
return prefs.showLabel;
}
static bool _OnAssetBundleNameGUI()
{
return prefs.showBundle;
}
static void DrawPreviewAndLabels_(EditorWindow __instance, bool ___m_HasPreview, bool ___m_PreviousPreviewExpandedState)
{
var footerInfo = __instance.rootVisualElement.Query(className: "unity-inspector-footer-info").First();
if (footerInfo == null)
return;
footerInfo.style.marginBottom = 0;
footerInfo.visible = true;
var showLabel = prefs.showLabel;
var showBundle = prefs.showBundle;
if (!prefs.enabled)
return;
if (!showLabel && !showBundle)
footerInfo.visible = ___m_HasPreview;
var expanded = ___m_PreviousPreviewExpandedState;
if (expanded)
{
var margin = 0;
if (!showLabel && !showBundle)
margin = -6;
else if (showLabel && !showBundle)
margin = -4;
else
margin = 0;
footerInfo.style.marginBottom = margin;
}
}
}
}