From e0974fffbe51bcd85aa9440f5e2a8e3b86791f09 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Sat, 29 Oct 2022 18:25:20 +0800 Subject: [PATCH] =?UTF-8?q?[feature]=20=E5=A2=9E=E5=8A=A0`Serie`=E7=9A=84`?= =?UTF-8?q?markColor`=E5=8F=AF=E8=AE=BE=E7=BD=AE=E6=A0=87=E8=AF=86?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E7=94=A8=E4=BA=8E`Legend`=E5=92=8C`Tooltip`?= =?UTF-8?q?=E7=9A=84=E5=B1=95=E7=A4=BA=20(#229)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + Editor/Series/BarEditor.cs | 1 + Editor/Series/LineEditor.cs | 1 + Runtime/Internal/BaseChart.API.cs | 19 +++++++++++++++++++ .../Serie/Candlestick/CandlestickHandler.cs | 2 +- .../SimplifiedCandlestickHandler.cs | 2 +- Runtime/Serie/Scatter/BaseScatterHandler.cs | 2 +- Runtime/Serie/Serie.cs | 10 ++++++++++ Runtime/Serie/SerieHandler.cs | 2 +- Runtime/Serie/SeriesHelper.cs | 13 ++++++++++--- 10 files changed, 46 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c72c81bc..5f3c238b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ ## master +* (2022.10.29) 增加`Serie`的`markColor`可设置标识颜色用于`Legend`和`Tooltip`的展示 (#229) * (2022.10.26) 增加`RadarCoord`的`startAngle`可设置`Radar`起始角度 * (2022.10.21) 修复`Chart`在受`Layout`控制时`Label`显示不正常的问题 (#231) * (2022.10.21) 修复`Unity2019.2`上的兼容问题 diff --git a/Editor/Series/BarEditor.cs b/Editor/Series/BarEditor.cs index 1a078531..0e16bccc 100644 --- a/Editor/Series/BarEditor.cs +++ b/Editor/Series/BarEditor.cs @@ -47,6 +47,7 @@ namespace XCharts.Editor PropertyField("m_Large"); PropertyField("m_LargeThreshold"); PropertyField("m_PlaceHolder"); + PropertyField("m_MarkColor"); }); PropertyField("m_ItemStyle"); PropertyField("m_Animation"); diff --git a/Editor/Series/LineEditor.cs b/Editor/Series/LineEditor.cs index 95b2e67c..91f6fe62 100644 --- a/Editor/Series/LineEditor.cs +++ b/Editor/Series/LineEditor.cs @@ -37,6 +37,7 @@ namespace XCharts.Editor PropertyField("m_ShowAsPositiveNumber"); PropertyField("m_Large"); PropertyField("m_LargeThreshold"); + PropertyField("m_MarkColor"); }); PropertyField("m_Symbol"); PropertyField("m_LineStyle"); diff --git a/Runtime/Internal/BaseChart.API.cs b/Runtime/Internal/BaseChart.API.cs index 68c279cc..7c1d6996 100644 --- a/Runtime/Internal/BaseChart.API.cs +++ b/Runtime/Internal/BaseChart.API.cs @@ -568,6 +568,25 @@ namespace XCharts.Runtime return theme.GetBackgroundColor(background); } + [Since("v3.4.0")] + /// + /// 获得Serie的标识颜色。 + /// + /// + /// + /// + public Color32 GetMarkColor(Serie serie, SerieData serieData) + { + if (ChartHelper.IsClearColor(serie.markColor)) + { + return GetItemColor(serie, serieData); + } + else + { + return serie.markColor; + } + } + public Color32 GetItemColor(Serie serie, SerieData serieData) { Color32 color, toColor; diff --git a/Runtime/Serie/Candlestick/CandlestickHandler.cs b/Runtime/Serie/Candlestick/CandlestickHandler.cs index 765efcc1..9c315351 100644 --- a/Runtime/Serie/Candlestick/CandlestickHandler.cs +++ b/Runtime/Serie/Candlestick/CandlestickHandler.cs @@ -29,7 +29,7 @@ namespace XCharts.Runtime title = category; - var color = chart.GetItemColor(serie, serieData); + var color = chart.GetMarkColor(serie, serieData); var newMarker = SerieHelper.GetItemMarker(serie, serieData, marker); var newItemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); var newNumericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); diff --git a/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs b/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs index 924bc692..b52d068b 100644 --- a/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs +++ b/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs @@ -29,7 +29,7 @@ namespace XCharts.Runtime title = category; - var color = chart.GetItemColor(serie, serieData); + var color = chart.GetMarkColor(serie, serieData); var newMarker = SerieHelper.GetItemMarker(serie, serieData, marker); var newItemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); var newNumericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); diff --git a/Runtime/Serie/Scatter/BaseScatterHandler.cs b/Runtime/Serie/Scatter/BaseScatterHandler.cs index b2d3306a..aff96bab 100644 --- a/Runtime/Serie/Scatter/BaseScatterHandler.cs +++ b/Runtime/Serie/Scatter/BaseScatterHandler.cs @@ -37,7 +37,7 @@ namespace XCharts.Runtime param.dimension = 1; param.dataCount = serie.dataCount; param.serieData = serieData; - param.color = chart.GetItemColor(serie, serieData); + param.color = chart.GetMarkColor(serie, serieData); param.marker = SerieHelper.GetItemMarker(serie, serieData, marker); param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); diff --git a/Runtime/Serie/Serie.cs b/Runtime/Serie/Serie.cs index 9940bf26..a7be10ad 100644 --- a/Runtime/Serie/Serie.cs +++ b/Runtime/Serie/Serie.cs @@ -230,6 +230,7 @@ namespace XCharts.Runtime [SerializeField] private string m_SerieName; [SerializeField][Since("v3.2.0")] private SerieState m_State = SerieState.Normal; [SerializeField][Since("v3.2.0")] private SerieColorBy m_ColorBy = SerieColorBy.Default; + [SerializeField][Since("v3.4.0")] private Color32 m_MarkColor; [SerializeField] private string m_Stack; [SerializeField] private int m_XAxisIndex = 0; [SerializeField] private int m_YAxisIndex = 0; @@ -374,6 +375,15 @@ namespace XCharts.Runtime set { if (PropertyUtil.SetStruct(ref m_ColorBy, value)) { SetAllDirty(); } } } /// + /// Serie's mark color. It is only used to display Legend and Tooltip, and does not affect the drawing color. The default value is clear. + /// |Serie的标识颜色。仅用于Legend和Tooltip的展示,不影响绘制颜色,默认为clear。 + /// + public Color32 markColor + { + get { return m_MarkColor; } + set { if (PropertyUtil.SetStruct(ref m_MarkColor, value)) { SetAllDirty(); } } + } + /// /// If stack the value. On the same category axis, the series with the same stack name would be put on top of each other. /// |数据堆叠,同个类目轴上系列配置相同的stack值后,后一个系列的值会在前一个系列的值上相加。 /// diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index abd8863a..ce6eb8e8 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -528,7 +528,7 @@ namespace XCharts.Runtime param.value = serieData.GetData(dimension); param.ignore = ignore; param.total = serie.yTotal; - param.color = chart.GetItemColor(serie, serieData); + param.color = chart.GetMarkColor(serie, serieData); param.marker = SerieHelper.GetItemMarker(serie, serieData, marker); param.itemFormatter = itemFormatter; param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); diff --git a/Runtime/Serie/SeriesHelper.cs b/Runtime/Serie/SeriesHelper.cs index d643ad06..6879d39e 100644 --- a/Runtime/Serie/SeriesHelper.cs +++ b/Runtime/Serie/SeriesHelper.cs @@ -106,9 +106,16 @@ namespace XCharts.Runtime break; } } - Color32 color, toColor; - SerieHelper.GetItemColor(out color, out toColor, destSerie, destSerieData, chart.theme, index, SerieState.Normal); - return color; + if (ChartHelper.IsClearColor(destSerie.markColor)) + { + Color32 color, toColor; + SerieHelper.GetItemColor(out color, out toColor, destSerie, destSerieData, chart.theme, index, SerieState.Normal); + return color; + } + else + { + return destSerie.markColor; + } } ///