| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 | using System;using UnityEngine;using UnityEngine.UI;namespace XCharts.Runtime{    /// <summary>    /// Settings related to axis label.    /// ||坐标轴刻度标签的相关设置。    /// </summary>    [Serializable]    public class AxisLabel : LabelStyle    {        [SerializeField] private int m_Interval = 0;        [SerializeField] private bool m_Inside = false;        [SerializeField] private bool m_ShowAsPositiveNumber = false;        [SerializeField] private bool m_OnZero = false;        [SerializeField] private bool m_ShowStartLabel = true;        [SerializeField] private bool m_ShowEndLabel = true;        [SerializeField] private TextLimit m_TextLimit = new TextLimit();        /// <summary>        /// The display interval of the axis label.        /// ||坐标轴刻度标签的显示间隔,在类目轴中有效。0表示显示所有标签,1表示隔一个隔显示一个标签,以此类推。        /// </summary>        public int interval        {            get { return m_Interval; }            set { if (PropertyUtil.SetStruct(ref m_Interval, value)) SetComponentDirty(); }        }        /// <summary>        /// Set this to true so the axis labels face the inside direction.        /// ||刻度标签是否朝内,默认朝外。        /// </summary>        public bool inside        {            get { return m_Inside; }            set { if (PropertyUtil.SetStruct(ref m_Inside, value)) SetComponentDirty(); }        }        /// <summary>        /// Show negative number as positive number.        /// ||将负数数值显示为正数。一般和`Serie`的`showAsPositiveNumber`配合使用。        /// </summary>        public bool showAsPositiveNumber        {            get { return m_ShowAsPositiveNumber; }            set { if (PropertyUtil.SetStruct(ref m_ShowAsPositiveNumber, value)) SetComponentDirty(); }        }        /// <summary>        /// 刻度标签显示在0刻度上。        /// </summary>        public bool onZero        {            get { return m_OnZero; }            set { if (PropertyUtil.SetStruct(ref m_OnZero, value)) SetComponentDirty(); }        }        /// <summary>        /// Whether to display the first label.        /// ||是否显示第一个文本。        /// </summary>        public bool showStartLabel        {            get { return m_ShowStartLabel; }            set { if (PropertyUtil.SetStruct(ref m_ShowStartLabel, value)) SetComponentDirty(); }        }        /// <summary>        /// Whether to display the last label.        /// ||是否显示最后一个文本。        /// </summary>        public bool showEndLabel        {            get { return m_ShowEndLabel; }            set { if (PropertyUtil.SetStruct(ref m_ShowEndLabel, value)) SetComponentDirty(); }        }        /// <summary>        /// 文本限制。        /// </summary>        public TextLimit textLimit        {            get { return m_TextLimit; }            set { if (value != null) { m_TextLimit = value; SetComponentDirty(); } }        }        public override bool componentDirty { get { return m_ComponentDirty || m_TextLimit.componentDirty; } }        public override void ClearComponentDirty()        {            base.ClearComponentDirty();            textLimit.ClearComponentDirty();        }        public static AxisLabel defaultAxisLabel        {            get            {                return new AxisLabel()                {                    m_Show = true,                    m_Interval = 0,                    m_Inside = false,                    m_Distance = 8,                    m_TextStyle = new TextStyle(),                };            }        }        public new AxisLabel Clone()        {            var axisLabel = new AxisLabel            {                show = show,                formatter = formatter,                interval = interval,                inside = inside,                distance = distance,                numericFormatter = numericFormatter,                width = width,                height = height,                showStartLabel = showStartLabel,                showEndLabel = showEndLabel,                textLimit = textLimit.Clone()            };            axisLabel.textStyle.Copy(textStyle);            return axisLabel;        }        public void Copy(AxisLabel axisLabel)        {            show = axisLabel.show;            formatter = axisLabel.formatter;            interval = axisLabel.interval;            inside = axisLabel.inside;            distance = axisLabel.distance;            numericFormatter = axisLabel.numericFormatter;            width = axisLabel.width;            height = axisLabel.height;            showStartLabel = axisLabel.showStartLabel;            showEndLabel = axisLabel.showEndLabel;            textLimit.Copy(axisLabel.textLimit);            textStyle.Copy(axisLabel.textStyle);        }        public void SetRelatedText(ChartText txt, float labelWidth)        {            m_TextLimit.SetRelatedText(txt, labelWidth);        }        public override string GetFormatterContent(int labelIndex, string category)        {            if (string.IsNullOrEmpty(category))                return GetFormatterFunctionContent(labelIndex, category, category);            if (string.IsNullOrEmpty(m_Formatter))            {                return GetFormatterFunctionContent(labelIndex, category, m_TextLimit.GetLimitContent(category));            }            else            {                var content = m_Formatter;                FormatterHelper.ReplaceAxisLabelContent(ref content, category);                return GetFormatterFunctionContent(labelIndex, category, m_TextLimit.GetLimitContent(content));            }        }        public override string GetFormatterContent(int labelIndex, double value, double minValue, double maxValue, bool isLog = false)        {            if (showAsPositiveNumber && value < 0)            {                value = Math.Abs(value);            }            return base.GetFormatterContent(labelIndex, value, minValue, maxValue, isLog);        }        public bool IsNeedShowLabel(int index, int total)        {            var labelShow = show && (interval == 0 || index % (interval + 1) == 0);            if (labelShow)            {                if (!showStartLabel && index == 0) labelShow = false;                else if (!showEndLabel && index == total - 1) labelShow = false;            }            return labelShow;        }    }}
 |