60 lines
2.9 KiB
C#
60 lines
2.9 KiB
C#
|
using UnityEditor;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace MPUIKIT.Editor {
|
||
|
[CustomPropertyDrawer(typeof(Rectangle))]
|
||
|
public class RectanglePropertyDrawer : PropertyDrawer{
|
||
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {
|
||
|
EditorGUI.BeginProperty(position, label, property);
|
||
|
{
|
||
|
Rect LabelRect = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight);
|
||
|
Rect RadiusVectorRect = new Rect(position.x,
|
||
|
position.y + EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing,
|
||
|
position.width, EditorGUIUtility.singleLineHeight);
|
||
|
|
||
|
SerializedProperty uniform = property.FindPropertyRelative("m_UniformCornerRadius");
|
||
|
SerializedProperty radius = property.FindPropertyRelative("m_CornerRadius");
|
||
|
|
||
|
MPEditorUtility.CornerRadiusModeGUI(LabelRect, ref uniform, new []{"Free", "Uniform"});
|
||
|
|
||
|
float floatVal = radius.vector4Value.x;
|
||
|
Vector4 vectorValue = radius.vector4Value;
|
||
|
float[] zw = new[] {vectorValue.w, vectorValue.z};
|
||
|
float[] xy = new[] {vectorValue.x, vectorValue.y};
|
||
|
|
||
|
EditorGUI.BeginChangeCheck();
|
||
|
{
|
||
|
EditorGUI.showMixedValue = radius.hasMultipleDifferentValues;
|
||
|
if (uniform.boolValue) {
|
||
|
floatVal = EditorGUI.FloatField(RadiusVectorRect, "Uniform Radius", floatVal);
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
|
||
|
EditorGUI.MultiFloatField(RadiusVectorRect, new [] {
|
||
|
new GUIContent("W"), new GUIContent("Z")}, zw );
|
||
|
RadiusVectorRect.y +=
|
||
|
EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
||
|
EditorGUI.MultiFloatField(RadiusVectorRect, new [] {
|
||
|
new GUIContent("X "), new GUIContent("Y")}, xy );
|
||
|
|
||
|
}
|
||
|
EditorGUI.showMixedValue = false;
|
||
|
}
|
||
|
if (EditorGUI.EndChangeCheck()) {
|
||
|
radius.vector4Value = uniform.boolValue
|
||
|
? new Vector4(floatVal, floatVal, floatVal, floatVal)
|
||
|
: new Vector4(xy[0], xy[1], zw[1], zw[0]);
|
||
|
}
|
||
|
}
|
||
|
EditorGUI.EndProperty();
|
||
|
}
|
||
|
|
||
|
public override float GetPropertyHeight(SerializedProperty property, GUIContent label) {
|
||
|
if (property.FindPropertyRelative("m_UniformCornerRadius").boolValue) {
|
||
|
return EditorGUIUtility.singleLineHeight * 2 + EditorGUIUtility.standardVerticalSpacing;
|
||
|
}
|
||
|
return EditorGUIUtility.singleLineHeight * 3 + EditorGUIUtility.standardVerticalSpacing * 2;
|
||
|
}
|
||
|
}
|
||
|
}
|