using UnityEngine;  
 | 
using System.Collections;  
 | 
using UnityEngine.UI;  
 | 
#if  UNITY_EDITOR  
 | 
using UnityEditor;  
 | 
  
 | 
#endif  
 | 
  
 | 
[System.Serializable]  
 | 
[RequireComponent(typeof(Image))]  
 | 
public class ImageFitterText : MonoBehaviour  
 | 
{  
 | 
    [SerializeField] Text m_Target;  
 | 
    [SerializeField] Vector3 delta = Vector3.zero;  
 | 
    [SerializeField] Vector2 sizeDelta = Vector2.zero;  
 | 
    [SerializeField] bool LockWidth = false;  
 | 
    [SerializeField] bool LockHeight = false;  
 | 
    [SerializeField] bool fiterRealTxtWidth = false;  
 | 
    [SerializeField] bool minSizeDeltaHeight = false;  
 | 
    [SerializeField] float minHeightValue = 0f;  
 | 
    RectTransform m_RectTransform;  
 | 
    RectTransform m_Rt {  
 | 
        get {  
 | 
            if (m_RectTransform == null) {  
 | 
                m_RectTransform = this.transform as RectTransform;  
 | 
            }  
 | 
            return m_RectTransform;  
 | 
        }  
 | 
    }  
 | 
  
 | 
    public bool FiterRealTxtWidth  
 | 
    {  
 | 
        set  
 | 
        {  
 | 
            fiterRealTxtWidth = value;  
 | 
        }  
 | 
    }  
 | 
    Vector3 targetLocalPositon = Vector3.zero;  
 | 
    Vector2 targetSizeDelta = Vector2.zero;  
 | 
    private void OnEnable()  
 | 
    {  
 | 
        if (m_Target == null) {  
 | 
            enabled = false;  
 | 
        }  
 | 
        //m_Rt = this.transform as RectTransform;  
 | 
    }  
 | 
    private void LateUpdate()  
 | 
    {  
 | 
        Refresh();  
 | 
    }  
 | 
    public void Refresh()  
 | 
    {  
 | 
        if (m_Target == null) {  
 | 
            return;  
 | 
        }  
 | 
        Vector2 _sizeDelta = m_Target.rectTransform.sizeDelta + sizeDelta;  
 | 
        if (LockWidth) {  
 | 
            _sizeDelta.x = m_Rt.sizeDelta.x;  
 | 
        }  
 | 
        if (LockHeight) {  
 | 
            _sizeDelta.y = m_Rt.sizeDelta.y;  
 | 
        }  
 | 
        if (fiterRealTxtWidth) {  
 | 
            var _width = Mathf.Min(m_Target.rectTransform.rect.width, m_Target.preferredWidth);  
 | 
            _sizeDelta = m_Target.rectTransform.sizeDelta.SetX(_width) + sizeDelta;  
 | 
        }  
 | 
        targetSizeDelta = _sizeDelta;  
 | 
        targetLocalPositon = m_Target.transform.localPosition + delta;  
 | 
        if (minSizeDeltaHeight && targetSizeDelta.y < minHeightValue)  
 | 
        {  
 | 
            targetSizeDelta.y = minHeightValue;  
 | 
        }  
 | 
        if (targetSizeDelta != m_Rt.sizeDelta || targetLocalPositon != m_Rt.localPosition) {  
 | 
            m_Rt.sizeDelta = targetSizeDelta;  
 | 
            m_Rt.localPosition = targetLocalPositon;  
 | 
        }  
 | 
    }  
 | 
}  
 | 
#if UNITY_EDITOR  
 | 
[CustomEditor(typeof(ImageFitterText))]  
 | 
[CanEditMultipleObjects]  
 | 
public class ImageFitterTextEditor : Editor  
 | 
{  
 | 
    public ImageFitterText obj;  
 | 
    public override void OnInspectorGUI()  
 | 
    {  
 | 
        obj = target as ImageFitterText;  
 | 
        base.OnInspectorGUI();  
 | 
        EditorGUILayout.BeginHorizontal();  
 | 
        if (GUILayout.Button("Execute")) {  
 | 
            obj.Refresh();  
 | 
        }  
 | 
        EditorGUILayout.EndHorizontal();  
 | 
    }  
 | 
}  
 | 
#endif 
 |