123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- using UnityEngine;
- using UnityEditor;
- using System.Collections;
- namespace TMPro.EditorUtilities
- {
- [CustomEditor(typeof(TextContainer)), CanEditMultipleObjects]
- public class TMPro_TextContainerEditor : Editor
- {
-
- // Serialized Properties
- private SerializedProperty anchorPosition_prop;
- private SerializedProperty pivot_prop;
- private SerializedProperty rectangle_prop;
- private SerializedProperty margins_prop;
-
- private TextContainer m_textContainer;
- //private Transform m_transform;
- //private Vector3[] m_Rect_handlePoints = new Vector3[4];
- //private Vector3[] m_Margin_handlePoints = new Vector3[4];
- //private Vector2 m_anchorPosition;
- //private Vector3 m_mousePreviousPOS;
- //private Vector2 m_previousStartPOS;
- //private int m_mouseDragFlag = 0;
- //private static Transform m_visualHelper;
- void OnEnable()
- {
-
- // Serialized Properties
- anchorPosition_prop = serializedObject.FindProperty("m_anchorPosition");
- pivot_prop = serializedObject.FindProperty("m_pivot");
- rectangle_prop = serializedObject.FindProperty("m_rect");
- margins_prop = serializedObject.FindProperty("m_margins");
- m_textContainer = (TextContainer)target;
- //m_transform = m_textContainer.transform;
-
- /*
- if (m_visualHelper == null)
- {
- m_visualHelper = GameObject.CreatePrimitive(PrimitiveType.Sphere).transform;
- m_visualHelper.localScale = new Vector3(0.25f, 0.25f, 0.25f);
- }
- */
- }
- void OnDisable()
- {
- /*
- if (m_visualHelper != null)
- DestroyImmediate (m_visualHelper.gameObject);
- */
- }
-
- public override void OnInspectorGUI()
- {
- serializedObject.Update();
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(anchorPosition_prop);
- if (anchorPosition_prop.enumValueIndex == 9)
- {
- EditorGUI.indentLevel += 1;
- EditorGUILayout.PropertyField(pivot_prop, new GUIContent("Pivot Position"));
- EditorGUI.indentLevel -= 1;
- }
- DrawDimensionProperty(rectangle_prop, "Dimensions");
- DrawMaginProperty(margins_prop, "Margins");
- if (EditorGUI.EndChangeCheck())
- {
- // Re-compute pivot position when changes are made.
- if (anchorPosition_prop.enumValueIndex != 9)
- pivot_prop.vector2Value = GetAnchorPosition(anchorPosition_prop.enumValueIndex);
-
- m_textContainer.hasChanged = true;
- }
- serializedObject.ApplyModifiedProperties();
- EditorGUILayout.Space();
- }
- private void DrawDimensionProperty(SerializedProperty property, string label)
- {
- float old_LabelWidth = EditorGUIUtility.labelWidth;
- float old_FieldWidth = EditorGUIUtility.fieldWidth;
-
- Rect rect = EditorGUILayout.GetControlRect(false, 18);
- Rect pos0 = new Rect(rect.x, rect.y + 2, rect.width, 18);
- float width = rect.width + 3;
- pos0.width = old_LabelWidth;
- GUI.Label(pos0, label);
- Rect rectangle = property.rectValue;
-
- float width_B = width - old_LabelWidth;
- float fieldWidth = width_B / 4;
- pos0.width = fieldWidth - 5;
- pos0.x = old_LabelWidth + 15;
- GUI.Label(pos0, "Width");
- pos0.x += fieldWidth;
- rectangle.width = EditorGUI.FloatField(pos0, GUIContent.none, rectangle.width);
- pos0.x += fieldWidth;
- GUI.Label(pos0, "Height");
- pos0.x += fieldWidth;
- rectangle.height = EditorGUI.FloatField(pos0, GUIContent.none, rectangle.height);
- property.rectValue = rectangle;
- EditorGUIUtility.labelWidth = old_LabelWidth;
- EditorGUIUtility.fieldWidth = old_FieldWidth;
- }
- private void DrawMaginProperty(SerializedProperty property, string label)
- {
- float old_LabelWidth = EditorGUIUtility.labelWidth;
- float old_FieldWidth = EditorGUIUtility.fieldWidth;
-
- Rect rect = EditorGUILayout.GetControlRect(false, 2 * 18);
- Rect pos0 = new Rect(rect.x, rect.y + 2, rect.width, 18);
- float width = rect.width + 3;
- pos0.width = old_LabelWidth;
- GUI.Label(pos0, label);
- //Vector4 vec = property.vector4Value;
- Vector4 vec = Vector4.zero;
- vec.x = property.FindPropertyRelative("x").floatValue;
- vec.y = property.FindPropertyRelative("y").floatValue;
- vec.z = property.FindPropertyRelative("z").floatValue;
- vec.w = property.FindPropertyRelative("w").floatValue;
- float widthB = width - old_LabelWidth;
- float fieldWidth = widthB / 4;
- pos0.width = fieldWidth - 5;
- // Labels
- pos0.x = old_LabelWidth + 15;
- GUI.Label(pos0, "Left");
- pos0.x += fieldWidth;
- GUI.Label(pos0, "Top");
- pos0.x += fieldWidth;
- GUI.Label(pos0, "Right");
- pos0.x += fieldWidth;
- GUI.Label(pos0, "Bottom");
- pos0.y += 18;
- pos0.x = old_LabelWidth + 15;
- vec.x = EditorGUI.FloatField(pos0, GUIContent.none, vec.x);
- pos0.x += fieldWidth;
- vec.y = EditorGUI.FloatField(pos0, GUIContent.none, vec.y);
- pos0.x += fieldWidth;
- vec.z = EditorGUI.FloatField(pos0, GUIContent.none, vec.z);
- pos0.x += fieldWidth;
- vec.w = EditorGUI.FloatField(pos0, GUIContent.none, vec.w);
- //property.vector4Value = vec;
- property.FindPropertyRelative("x").floatValue = vec.x;
- property.FindPropertyRelative("y").floatValue = vec.y;
- property.FindPropertyRelative("z").floatValue = vec.z;
- property.FindPropertyRelative("w").floatValue = vec.w;
- EditorGUIUtility.labelWidth = old_LabelWidth;
- EditorGUIUtility.fieldWidth = old_FieldWidth;
- }
- Vector2 GetAnchorPosition(int index)
- {
- Vector2 anchorPosition = Vector2.zero;
-
- switch (index)
- {
- case 0: // TOP LEFT
- anchorPosition = new Vector2(0, 1);
- break;
- case 1: // TOP
- anchorPosition = new Vector2(0.5f, 1);
- break;
- case 2: // TOP RIGHT
- anchorPosition = new Vector2(1, 1);
- break;
- case 3: // LEFT
- anchorPosition = new Vector2(0, 0.5f);
- break;
- case 4: // MIDDLE
- anchorPosition = new Vector2(0.5f, 0.5f);
- break;
- case 5: // RIGHT
- anchorPosition = new Vector2(1, 0.5f);
- break;
- case 6: // BOTTOM LEFT
- anchorPosition = new Vector2(0, 0);
- break;
- case 7: // BOTTOM
- anchorPosition = new Vector2(0.5f, 0);
- break;
- case 8: // BOTTOM RIGHT
- anchorPosition = new Vector2(1, 0);
- break;
- }
-
- return anchorPosition;
- }
- }
- }
|