Rasagar/Library/PackageCache/com.unity.ugui/Editor/TMP/TMPro_TextContainerEditor.cs
2024-08-26 23:07:20 +03:00

236 lines
7.6 KiB
C#

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;
}
}
}