From ec62dea1a5517ad78436889c80cfea45ad5eef8d Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Fri, 29 May 2020 07:52:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B0=83=E7=94=A8`UpdateData?= =?UTF-8?q?Name()`=E6=8E=A5=E5=8F=A3=E6=97=B6=E4=B8=8D=E4=BC=9A=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=88=B7=E6=96=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/Runtime/Example31_PieUpdateName.cs | 69 +++++++++++++++++++ .../Runtime/Example31_PieUpdateName.cs.meta | 11 +++ Runtime/Component/Main/Series.cs | 1 + Runtime/Internal/BaseChart.cs | 47 +++++-------- Runtime/Internal/Helper/SeriesHelper.cs | 17 +++++ 5 files changed, 116 insertions(+), 29 deletions(-) create mode 100644 Examples/Runtime/Example31_PieUpdateName.cs create mode 100644 Examples/Runtime/Example31_PieUpdateName.cs.meta 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;