From f9b1eadd401d80655c096972c47a3d7496c4a548 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Tue, 24 Sep 2024 18:28:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84`Legend`=E7=9A=84`formatter`?= =?UTF-8?q?=E5=AF=B9=E5=A4=9ASerie=E7=9A=84=E6=94=AF=E6=8C=81=20(#332)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation~/zh/changelog.md | 1 + Runtime/Component/Legend/LegendHandler.cs | 9 ++++++--- Runtime/Serie/SeriesHelper.cs | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index cf184ab4..a6301656 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -76,6 +76,7 @@ slug: /changelog ## master +* (2024.09.24) 完善`Legend`的`formatter`对多Serie的支持 (#332) * (2024.09.22) 调整`Documentation`文档显示样式 * (2024.09.09) 增加`numericFormatter`对`date`和`time`的支持 * (2024.09.03) 完善`AreaStyle`的`origin`参数设置区域填充起始位置 diff --git a/Runtime/Component/Legend/LegendHandler.cs b/Runtime/Component/Legend/LegendHandler.cs index f42ec6e9..aa830414 100644 --- a/Runtime/Component/Legend/LegendHandler.cs +++ b/Runtime/Component/Legend/LegendHandler.cs @@ -87,11 +87,14 @@ namespace XCharts.Runtime ChartHelper.HideAllObject(legendObject); if (!legend.show) return; var textLimitInitFlag = false; + var isAnySerieColorByData = SeriesHelper.IsAnyColorByDataSerie(chart.series); for (int i = 0; i < datas.Count; i++) { if (!SeriesHelper.IsLegalLegendName(datas[i])) continue; string legendName = datas[i]; - var legendContent = GetFormatterContent(legend, i, datas[i]); + var serieIndex = isAnySerieColorByData ? 0 : i; + var dataIndex = isAnySerieColorByData ? i : 0; + var legendContent = GetFormatterContent(legend, dataIndex, datas[i], serieIndex); if (legend.textLimit.enable) legendContent = legend.textLimit.GetLimitContent(legendContent); var readIndex = chart.m_LegendRealShowName.IndexOf(datas[i]); @@ -158,7 +161,7 @@ namespace XCharts.Runtime legend.refreshComponent(); } - private string GetFormatterContent(Legend legend, int dataIndex, string category) + private string GetFormatterContent(Legend legend, int dataIndex, string category, int serieIndex) { #pragma warning disable 0618 if (string.IsNullOrEmpty(legend.formatter) && string.IsNullOrEmpty(legend.labelStyle.formatter)) @@ -168,7 +171,7 @@ namespace XCharts.Runtime var formatter = string.IsNullOrEmpty(legend.labelStyle.formatter) ? legend.formatter : legend.labelStyle.formatter; var content = formatter.Replace("{name}", category); content = content.Replace("{value}", category); - var serie = chart.GetSerie(0); + var serie = chart.GetSerie(serieIndex); FormatterHelper.ReplaceContent(ref content, dataIndex, legend.labelStyle.numericFormatter, serie, chart, category); return content; } diff --git a/Runtime/Serie/SeriesHelper.cs b/Runtime/Serie/SeriesHelper.cs index fc65b45b..ed6a0ab7 100644 --- a/Runtime/Serie/SeriesHelper.cs +++ b/Runtime/Serie/SeriesHelper.cs @@ -132,6 +132,21 @@ namespace XCharts.Runtime return false; } + /// + /// check if series has any serie which is color by data. + /// || 是否有任何一个系列是按数据颜色的。 + /// + /// + /// + public static bool IsAnyColorByDataSerie(List series) + { + foreach (var serie in series) + { + if (serie.defaultColorBy == SerieColorBy.Data) return true; + } + return false; + } + /// /// 获得上一个同堆叠且显示的serie。 ///