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