From 43ba7d47c5ef087b378f57946c28faaf2d00462d Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Wed, 2 Aug 2023 08:31:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D`BarChart`=E7=9A=84`onSerieEn?= =?UTF-8?q?ter`=E5=92=8C`onSerieExit`=E5=9B=9E=E8=B0=83=E6=97=A0=E6=95=88?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation~/zh/changelog.md | 2 ++ Runtime/Component/Tooltip/TooltipHandler.cs | 4 +++- Runtime/Internal/BaseChart.cs | 3 ++- Runtime/Serie/SerieHandler.cs | 16 ++++++++++++---- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index e97d6da7..89d1172a 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -71,9 +71,11 @@ slug: /changelog * 重构和完善动画系统,增加`新增动画`和`交互动画`的支持 * 完善`PieChart`的动画交互表现 +* 增加`Symbol`的`EmptyTriangle`、`EmptyDiamond`、`Plus`、`Minus`四种新标记 日志详情: +* (2023.08.02) 修复`BarChart`的`onSerieEnter`和`onSerieExit`回调无效的问题 * (2023.08.02) 增加`Symbol`的`Plus`加号和`Minus`减号的支持 * (2023.07.31) 增加`Symbol`的`EmptyTriangle`和`EmptyDiamond`的支持,优化`Symbol`表现效果 * (2023.07.31) 优化`Line`的默认配置效果 diff --git a/Runtime/Component/Tooltip/TooltipHandler.cs b/Runtime/Component/Tooltip/TooltipHandler.cs index fc91af75..c14f8a2a 100644 --- a/Runtime/Component/Tooltip/TooltipHandler.cs +++ b/Runtime/Component/Tooltip/TooltipHandler.cs @@ -502,7 +502,9 @@ namespace XCharts.Runtime var axis = component as Axis; if (axis.gridIndex == gridIndex && axis.IsCategory()) { - dataIndex = axis.context.dataZoomStartIndex + (int)axis.context.pointerValue; + dataIndex = double.IsNaN(axis.context.pointerValue) + ? axis.context.dataZoomStartIndex + : axis.context.dataZoomStartIndex + (int)axis.context.pointerValue; category = axis.GetData(dataIndex); return true; } diff --git a/Runtime/Internal/BaseChart.cs b/Runtime/Internal/BaseChart.cs index bf1f0c4b..0ef14c3d 100644 --- a/Runtime/Internal/BaseChart.cs +++ b/Runtime/Internal/BaseChart.cs @@ -192,8 +192,9 @@ namespace XCharts.Runtime CheckPainter(); CheckRefreshChart(); Internal_CheckAnimation(); - foreach (var handler in m_SerieHandlers) handler.Update(); + foreach (var handler in m_SerieHandlers) handler.BeforeUpdate(); foreach (var handler in m_ComponentHandlers) handler.Update(); + foreach (var handler in m_SerieHandlers) handler.Update(); m_DebugInfo.Update(); if (m_OnUpdate != null) m_OnUpdate(); diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index f89c3a49..9cce8d39 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -15,6 +15,7 @@ namespace XCharts.Runtime public virtual void InitComponent() { } public virtual void RemoveComponent() { } public virtual void CheckComponent(StringBuilder sb) { } + public virtual void BeforeUpdate() { } public virtual void Update() { } public virtual void DrawBase(VertexHelper vh) { } public virtual void DrawSerie(VertexHelper vh) { } @@ -66,6 +67,8 @@ namespace XCharts.Runtime private float[] m_LastRadius = new float[2] { 0, 0 }; private float[] m_LastCenter = new float[2] { 0, 0 }; + private bool m_LastPointerEnter; + private int m_LastPointerDataIndex; public T serie { get; internal set; } public GameObject labelObject { get { return m_SerieLabelRoot; } } @@ -78,6 +81,12 @@ namespace XCharts.Runtime AnimationStyleHelper.UpdateSerieAnimation(serie); } + public override void BeforeUpdate() + { + m_LastPointerEnter = serie.context.pointerEnter; + m_LastPointerDataIndex = serie.context.pointerItemDataIndex; + } + public override void Update() { CheckConfigurationChanged(); @@ -163,12 +172,11 @@ namespace XCharts.Runtime private void UpdateSerieContextInternal() { - var lastEnter = serie.context.pointerEnter; - var lastDataIndex = serie.context.pointerItemDataIndex; UpdateSerieContext(); m_ForceUpdateSerieContext = false; - if (lastEnter != serie.context.pointerEnter || lastDataIndex != serie.context.pointerItemDataIndex) + if (m_LastPointerEnter != serie.context.pointerEnter || m_LastPointerDataIndex != serie.context.pointerItemDataIndex) { + if (chart.onSerieEnter != null || chart.onSerieExit != null || serie.onEnter != null || serie.onExit != null) { var dataIndex = GetPointerItemDataIndex(); @@ -182,7 +190,7 @@ namespace XCharts.Runtime } else { - data.dataIndex = lastDataIndex; + data.dataIndex = m_LastPointerDataIndex; if (serie.onExit != null) serie.onExit(data); if (chart.onSerieExit != null) chart.onSerieExit(data); }