mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-16 13:21:36 +00:00
86 lines
4.6 KiB
C#
86 lines
4.6 KiB
C#
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace XCharts
|
|
{
|
|
[CustomPropertyDrawer(typeof(Location), true)]
|
|
public class LocationDrawer : PropertyDrawer
|
|
{
|
|
public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label)
|
|
{
|
|
Rect drawRect = pos;
|
|
drawRect.height = EditorGUIUtility.singleLineHeight;
|
|
SerializedProperty align = prop.FindPropertyRelative("m_Align");
|
|
SerializedProperty left = prop.FindPropertyRelative("m_Left");
|
|
SerializedProperty right = prop.FindPropertyRelative("m_Right");
|
|
SerializedProperty top = prop.FindPropertyRelative("m_Top");
|
|
SerializedProperty bottom = prop.FindPropertyRelative("m_Bottom");
|
|
EditorGUI.PropertyField(drawRect, align, new GUIContent("Location"));
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
++EditorGUI.indentLevel;
|
|
switch ((Location.Align)align.enumValueIndex)
|
|
{
|
|
case Location.Align.TopCenter:
|
|
EditorGUI.PropertyField(drawRect, top);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
break;
|
|
case Location.Align.TopLeft:
|
|
EditorGUI.PropertyField(drawRect, top);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
EditorGUI.PropertyField(drawRect, left);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
break;
|
|
case Location.Align.TopRight:
|
|
EditorGUI.PropertyField(drawRect, top);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
EditorGUI.PropertyField(drawRect, right);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
break;
|
|
case Location.Align.BottomCenter:
|
|
EditorGUI.PropertyField(drawRect, bottom);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
break;
|
|
case Location.Align.BottomLeft:
|
|
EditorGUI.PropertyField(drawRect, bottom);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
EditorGUI.PropertyField(drawRect, left);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
break;
|
|
case Location.Align.BottomRight:
|
|
EditorGUI.PropertyField(drawRect, bottom);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
EditorGUI.PropertyField(drawRect, right);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
break;
|
|
case Location.Align.Center:
|
|
break;
|
|
case Location.Align.CenterLeft:
|
|
EditorGUI.PropertyField(drawRect, left);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
break;
|
|
case Location.Align.CenterRight:
|
|
EditorGUI.PropertyField(drawRect, right);
|
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
|
break;
|
|
}
|
|
--EditorGUI.indentLevel;
|
|
}
|
|
|
|
public override float GetPropertyHeight(SerializedProperty prop, GUIContent label)
|
|
{
|
|
SerializedProperty align = prop.FindPropertyRelative("m_Align");
|
|
switch ((Location.Align)align.enumValueIndex)
|
|
{
|
|
case Location.Align.Center:
|
|
return 1 * EditorGUIUtility.singleLineHeight + 1 * EditorGUIUtility.standardVerticalSpacing;
|
|
case Location.Align.TopCenter:
|
|
case Location.Align.BottomCenter:
|
|
case Location.Align.CenterLeft:
|
|
case Location.Align.CenterRight:
|
|
return 2 * EditorGUIUtility.singleLineHeight + 2 * EditorGUIUtility.standardVerticalSpacing;
|
|
default:
|
|
return 3 * EditorGUIUtility.singleLineHeight + 3 * EditorGUIUtility.standardVerticalSpacing;
|
|
}
|
|
}
|
|
}
|
|
} |