TMP_ColorGradientEditor.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using UnityEngine;
  2. using UnityEditor;
  3. using System.Collections;
  4. namespace TMPro.EditorUtilities
  5. {
  6. [CustomEditor(typeof(TMP_ColorGradient))]
  7. public class TMP_ColorGradientEditor : Editor
  8. {
  9. SerializedProperty m_ColorMode;
  10. SerializedProperty m_TopLeftColor;
  11. SerializedProperty m_TopRightColor;
  12. SerializedProperty m_BottomLeftColor;
  13. SerializedProperty m_BottomRightColor;
  14. void OnEnable()
  15. {
  16. m_ColorMode = serializedObject.FindProperty("colorMode");
  17. m_TopLeftColor = serializedObject.FindProperty("topLeft");
  18. m_TopRightColor = serializedObject.FindProperty("topRight");
  19. m_BottomLeftColor = serializedObject.FindProperty("bottomLeft");
  20. m_BottomRightColor = serializedObject.FindProperty("bottomRight");
  21. }
  22. public override void OnInspectorGUI()
  23. {
  24. serializedObject.Update();
  25. EditorGUI.BeginChangeCheck();
  26. EditorGUILayout.PropertyField(m_ColorMode, new GUIContent("Color Mode"));
  27. if (EditorGUI.EndChangeCheck())
  28. {
  29. switch ((ColorMode)m_ColorMode.enumValueIndex)
  30. {
  31. case ColorMode.Single:
  32. m_TopRightColor.colorValue = m_TopLeftColor.colorValue;
  33. m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue;
  34. m_BottomRightColor.colorValue = m_TopLeftColor.colorValue;
  35. break;
  36. case ColorMode.HorizontalGradient:
  37. m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue;
  38. m_BottomRightColor.colorValue = m_TopRightColor.colorValue;
  39. break;
  40. case ColorMode.VerticalGradient:
  41. m_TopRightColor.colorValue = m_TopLeftColor.colorValue;
  42. m_BottomRightColor.colorValue = m_BottomLeftColor.colorValue;
  43. break;
  44. }
  45. }
  46. Rect rect;
  47. switch ((ColorMode)m_ColorMode.enumValueIndex)
  48. {
  49. case ColorMode.Single:
  50. EditorGUI.BeginChangeCheck();
  51. rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
  52. EditorGUI.PrefixLabel(rect, new GUIContent("Colors"));
  53. rect.x += EditorGUIUtility.labelWidth;
  54. rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f);
  55. TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor);
  56. if (EditorGUI.EndChangeCheck())
  57. {
  58. m_TopRightColor.colorValue = m_TopLeftColor.colorValue;
  59. m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue;
  60. m_BottomRightColor.colorValue = m_TopLeftColor.colorValue;
  61. }
  62. break;
  63. case ColorMode.HorizontalGradient:
  64. rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
  65. EditorGUI.PrefixLabel(rect, new GUIContent("Colors"));
  66. rect.x += EditorGUIUtility.labelWidth;
  67. rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f;
  68. EditorGUI.BeginChangeCheck();
  69. TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor);
  70. if (EditorGUI.EndChangeCheck())
  71. {
  72. m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue;
  73. }
  74. rect.x += rect.width;
  75. EditorGUI.BeginChangeCheck();
  76. TMP_EditorUtility.DrawColorProperty(rect, m_TopRightColor);
  77. if (EditorGUI.EndChangeCheck())
  78. {
  79. m_BottomRightColor.colorValue = m_TopRightColor.colorValue;
  80. }
  81. break;
  82. case ColorMode.VerticalGradient:
  83. rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
  84. EditorGUI.PrefixLabel(rect, new GUIContent("Colors"));
  85. rect.x += EditorGUIUtility.labelWidth;
  86. rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f);
  87. rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2);
  88. EditorGUI.BeginChangeCheck();
  89. TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor);
  90. if (EditorGUI.EndChangeCheck())
  91. {
  92. m_TopRightColor.colorValue = m_TopLeftColor.colorValue;
  93. }
  94. rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
  95. rect.x += EditorGUIUtility.labelWidth;
  96. rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f);
  97. rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2);
  98. EditorGUI.BeginChangeCheck();
  99. TMP_EditorUtility.DrawColorProperty(rect, m_BottomLeftColor);
  100. if (EditorGUI.EndChangeCheck())
  101. {
  102. m_BottomRightColor.colorValue = m_BottomLeftColor.colorValue;
  103. }
  104. break;
  105. case ColorMode.FourCornersGradient:
  106. rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
  107. EditorGUI.PrefixLabel(rect, new GUIContent("Colors"));
  108. rect.x += EditorGUIUtility.labelWidth;
  109. rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f;
  110. rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2);
  111. TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor);
  112. rect.x += rect.width;
  113. TMP_EditorUtility.DrawColorProperty(rect, m_TopRightColor);
  114. rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
  115. rect.x += EditorGUIUtility.labelWidth;
  116. rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f;
  117. rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2);
  118. TMP_EditorUtility.DrawColorProperty(rect, m_BottomLeftColor);
  119. rect.x += rect.width;
  120. TMP_EditorUtility.DrawColorProperty(rect, m_BottomRightColor);
  121. break;
  122. }
  123. if (serializedObject.ApplyModifiedProperties())
  124. TMPro_EventManager.ON_COLOR_GRADIENT_PROPERTY_CHANGED(target as TMP_ColorGradient);
  125. }
  126. }
  127. }