diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index 063431a8..e6b92415 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -65,6 +65,7 @@ slug: /changelog ## master +* (2022.12.12) 修复`Legend`的`formatter`设置为固定值时显示不正常的问题 * (2022.12.08) 增加`AreaStyle`的`toTop`参数可设置折线图渐变色是到顶部还是到实际位置 * (2022.12.07) 增加`Formatter`的文本通配符`{h}`支持设置当前颜色值 diff --git a/Runtime/Component/Legend/LegendHandler.cs b/Runtime/Component/Legend/LegendHandler.cs index 52951bd8..64161d6c 100644 --- a/Runtime/Component/Legend/LegendHandler.cs +++ b/Runtime/Component/Legend/LegendHandler.cs @@ -55,6 +55,7 @@ namespace XCharts.Runtime chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); legend.gameObject = legendObject; legendObject.hideFlags = chart.chartHideFlags; + //ChartHelper.DestoryGameObjectByMatch(legendObject.transform, "_"); SeriesHelper.UpdateSerieNameList(chart, ref chart.m_LegendRealShowName); legend.context.background = ChartHelper.AddIcon("background", legendObject.transform, 0, 0); legend.context.background.transform.SetSiblingIndex(0); @@ -85,13 +86,14 @@ namespace XCharts.Runtime for (int i = 0; i < datas.Count; i++) { if (!SeriesHelper.IsLegalLegendName(datas[i])) continue; - string legendName = GetFormatterContent(legend, i, datas[i]); + string legendName = datas[i]; + var legendContent = GetFormatterContent(legend, i, datas[i]); var readIndex = chart.m_LegendRealShowName.IndexOf(datas[i]); var active = chart.IsActiveByLegend(datas[i]); var bgColor = LegendHelper.GetIconColor(chart, legend, readIndex, datas[i], active); bgColor.a = legend.itemOpacity; var item = LegendHelper.AddLegendItem(chart, legend, i, datas[i], legendObject.transform, chart.theme, - legendName, bgColor, active, readIndex); + legendContent, bgColor, active, readIndex); legend.SetButton(legendName, item, totalLegend); ChartHelper.ClearEventListener(item.button.gameObject); ChartHelper.AddEventListener(item.button.gameObject, EventTriggerType.PointerDown, (data) => diff --git a/Runtime/Internal/Utilities/ChartHelper.cs b/Runtime/Internal/Utilities/ChartHelper.cs index 6d600da7..cc76d08a 100644 --- a/Runtime/Internal/Utilities/ChartHelper.cs +++ b/Runtime/Internal/Utilities/ChartHelper.cs @@ -123,14 +123,14 @@ namespace XCharts.Runtime GameObject.DestroyImmediate(go.gameObject, true); } } - public static void DestoryGameObjectByMatch(Transform parent, string match) + public static void DestoryGameObjectByMatch(Transform parent, string containString) { if (parent == null) return; var childCount = parent.childCount; for (int i = childCount - 1; i >= 0; i--) { var go = parent.GetChild(i); - if (go != null && go.name.StartsWith(match)) + if (go != null && go.name.Contains(containString)) { GameObject.DestroyImmediate(go.gameObject, true); } @@ -281,7 +281,7 @@ namespace XCharts.Runtime return chartText; } - internal static Painter AddPainterObject(string name, Transform parent, Vector2 anchorMin, Vector2 anchorMax, + public static Painter AddPainterObject(string name, Transform parent, Vector2 anchorMin, Vector2 anchorMax, Vector2 pivot, Vector2 sizeDelta, HideFlags hideFlags, int siblingIndex) { var painterObj = ChartHelper.AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta); @@ -381,6 +381,41 @@ namespace XCharts.Runtime return label; } + public static ChartLabel AddChartLabel2(string name, Transform parent, LabelStyle labelStyle, + ComponentTheme theme, string content, Color autoColor, TextAnchor autoAlignment = TextAnchor.MiddleCenter) + { + Vector2 anchorMin, anchorMax, pivot; + var sizeDelta = new Vector2(labelStyle.width, labelStyle.height); + var textStyle = labelStyle.textStyle; + var alignment = textStyle.GetAlignment(autoAlignment); + UpdateAnchorAndPivotByTextAlignment(alignment, out anchorMin, out anchorMax, out pivot); + var vector0_5 = new Vector2(0.5f, 0.5f); + var labelObj = AddObject(name, parent, vector0_5, vector0_5, vector0_5, sizeDelta); + var label = GetOrAddComponent(labelObj); + label.text = AddTextObject("Text", label.gameObject.transform, anchorMin, anchorMax, pivot, + sizeDelta, textStyle, theme, autoColor, autoAlignment, label.text); + label.icon = ChartHelper.AddIcon("Icon", label.gameObject.transform, labelStyle.icon); + label.SetSize(labelStyle.width, labelStyle.height); + label.SetTextPadding(labelStyle.textPadding); + label.SetText(content); + label.UpdateIcon(labelStyle.icon); + if (labelStyle.background.show) + { + label.color = (!labelStyle.background.autoColor || autoColor == Color.clear) ? + labelStyle.background.color : autoColor; + label.sprite = labelStyle.background.sprite; + label.type = labelStyle.background.type; + } + else + { + label.color = Color.clear; + label.sprite = null; + } + label.transform.localEulerAngles = new Vector3(0, 0, labelStyle.rotate); + label.transform.localPosition = labelStyle.offset; + return label; + } + private static void UpdateAnchorAndPivotByTextAlignment(TextAnchor alignment, out Vector2 anchorMin, out Vector2 anchorMax, out Vector2 pivot) {