RectanglePropertyDrawer.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using UnityEditor;
  2. using UnityEngine;
  3. namespace MPUIKIT.Editor {
  4. [CustomPropertyDrawer(typeof(Rectangle))]
  5. public class RectanglePropertyDrawer : PropertyDrawer{
  6. public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {
  7. EditorGUI.BeginProperty(position, label, property);
  8. {
  9. Rect LabelRect = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight);
  10. Rect RadiusVectorRect = new Rect(position.x,
  11. position.y + EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing,
  12. position.width, EditorGUIUtility.singleLineHeight);
  13. SerializedProperty uniform = property.FindPropertyRelative("m_UniformCornerRadius");
  14. SerializedProperty radius = property.FindPropertyRelative("m_CornerRadius");
  15. MPEditorUtility.CornerRadiusModeGUI(LabelRect, ref uniform, new []{"Free", "Uniform"});
  16. float floatVal = radius.vector4Value.x;
  17. Vector4 vectorValue = radius.vector4Value;
  18. float[] zw = new[] {vectorValue.w, vectorValue.z};
  19. float[] xy = new[] {vectorValue.x, vectorValue.y};
  20. EditorGUI.BeginChangeCheck();
  21. {
  22. EditorGUI.showMixedValue = radius.hasMultipleDifferentValues;
  23. if (uniform.boolValue) {
  24. floatVal = EditorGUI.FloatField(RadiusVectorRect, "Uniform Radius", floatVal);
  25. }
  26. else {
  27. EditorGUI.MultiFloatField(RadiusVectorRect, new [] {
  28. new GUIContent("W"), new GUIContent("Z")}, zw );
  29. RadiusVectorRect.y +=
  30. EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
  31. EditorGUI.MultiFloatField(RadiusVectorRect, new [] {
  32. new GUIContent("X "), new GUIContent("Y")}, xy );
  33. }
  34. EditorGUI.showMixedValue = false;
  35. }
  36. if (EditorGUI.EndChangeCheck()) {
  37. radius.vector4Value = uniform.boolValue
  38. ? new Vector4(floatVal, floatVal, floatVal, floatVal)
  39. : new Vector4(xy[0], xy[1], zw[1], zw[0]);
  40. }
  41. }
  42. EditorGUI.EndProperty();
  43. }
  44. public override float GetPropertyHeight(SerializedProperty property, GUIContent label) {
  45. if (property.FindPropertyRelative("m_UniformCornerRadius").boolValue) {
  46. return EditorGUIUtility.singleLineHeight * 2 + EditorGUIUtility.standardVerticalSpacing;
  47. }
  48. return EditorGUIUtility.singleLineHeight * 3 + EditorGUIUtility.standardVerticalSpacing * 2;
  49. }
  50. }
  51. }