diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index b14f23d3..56a4e7cb 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -78,6 +78,7 @@ slug: /changelog ## master +* (2024.12.23) 增加`SymbolStyle`的`borderWidth`和`emptyColor`配置 * (2024.12.17) 增加`UISlider`扩展组件 * (2024.12.10) 增加`UIToggle`扩展组件 * (2024.12.09) 修复`UITable`的`scrollbar`无法拖动的问题 diff --git a/Editor/ChildComponents/SymbolStyleDrawer.cs b/Editor/ChildComponents/SymbolStyleDrawer.cs index edd66978..5ce9f31b 100644 --- a/Editor/ChildComponents/SymbolStyleDrawer.cs +++ b/Editor/ChildComponents/SymbolStyleDrawer.cs @@ -28,6 +28,8 @@ namespace XCharts.Editor PropertyField(prop, "m_Color"); PropertyField(prop, "m_Size"); PropertyField(prop, "m_Gap"); + PropertyField(prop, "m_BorderWidth"); + PropertyField(prop, "m_EmptyColor"); PropertyField(prop, "m_Offset"); --EditorGUI.indentLevel; } diff --git a/Editor/Utilities/ChartEditorHelper.cs b/Editor/Utilities/ChartEditorHelper.cs index afe48c66..27ffdafd 100644 --- a/Editor/Utilities/ChartEditorHelper.cs +++ b/Editor/Utilities/ChartEditorHelper.cs @@ -108,11 +108,11 @@ namespace XCharts.Editor { EditorGUI.LabelField(drawRect, name); var startX = drawRect.x + EditorGUIUtility.labelWidth - EditorGUI.indentLevel * INDENT_WIDTH + GAP_WIDTH; - var diff = 13 + EditorGUI.indentLevel * 14; + var diff = 12 + EditorGUI.indentLevel * 14; var offset = diff - INDENT_WIDTH; var tempWidth = (rectWidth - startX + diff) / 2; var centerXRect = new Rect(startX, drawRect.y, tempWidth, drawRect.height - 1); - var centerYRect = new Rect(centerXRect.x + tempWidth - offset, drawRect.y, tempWidth - 1, drawRect.height - 1); + var centerYRect = new Rect(centerXRect.x + tempWidth - offset + 3.4f, drawRect.y, tempWidth - 1, drawRect.height - 1); EditorGUI.PropertyField(centerXRect, prop1, GUIContent.none); EditorGUI.PropertyField(centerYRect, prop2, GUIContent.none); drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; @@ -326,7 +326,13 @@ namespace XCharts.Editor var foldoutRect = drawRect; foldoutRect.xMax -= 10; bool flag = EditorGUI.Foldout(foldoutRect, foldout, listProp.displayName, true); - ChartEditorHelper.DrawMenu(drawRect, menus); + if (!flag) + { + var startX = drawRect.x + EditorGUIUtility.labelWidth - EditorGUI.indentLevel * INDENT_WIDTH + GAP_WIDTH; + var sizeRect = new Rect(startX, drawRect.y + 1f, (EditorGUI.indentLevel + 1) * 15, drawRect.height - 1); + EditorGUI.IntField(sizeRect, GUIContent.none, listProp.arraySize); + DrawMenu(drawRect, menus); + } height += headerHeight; drawRect.y += headerHeight; drawRect.width = rawWidth; diff --git a/Runtime/Component/Child/SymbolStyle.cs b/Runtime/Component/Child/SymbolStyle.cs index 98d62178..cdfa275a 100644 --- a/Runtime/Component/Child/SymbolStyle.cs +++ b/Runtime/Component/Child/SymbolStyle.cs @@ -84,6 +84,8 @@ namespace XCharts.Runtime [SerializeField] protected Sprite m_Image; [SerializeField] protected Image.Type m_ImageType; [SerializeField] protected Color32 m_Color; + [SerializeField][Since("v3.13.0")] protected float m_BorderWidth = 0f; + [SerializeField][Since("v3.13.0")] protected Color32 m_EmptyColor; public virtual void Reset() { @@ -183,6 +185,24 @@ namespace XCharts.Runtime get { return m_Color; } set { if (PropertyUtil.SetStruct(ref m_Color, value)) SetAllDirty(); } } + /// + /// the border width of symbol. + /// ||图形的边框宽度。 + /// + public float borderWidth + { + get { return m_BorderWidth; } + set { if (PropertyUtil.SetStruct(ref m_BorderWidth, value)) SetAllDirty(); } + } + /// + /// the color of empty symbol. + /// ||空心图形的颜色。 + /// + public Color32 emptyColor + { + get { return m_EmptyColor; } + set { if (PropertyUtil.SetStruct(ref m_EmptyColor, value)) SetAllDirty(); } + } public Vector3 offset3 { get { return new Vector3(m_Offset.x, m_Offset.y, 0); } } private List m_AnimationSize = new List() { 0, 5, 10 }; /// diff --git a/Runtime/Internal/Utilities/ChartDrawer.cs b/Runtime/Internal/Utilities/ChartDrawer.cs index c6cfbf9b..a57ea361 100644 --- a/Runtime/Internal/Utilities/ChartDrawer.cs +++ b/Runtime/Internal/Utilities/ChartDrawer.cs @@ -22,13 +22,14 @@ namespace XCharts.Runtime } else { - if (tickness > 0) + if (tickness > 0 && !ChartHelper.IsClearColor(borderColor)) UGL.DrawDoughnut(vh, pos, symbolSize, symbolSize + tickness, borderColor, borderColor, color, smoothness); else UGL.DrawCricle(vh, pos, symbolSize, color, toColor, smoothness); } break; case SymbolType.EmptyCircle: + if (tickness == 0) tickness = 4f; if (gap > 0) { UGL.DrawCricle(vh, pos, symbolSize + gap, backgroundColor, smoothness); @@ -57,6 +58,7 @@ namespace XCharts.Runtime } break; case SymbolType.EmptyRect: + if (tickness == 0) tickness = 4f; if (gap > 0) { UGL.DrawSquare(vh, pos, symbolSize + gap, backgroundColor); @@ -75,6 +77,7 @@ namespace XCharts.Runtime } if (type == SymbolType.EmptyTriangle) { + if (tickness == 0) tickness = 4f; UGL.DrawEmptyTriangle(vh, pos, symbolSize * 1.4f, tickness * 2f, color, emptyColor); } else @@ -92,6 +95,7 @@ namespace XCharts.Runtime } if (type == SymbolType.EmptyDiamond) { + if (tickness == 0) tickness = 4f; UGL.DrawEmptyDiamond(vh, pos, xRadius, yRadius, tickness, color, emptyColor); } else @@ -124,6 +128,7 @@ namespace XCharts.Runtime arrowOffset, arrowDent, color); if (type == SymbolType.EmptyArrow) { + if (tickness == 0) tickness = 4f; arrowWidth = (symbolSize - tickness) * 2; arrowHeight = arrowWidth * 1.5f; arrowOffset = 0; diff --git a/Runtime/Utilities/ColorUtil.cs b/Runtime/Utilities/ColorUtil.cs index 3e154b9c..99b9bdc9 100644 --- a/Runtime/Utilities/ColorUtil.cs +++ b/Runtime/Utilities/ColorUtil.cs @@ -7,6 +7,7 @@ namespace XCharts.Runtime { private static Dictionary s_ColorCached = new Dictionary(); public static readonly Color32 clearColor32 = new Color32(0, 0, 0, 0); + public static readonly Color32 white = new Color32(255, 255, 255, 255); public static readonly Vector2 zeroVector2 = Vector2.zero; ///