UIGradientEditor.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using UnityEditor;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. namespace Coffee.UIEffects.Editors
  5. {
  6. /// <summary>
  7. /// UIEffect editor.
  8. /// </summary>
  9. [CustomEditor(typeof(UIGradient))]
  10. [CanEditMultipleObjects]
  11. public class UIGradientEditor : Editor
  12. {
  13. private static readonly GUIContent k_TextVerticalOffset = new GUIContent("Vertical Offset");
  14. private static readonly GUIContent k_TextHorizontalOffset = new GUIContent("Horizontal Offset");
  15. private static readonly GUIContent k_TextOffset = new GUIContent("Offset");
  16. private static readonly GUIContent k_TextLeft = new GUIContent("Left");
  17. private static readonly GUIContent k_TextRight = new GUIContent("Right");
  18. private static readonly GUIContent k_TextTop = new GUIContent("Top");
  19. private static readonly GUIContent k_TextBottom = new GUIContent("Bottom");
  20. private static readonly GUIContent k_TextColor1 = new GUIContent("Color 1");
  21. private static readonly GUIContent k_TextColor2 = new GUIContent("Color 2");
  22. private static readonly GUIContent k_TextDiagonalColor = new GUIContent("Diagonal Color");
  23. SerializedProperty _spDirection;
  24. SerializedProperty _spColor1;
  25. SerializedProperty _spColor2;
  26. SerializedProperty _spColor3;
  27. SerializedProperty _spColor4;
  28. SerializedProperty _spRotation;
  29. SerializedProperty _spOffset1;
  30. SerializedProperty _spOffset2;
  31. SerializedProperty _spIgnoreAspectRatio;
  32. SerializedProperty _spGradientStyle;
  33. SerializedProperty _spColorSpace;
  34. //################################
  35. // Public/Protected Members.
  36. //################################
  37. /// <summary>
  38. /// This function is called when the object becomes enabled and active.
  39. /// </summary>
  40. protected void OnEnable()
  41. {
  42. _spIgnoreAspectRatio = serializedObject.FindProperty("m_IgnoreAspectRatio");
  43. _spDirection = serializedObject.FindProperty("m_Direction");
  44. _spColor1 = serializedObject.FindProperty("m_Color1");
  45. _spColor2 = serializedObject.FindProperty("m_Color2");
  46. _spColor3 = serializedObject.FindProperty("m_Color3");
  47. _spColor4 = serializedObject.FindProperty("m_Color4");
  48. _spRotation = serializedObject.FindProperty("m_Rotation");
  49. _spOffset1 = serializedObject.FindProperty("m_Offset1");
  50. _spOffset2 = serializedObject.FindProperty("m_Offset2");
  51. _spGradientStyle = serializedObject.FindProperty("m_GradientStyle");
  52. _spColorSpace = serializedObject.FindProperty("m_ColorSpace");
  53. }
  54. public override void OnInspectorGUI()
  55. {
  56. serializedObject.Update();
  57. //================
  58. // Direction.
  59. //================
  60. EditorGUILayout.PropertyField(_spDirection);
  61. //================
  62. // Color.
  63. //================
  64. switch ((UIGradient.Direction) _spDirection.intValue)
  65. {
  66. case UIGradient.Direction.Horizontal:
  67. EditorGUILayout.PropertyField(_spColor1, k_TextLeft);
  68. EditorGUILayout.PropertyField(_spColor2, k_TextRight);
  69. break;
  70. case UIGradient.Direction.Vertical:
  71. EditorGUILayout.PropertyField(_spColor1, k_TextTop);
  72. EditorGUILayout.PropertyField(_spColor2, k_TextBottom);
  73. break;
  74. case UIGradient.Direction.Angle:
  75. EditorGUILayout.PropertyField(_spColor1, k_TextColor1);
  76. EditorGUILayout.PropertyField(_spColor2, k_TextColor2);
  77. break;
  78. case UIGradient.Direction.Diagonal:
  79. Rect r = EditorGUILayout.GetControlRect(false, 34);
  80. r = EditorGUI.PrefixLabel(r, k_TextDiagonalColor);
  81. float w = r.width / 2;
  82. EditorGUI.PropertyField(new Rect(r.x, r.y, w, 16), _spColor3, GUIContent.none);
  83. EditorGUI.PropertyField(new Rect(r.x + w, r.y, w, 16), _spColor4, GUIContent.none);
  84. EditorGUI.PropertyField(new Rect(r.x, r.y + 18, w, 16), _spColor1, GUIContent.none);
  85. EditorGUI.PropertyField(new Rect(r.x + w, r.y + 18, w, 16), _spColor2, GUIContent.none);
  86. break;
  87. }
  88. //================
  89. // Angle.
  90. //================
  91. if ((int) UIGradient.Direction.Angle <= _spDirection.intValue)
  92. {
  93. EditorGUILayout.PropertyField(_spRotation);
  94. }
  95. //================
  96. // Offset.
  97. //================
  98. if ((int) UIGradient.Direction.Diagonal == _spDirection.intValue)
  99. {
  100. EditorGUILayout.PropertyField(_spOffset1, k_TextVerticalOffset);
  101. EditorGUILayout.PropertyField(_spOffset2, k_TextHorizontalOffset);
  102. }
  103. else
  104. {
  105. EditorGUILayout.PropertyField(_spOffset1, k_TextOffset);
  106. }
  107. //================
  108. // Advanced options.
  109. //================
  110. EditorGUILayout.Space();
  111. EditorGUILayout.LabelField("Advanced Options", EditorStyles.boldLabel);
  112. EditorGUI.indentLevel++;
  113. {
  114. //if ((target as UIGradient).targetGraphic is Text)
  115. EditorGUILayout.PropertyField(_spGradientStyle);
  116. EditorGUILayout.PropertyField(_spColorSpace);
  117. EditorGUILayout.PropertyField(_spIgnoreAspectRatio);
  118. }
  119. EditorGUI.indentLevel--;
  120. serializedObject.ApplyModifiedProperties();
  121. }
  122. }
  123. }