123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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;
- }
- }
- }
|