1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- using UnityEditor;
- using UnityEngine;
- namespace MPUIKIT.Editor {
- [CustomPropertyDrawer(typeof(GradientEffect))]
- public class GradeintEffectPropertyDrawer : PropertyDrawer {
- public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {
- EditorGUI.BeginProperty(position, label, property);
- {
- SerializedProperty Enabled = property.FindPropertyRelative("m_Enabled");
- bool enabled = Enabled.boolValue;
- SerializedProperty gradientType = property.FindPropertyRelative("m_GradientType");
- GradientType gradType = (GradientType) gradientType.enumValueIndex;
- SerializedProperty gradient = property.FindPropertyRelative("m_Gradient");
- SerializedProperty rotation = property.FindPropertyRelative("m_Rotation");
- SerializedProperty cornerColors = property.FindPropertyRelative("m_CornerGradientColors");
- Rect line = position;
- line.height = EditorGUIUtility.singleLineHeight;
- EditorGUI.BeginChangeCheck();
- {
- EditorGUI.showMixedValue = Enabled.hasMultipleDifferentValues;
- enabled = EditorGUI.Toggle(line, "Gradient", enabled);
- EditorGUI.showMixedValue = false;
- if (enabled) {
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
-
- EditorGUI.showMixedValue = gradientType.hasMultipleDifferentValues;
- gradType = (GradientType) EditorGUI.EnumPopup(line, "Type", gradType);
- EditorGUI.showMixedValue = false;
- }
- }
- if (EditorGUI.EndChangeCheck()) {
- Enabled.boolValue = enabled;
- gradientType.enumValueIndex = (int) gradType;
- }
- if (enabled) {
- if (gradType == GradientType.Corner) {
- if (cornerColors.arraySize != 4)
- cornerColors.arraySize = 4;
-
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- float colFieldWidth = line.width / 2f - 5f;
- line.width = colFieldWidth;
- EditorGUI.PropertyField(line, cornerColors.GetArrayElementAtIndex(0), GUIContent.none);
- line.x += colFieldWidth + 10;
- EditorGUI.PropertyField(line, cornerColors.GetArrayElementAtIndex(1), GUIContent.none);
- line.x -= colFieldWidth + 10;
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- EditorGUI.PropertyField(line, cornerColors.GetArrayElementAtIndex(2), GUIContent.none);
- line.x += colFieldWidth + 10;
- EditorGUI.PropertyField(line, cornerColors.GetArrayElementAtIndex(3), GUIContent.none);
- line.x -= colFieldWidth + 10;
- line.width = colFieldWidth * 2 + 10;
- }
- else {
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- EditorGUI.showMixedValue = gradient.hasMultipleDifferentValues;
- EditorGUI.PropertyField(line, gradient, false);
- if (gradType == GradientType.Linear) {
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- EditorGUI.showMixedValue = rotation.hasMultipleDifferentValues;
- EditorGUI.PropertyField(line, rotation, new GUIContent("Rotation"));
- }
- EditorGUI.showMixedValue = false;
- }
- }
- }
- EditorGUI.EndProperty();
- }
- public override float GetPropertyHeight(SerializedProperty property, GUIContent label) {
- SerializedProperty enabled = property.FindPropertyRelative("m_Enabled");
- if (enabled.boolValue) {
- SerializedProperty gradientMode = property.FindPropertyRelative("m_GradientType");
- if (gradientMode.enumValueIndex == (int) GradientType.Radial) {
- return EditorGUIUtility.singleLineHeight * 3 + EditorGUIUtility.standardVerticalSpacing * 2;
- }
- return EditorGUIUtility.singleLineHeight * 4 + EditorGUIUtility.standardVerticalSpacing * 3;
- }
- return EditorGUIUtility.singleLineHeight;
- }
- }
- }
|