using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
namespace TMPro.EditorUtilities
{
[CustomEditor(typeof(TextMeshProUGUI), true), CanEditMultipleObjects]
public class TMP_EditorPanelUI : TMP_BaseEditorPanel
{
static readonly GUIContent k_RaycastTargetLabel = new GUIContent("Raycast Target", "Whether the text blocks raycasts from the Graphic Raycaster.");
static readonly GUIContent k_MaskableLabel = new GUIContent("Maskable", "Determines if the text object will be affected by UI Mask.");
SerializedProperty m_RaycastTargetProp;
private SerializedProperty m_MaskableProp;
protected override void OnEnable()
{
base.OnEnable();
m_RaycastTargetProp = serializedObject.FindProperty("m_RaycastTarget");
m_MaskableProp = serializedObject.FindProperty("m_Maskable");
}
protected override void DrawExtraSettings()
{
Rect rect = EditorGUILayout.GetControlRect(false, 24);
if (GUI.Button(rect, new GUIContent("Extra Settings"), TMP_UIStyleManager.sectionHeader))
Foldout.extraSettings = !Foldout.extraSettings;
GUI.Label(rect, (Foldout.extraSettings ? k_UiStateLabel[0] : k_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
if (Foldout.extraSettings)
{
//EditorGUI.indentLevel += 1;
DrawMargins();
DrawGeometrySorting();
DrawIsTextObjectScaleStatic();
DrawRichText();
DrawRaycastTarget();
DrawMaskable();
DrawParsing();
DrawSpriteAsset();
DrawStyleSheet();
DrawKerning();
DrawPadding();
//EditorGUI.indentLevel -= 1;
}
}
protected void DrawRaycastTarget()
{
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(m_RaycastTargetProp, k_RaycastTargetLabel);
if (EditorGUI.EndChangeCheck())
{
// Change needs to propagate to the child sub objects.
Graphic[] graphicComponents = m_TextComponent.GetComponentsInChildren();
for (int i = 1; i < graphicComponents.Length; i++)
graphicComponents[i].raycastTarget = m_RaycastTargetProp.boolValue;
m_HavePropertiesChanged = true;
}
}
protected void DrawMaskable()
{
if (m_MaskableProp == null)
return;
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(m_MaskableProp, k_MaskableLabel);
if (EditorGUI.EndChangeCheck())
{
m_TextComponent.maskable = m_MaskableProp.boolValue;
// Change needs to propagate to the child sub objects.
MaskableGraphic[] maskableGraphics = m_TextComponent.GetComponentsInChildren();
for (int i = 1; i < maskableGraphics.Length; i++)
maskableGraphics[i].maskable = m_MaskableProp.boolValue;
m_HavePropertiesChanged = true;
}
}
// Method to handle multi object selection
protected override bool IsMixSelectionTypes()
{
GameObject[] objects = Selection.gameObjects;
if (objects.Length > 1)
{
for (int i = 0; i < objects.Length; i++)
{
if (objects[i].GetComponent() == null)
return true;
}
}
return false;
}
protected override void OnUndoRedo()
{
int undoEventId = Undo.GetCurrentGroup();
int lastUndoEventId = s_EventId;
if (undoEventId != lastUndoEventId)
{
for (int i = 0; i < targets.Length; i++)
{
//Debug.Log("Undo & Redo Performed detected in Editor Panel. Event ID:" + Undo.GetCurrentGroup());
TMPro_EventManager.ON_TEXTMESHPRO_UGUI_PROPERTY_CHANGED(true, targets[i] as TextMeshProUGUI);
s_EventId = undoEventId;
}
}
}
}
}