44 lines
1.4 KiB
C#

using UnityEditor;
using UnityEngine;
namespace NiloToon.NiloToonURP
{
#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(HelpBoxAttribute))]
public class HelpBoxDrawer : DecoratorDrawer
{
private float cachedCurrentViewWidth = -1;
public override void OnGUI(Rect position)
{
// Cache the current view width when OnGUI is called
cachedCurrentViewWidth = EditorGUIUtility.currentViewWidth;
HelpBoxAttribute helpBoxAttr = attribute as HelpBoxAttribute;
if (helpBoxAttr != null)
{
position.height = GetHelpBoxHeight(helpBoxAttr.Text, position.width);
EditorGUI.HelpBox(position, helpBoxAttr.Text, helpBoxAttr.Type);
}
}
public override float GetHeight()
{
HelpBoxAttribute helpBoxAttr = attribute as HelpBoxAttribute;
if (helpBoxAttr != null)
{
// Use the cached current view width instead of accessing it directly
float width = cachedCurrentViewWidth;
return GetHelpBoxHeight(helpBoxAttr.Text, width) + 5; // Extra padding
}
return base.GetHeight();
}
private static float GetHelpBoxHeight(string text, float width)
{
GUIStyle style = "helpbox";
return style.CalcHeight(new GUIContent(text), width);
}
}
#endif
}