From a44eca0f9139373c23c64e7ca7ba2ca46123a5af Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Fri, 2 Sep 2022 08:33:34 +0800 Subject: [PATCH] [feature][pie] support `onPointerEnterPie` --- CHANGELOG.md | 1 + Runtime/Internal/BaseChart.API.cs | 8 +++++++- Runtime/Internal/BaseChart.cs | 1 + Runtime/Serie/Pie/PieHandler.cs | 15 ++++++++++++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b3ea8f1..ea92c446 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,7 @@ ## master +* (2022.09.02) 增加`onPointerEnterPie`回调支持 * (2022.09.02) 优化`HeatmapChart` * (2022.08.30) 优化`RadarChart` * (2022.08.30) 修复`DataZoom`在某些情况下计算范围不准确的问题 (#221) diff --git a/Runtime/Internal/BaseChart.API.cs b/Runtime/Internal/BaseChart.API.cs index c0034efb..db3b70f9 100644 --- a/Runtime/Internal/BaseChart.API.cs +++ b/Runtime/Internal/BaseChart.API.cs @@ -96,11 +96,17 @@ namespace XCharts.Runtime /// public CustomDrawGaugePointerFunction customDrawGaugePointerFunction { set { m_CustomDrawGaugePointerFunction = value; } get { return m_CustomDrawGaugePointerFunction; } } /// - /// the callback function of click pie area. + /// the callback function of pointer click pie area. /// |点击饼图区域回调。参数:PointerEventData,SerieIndex,SerieDataIndex /// public Action onPointerClickPie { set { m_OnPointerClickPie = value; m_ForceOpenRaycastTarget = true; } get { return m_OnPointerClickPie; } } /// + /// the callback function of pointer enter pie area. + /// |鼠标进入和离开饼图区域回调,SerieDataIndex为-1时表示离开。参数:PointerEventData,SerieIndex,SerieDataIndex + /// + [Since("v3.3.0")] + public Action onPointerEnterPie { set { m_OnPointerEnterPie = value; m_ForceOpenRaycastTarget = true; } get { return m_OnPointerEnterPie; } } + /// /// the callback function of click bar. /// |点击柱形图柱条回调。参数:eventData, dataIndex /// diff --git a/Runtime/Internal/BaseChart.cs b/Runtime/Internal/BaseChart.cs index fdbf414e..3aa80d66 100644 --- a/Runtime/Internal/BaseChart.cs +++ b/Runtime/Internal/BaseChart.cs @@ -86,6 +86,7 @@ namespace XCharts.Runtime protected Action m_OnDrawSerieBefore; protected Action m_OnDrawSerieAfter; protected Action m_OnPointerClickPie; + protected Action m_OnPointerEnterPie; protected Action m_OnPointerClickBar; protected Action m_OnAxisPointerValueChanged; protected Action m_OnLegendClick; diff --git a/Runtime/Serie/Pie/PieHandler.cs b/Runtime/Serie/Pie/PieHandler.cs index 966ebe01..3be3b1c9 100644 --- a/Runtime/Serie/Pie/PieHandler.cs +++ b/Runtime/Serie/Pie/PieHandler.cs @@ -123,6 +123,10 @@ namespace XCharts.Runtime serieData.context.highlight = false; serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor); } + if (chart.onPointerEnterPie != null) + { + chart.onPointerEnterPie(serie.index, serie.context.pointerItemDataIndex); + } if (needInteract) { chart.RefreshPainter(serie); @@ -131,8 +135,9 @@ namespace XCharts.Runtime return; } m_LastCheckContextFlag = needCheck; - serie.context.pointerItemDataIndex = -1; + var lastPointerItemDataIndex = serie.context.pointerItemDataIndex; var dataIndex = GetPiePosIndex(serie, chart.pointerPos); + serie.context.pointerItemDataIndex = -1; for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; @@ -154,6 +159,14 @@ namespace XCharts.Runtime serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor); } } + if (lastPointerItemDataIndex != serie.context.pointerItemDataIndex) + { + needInteract = true; + if (chart.onPointerEnterPie != null) + { + chart.onPointerEnterPie(serie.index, serie.context.pointerItemDataIndex); + } + } if (needInteract) { chart.RefreshPainter(serie);