#if UNITY_EDITOR using UnityEngine; using UnityEditor; namespace Amanotes.Core { [CustomPropertyDrawer(typeof(Size2D))] public class Size2DDrawer : PropertyDrawer { static bool showGizmoSettings = false; public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { EditorGUI.BeginProperty(position, GUIContent.none, property); var sizeProperty = property.FindPropertyRelative("_size"); var pivotProperty = property.FindPropertyRelative("pivot"); var useZProperty = property.FindPropertyRelative("useZ"); var gizmoModeProperty = property.FindPropertyRelative("gizmoMode"); var gizmoColorProperty = property.FindPropertyRelative("gizmoColor"); // Main foldout with size field on the same line var foldoutRect = new Rect(position.x, position.y, EditorGUIUtility.labelWidth, EditorGUIUtility.singleLineHeight); var sizeRect = new Rect(position.x + EditorGUIUtility.labelWidth, position.y, position.width - EditorGUIUtility.labelWidth, EditorGUIUtility.singleLineHeight); showGizmoSettings = EditorGUI.Foldout(foldoutRect, showGizmoSettings, label); EditorGUI.PropertyField(sizeRect, sizeProperty, GUIContent.none); // Show gizmo settings when expanded if (showGizmoSettings) { var yOffset = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; var currentY = position.y + yOffset; // Pivot field - draw manually to avoid wrapping var pivotLabelRect = new Rect(position.x, currentY, EditorGUIUtility.labelWidth, EditorGUIUtility.singleLineHeight); var pivotFieldRect = new Rect(position.x + EditorGUIUtility.labelWidth, currentY, position.width - EditorGUIUtility.labelWidth, EditorGUIUtility.singleLineHeight); EditorGUI.LabelField(pivotLabelRect, "Pivot"); EditorGUI.PropertyField(pivotFieldRect, pivotProperty, GUIContent.none); currentY += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; // Use Z field var useZRect = new Rect(position.x, currentY, position.width, EditorGUIUtility.singleLineHeight); EditorGUI.PropertyField(useZRect, useZProperty); currentY += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; // Gizmo Mode field var gizmoModeRect = new Rect(position.x, currentY, position.width, EditorGUIUtility.singleLineHeight); EditorGUI.PropertyField(gizmoModeRect, gizmoModeProperty); currentY += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; // Gizmo Color field var gizmoColorRect = new Rect(position.x, currentY, position.width, EditorGUIUtility.singleLineHeight); EditorGUI.PropertyField(gizmoColorRect, gizmoColorProperty); } EditorGUI.EndProperty(); } public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { var height = EditorGUIUtility.singleLineHeight; if (showGizmoSettings) { height += (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing) * 4; } return height; } } } #endif