diff --git a/Examples/Runtime/Example31_PieUpdateName.cs b/Examples/Runtime/Example31_PieUpdateName.cs new file mode 100644 index 00000000..159b40e8 --- /dev/null +++ b/Examples/Runtime/Example31_PieUpdateName.cs @@ -0,0 +1,69 @@ +/******************************************/ +/* */ +/* Copyright (c) 2018 monitor1394 */ +/* https://github.com/monitor1394 */ +/* */ +/******************************************/ + +using UnityEngine; +using UnityEngine.UI; + +namespace XCharts.Examples +{ + [DisallowMultipleComponent] + [ExecuteInEditMode] + public class Example31_PieUpdateName : MonoBehaviour + { + PieChart chart; + int count = 0; + + void Awake() + { + chart = gameObject.GetComponent(); + if (chart == null) + { + chart = gameObject.AddComponent(); + } + var serieIndex = 0; + var serie = chart.series.GetSerie(serieIndex); + if (serie == null) return; + serie.label.show = true; + serie.label.position = SerieLabel.Position.Outside; + } + + void Update() + { + if (Input.GetKeyDown(KeyCode.Space)) + { + if (count % 2 == 0) ResetSameName(); + else UpdateDataName(); + count++; + } + } + + void UpdateDataName() + { + var serieIndex = 0; + var serie = chart.series.GetSerie(serieIndex); + if (serie == null) return; + for (int i = 0; i < serie.dataCount; i++) + { + var value = Random.Range(10, 100); + chart.UpdateData(serieIndex, i, value); + chart.UpdateDataName(serieIndex, i, "value=" + value); + } + } + + void ResetSameName() + { + var serieIndex = 0; + var serie = chart.series.GetSerie(serieIndex); + if (serie == null) return; + for (int i = 0; i < serie.dataCount; i++) + { + chart.UpdateDataName(serieIndex, i, "piename"); + } + chart.themeInfo.SetAllDirty(); + } + } +} \ No newline at end of file diff --git a/Examples/Runtime/Example31_PieUpdateName.cs.meta b/Examples/Runtime/Example31_PieUpdateName.cs.meta new file mode 100644 index 00000000..2afd8a2a --- /dev/null +++ b/Examples/Runtime/Example31_PieUpdateName.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41195ee7a652f4ef79c22c365d314621 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/Main/Series.cs b/Runtime/Component/Main/Series.cs index 43ca797e..606d193f 100644 --- a/Runtime/Component/Main/Series.cs +++ b/Runtime/Component/Main/Series.cs @@ -99,6 +99,7 @@ namespace XCharts { base.ClearDirty(); ClearLabelDirty(); + SeriesHelper.ClearNameDirty(this); } /// diff --git a/Runtime/Internal/BaseChart.cs b/Runtime/Internal/BaseChart.cs index c1e25412..ed79e2a2 100644 --- a/Runtime/Internal/BaseChart.cs +++ b/Runtime/Internal/BaseChart.cs @@ -131,7 +131,6 @@ namespace XCharts protected virtual void Update() { CheckSize(); - CheckLegend(); CheckComponent(); CheckPointerPos(); CheckTooltip(); @@ -142,6 +141,24 @@ namespace XCharts protected virtual void CheckComponent() { + if (m_Series.anyDirty) + { + if (m_Series.vertsDirty) RefreshChart(); + if (SeriesHelper.IsLabelDirty(m_Series)) m_ReinitLabel = true; + if (SeriesHelper.IsNeedLabelUpdate(m_Series) && !m_RefreshChart) m_RefreshLabel = true; + if (SeriesHelper.IsLabelDirty(m_Series)) m_ReinitLabel = true; + foreach (var serie in m_Series.list) + { + if (serie.titleStyle.componentDirty) m_ReinitTitle = true; + if (serie.nameDirty) + { + m_Legend.SetAllDirty(); + RefreshChart(); + serie.ClearNameDirty(); + } + } + m_Series.ClearDirty(); + } if (m_ThemeInfo.anyDirty) { if (m_CheckTheme != m_ThemeInfo.theme) @@ -188,17 +205,6 @@ namespace XCharts RefreshChart(); m_Settings.ClearDirty(); } - if (m_Series.anyDirty) - { - if (m_Series.vertsDirty) RefreshChart(); - if (SeriesHelper.IsLabelDirty(m_Series)) m_ReinitLabel = true; - if (SeriesHelper.IsNeedLabelUpdate(m_Series) && !m_RefreshChart) m_RefreshLabel = true; - foreach (var serie in m_Series.list) - { - if (serie.titleStyle.componentDirty) m_ReinitTitle = true; - } - m_Series.ClearDirty(); - } } protected override void OnEnable() @@ -581,23 +587,6 @@ namespace XCharts OnSizeChanged(); } - private void CheckLegend() - { - if (m_Legend.show) - { - foreach (var serie in series.list) - { - if (serie.nameDirty) - { - m_Legend.SetAllDirty(); - serie.ClearNameDirty(); - RefreshChart(); - break; - } - } - } - } - private void CheckPointerPos() { if (m_ForceOpenRaycastTarget) raycastTarget = true; diff --git a/Runtime/Internal/Helper/SeriesHelper.cs b/Runtime/Internal/Helper/SeriesHelper.cs index cc8e9353..155eeaca 100644 --- a/Runtime/Internal/Helper/SeriesHelper.cs +++ b/Runtime/Internal/Helper/SeriesHelper.cs @@ -31,6 +31,23 @@ namespace XCharts return false; } + public static bool IsNameDirty(Series series) + { + foreach (var serie in series.list) + { + if (serie.nameDirty) return true; + } + return false; + } + + public static void ClearNameDirty(Series series) + { + foreach (var serie in series.list) + { + serie.ClearNameDirty(); + } + } + public static bool IsLegalLegendName(string name) { int numName = -1;