| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | using System;using UnityEngine;namespace XCharts.Runtime{    public static class TooltipHelper    {        internal static void ResetTooltipParamsByItemFormatter(Tooltip tooltip, BaseChart chart)        {            if (!string.IsNullOrEmpty(tooltip.titleFormatter))            {                if (IsIgnoreFormatter(tooltip.titleFormatter))                {                    tooltip.context.data.title = string.Empty;                }                else                {                    tooltip.context.data.title = tooltip.titleFormatter;                    FormatterHelper.ReplaceContent(ref tooltip.context.data.title, -1,                        tooltip.numericFormatter, null, chart);                }            }            for (int i = tooltip.context.data.param.Count - 1; i >= 0; i--)            {                var param = tooltip.context.data.param[i];                if (IsIgnoreFormatter(param.itemFormatter))                {                    tooltip.context.data.param.RemoveAt(i);                }            }            foreach (var param in tooltip.context.data.param)            {                if (!string.IsNullOrEmpty(param.itemFormatter))                {                    param.columns.Clear();                    var content = param.itemFormatter;                    FormatterHelper.ReplaceSerieLabelContent(ref content,                        param.numericFormatter,                        param.dataCount,                        param.value,                        param.total,                        param.serieName,                        param.category,                        param.serieData.name,                        param.color,                        param.serieData,                        chart);                    foreach (var item in content.Split('|'))                    {                        param.columns.Add(item);                    }                }            }        }        public static bool IsIgnoreFormatter(string itemFormatter)        {            return "-".Equals(itemFormatter) ||"{i}".Equals(itemFormatter, StringComparison.CurrentCultureIgnoreCase);        }        public static void LimitInRect(Tooltip tooltip, Rect chartRect)        {            if (tooltip.view == null)                return;            var pos = tooltip.view.GetTargetPos();            if (pos.x + tooltip.context.width > chartRect.x + chartRect.width)            {                pos.x = tooltip.context.pointer.x - tooltip.context.width - tooltip.offset.x;            }            else if (pos.x < chartRect.x)            {                pos.x = tooltip.context.pointer.x - tooltip.context.width + Mathf.Abs(tooltip.offset.x);            }            if (pos.y - tooltip.context.height < chartRect.y)            {                pos.y = chartRect.y + tooltip.context.height;            }            if (pos.y > chartRect.y + chartRect.height)                pos.y = chartRect.y + chartRect.height;            tooltip.UpdateContentPos(pos, chartRect.width / 2, chartRect.height / 2);        }        public static string GetItemNumericFormatter(Tooltip tooltip, Serie serie, SerieData serieData)        {            var itemStyle = SerieHelper.GetItemStyle(serie, serieData);            if (!string.IsNullOrEmpty(itemStyle.numericFormatter)) return itemStyle.numericFormatter;            else return tooltip.numericFormatter;        }        public static Color32 GetLineColor(Tooltip tooltip, Color32 defaultColor)        {            var lineStyle = tooltip.lineStyle;            if (!ChartHelper.IsClearColor(lineStyle.color))            {                return lineStyle.GetColor();            }            else            {                var color = defaultColor;                ChartHelper.SetColorOpacity(ref color, lineStyle.opacity);                return color;            }        }    }}
 |