diff --git a/CHANGELOG.md b/CHANGELOG.md index ceb836b0..2eb1fe17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ ## master +* (2022.06.25) 优化`Serie`设置`PlaceHolder`时的`Tooltip`表现 * (2022.06.25) 增加`Since`标识配置参数从哪个版本开始支持 * (2022.06.24) 优化`Painter`绘制层,`Top`层细分为`Upper`和`Top`层 * (2022.06.24) 增加`Legend`对`Background`和`Padding`的支持 diff --git a/Runtime/Component/Tooltip/TooltipHandler.cs b/Runtime/Component/Tooltip/TooltipHandler.cs index 75722240..cebef9a4 100644 --- a/Runtime/Component/Tooltip/TooltipHandler.cs +++ b/Runtime/Component/Tooltip/TooltipHandler.cs @@ -126,7 +126,7 @@ namespace XCharts.Runtime } else { - chart.RefreshTopPainter(); + chart.RefreshUpperPainter(); } } @@ -210,14 +210,14 @@ namespace XCharts.Runtime foreach (var serie in chart.series) { if (serie is INeedSerieContainer && - (serie as INeedSerieContainer).containterInstanceId == component.instanceId) + (serie as INeedSerieContainer).containterInstanceId == component.instanceId && + !serie.placeHolder) { var isTriggerAxis = tooltip.IsTriggerAxis(); if (container is GridCoord) { var xAxis = chart.GetChartComponent(serie.xAxisIndex); var yAxis = chart.GetChartComponent(serie.yAxisIndex); - serie.context.pointerEnter = true; UpdateAxisPointerDataIndex(serie, xAxis, yAxis, container as GridCoord, isTriggerAxis); } else if (container is PolarCoord) @@ -242,11 +242,16 @@ namespace XCharts.Runtime serie.context.pointerAxisDataIndexs.Clear(); if (yAxis.IsCategory()) { - serie.context.pointerAxisDataIndexs.Add((int) yAxis.context.pointerValue); - yAxis.context.axisTooltipValue = yAxis.context.pointerValue; + if (isTriggerAxis) + { + serie.context.pointerEnter = true; + serie.context.pointerAxisDataIndexs.Add((int) yAxis.context.pointerValue); + yAxis.context.axisTooltipValue = yAxis.context.pointerValue; + } } else if (yAxis.IsTime()) { + serie.context.pointerEnter = true; if (isTriggerAxis) GetSerieDataIndexByAxis(serie, yAxis, grid); else @@ -254,11 +259,16 @@ namespace XCharts.Runtime } else if (xAxis.IsCategory()) { - serie.context.pointerAxisDataIndexs.Add((int) xAxis.context.pointerValue); - xAxis.context.axisTooltipValue = xAxis.context.pointerValue; + if (isTriggerAxis) + { + serie.context.pointerEnter = true; + serie.context.pointerAxisDataIndexs.Add((int) xAxis.context.pointerValue); + xAxis.context.axisTooltipValue = xAxis.context.pointerValue; + } } else { + serie.context.pointerEnter = true; if (isTriggerAxis) GetSerieDataIndexByAxis(serie, xAxis, grid); else @@ -449,6 +459,7 @@ namespace XCharts.Runtime { if (!tooltip.show) return; if (tooltip.type == Tooltip.Type.None) return; + if (!IsAnySerieNeedTooltip()) return; if (m_PointerContainer is GridCoord) { var grid = m_PointerContainer as GridCoord; @@ -540,6 +551,15 @@ namespace XCharts.Runtime } } } + + private bool IsAnySerieNeedTooltip() + { + foreach (var serie in chart.series) + { + if (serie.context.pointerEnter) return true; + } + return false; + } private void DrawYAxisIndicator(VertexHelper vh, Tooltip tooltip, GridCoord grid) { var yAxes = chart.GetChartComponents(); diff --git a/Runtime/Serie/Bar/BarHandler.cs b/Runtime/Serie/Bar/BarHandler.cs index d5818098..f6e118f7 100644 --- a/Runtime/Serie/Bar/BarHandler.cs +++ b/Runtime/Serie/Bar/BarHandler.cs @@ -62,7 +62,7 @@ namespace XCharts.Runtime if (m_SerieGrid == null) return; - var needCheck = (chart.isPointerInChart && m_SerieGrid.IsPointerEnter()) || m_LegendEnter; + var needCheck = (chart.isPointerInChart && m_SerieGrid.IsPointerEnter() && !serie.placeHolder) || m_LegendEnter; var needInteract = false; if (!needCheck) { diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index f60f811f..6494f3fa 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -510,7 +510,7 @@ namespace XCharts.Runtime return; itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); - if (TooltipHelper.IsIgnoreItemFormatter(itemFormatter)) + if (serie.placeHolder || TooltipHelper.IsIgnoreItemFormatter(itemFormatter)) return; var param = serie.context.param; @@ -550,7 +550,7 @@ namespace XCharts.Runtime return; itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); - if (TooltipHelper.IsIgnoreItemFormatter(itemFormatter)) + if (serie.placeHolder || TooltipHelper.IsIgnoreItemFormatter(itemFormatter)) return; var colorIndex = chart.GetLegendRealShowNameIndex(serieData.name);