diff --git a/Assets/XCharts/CHANGELOG.md b/Assets/XCharts/CHANGELOG.md
index a15b3bf1..75a267ab 100644
--- a/Assets/XCharts/CHANGELOG.md
+++ b/Assets/XCharts/CHANGELOG.md
@@ -34,6 +34,10 @@
## master
+* (2021.05.23) 增加`TextStyle`的`wrap`设置是否自动换行
+* (2021.05.23) 增加`AxisLabel`的`autoAlign`设置是否让系统自动设置对齐方式
+* (2021.05.23) 增加`AxisLabel`的`width`和`height`支持自定义文本的长宽
+* (2021.05.23) 增加`Axis`的`iconStyle`和`icons`支持设置坐标轴标签显示图标
* (2021.05.20) 增加`Serie`和`Axis`的`insertDataToHead`参数控制数据插入头部还是尾部
* (2021.05.18) 优化`Editor`下的图表创建 #147
* (2021.05.16) 抽离`GanttChart`甘特图,通过扩展模块的方式来提供
diff --git a/Assets/XCharts/Documentation/XChartsAPI.md b/Assets/XCharts/Documentation/XChartsAPI.md
index f0f821ec..cf2fe4ae 100644
--- a/Assets/XCharts/Documentation/XChartsAPI.md
+++ b/Assets/XCharts/Documentation/XChartsAPI.md
@@ -84,6 +84,9 @@
* `CoordinateChart.ClearAxisData()`:清除所有x轴和y轴的类目数据。
* `CoordinateChart.AddXAxisData(string category, int xAxisIndex = 0)`:添加一个类目数据到指定的 `X` 轴。
* `CoordinateChart.AddYAxisData(string category, int yAxisIndex = 0)`:添加一个类目数据到指定的 `Y` 轴。
+* `CoordinateChart.AddXAxisIcon(Sprite icon, int xAxisIndex = 0)`:添加一个类目数据到指定的 `X` 轴。
+* `CoordinateChart.AddYAxisIcon(Sprite icon, int yAxisIndex = 0)`:添加一个类目数据到指定的 `Y` 轴。。
+
* `CoordinateChart.IsValue()`:是否是纯数值坐标。
* `CoordinateChart.RefreshDataZoom()`:在下一帧刷新DataZoom组件。
* `CoordinateChart.RefreshAxisMinMaxValue()`:立即刷新数值坐标轴的最大最小值(更新坐标轴标签并触发重绘)。
diff --git a/Assets/XCharts/Documentation/XCharts配置项手册.md b/Assets/XCharts/Documentation/XCharts配置项手册.md
index 2b4163c8..67a663ee 100644
--- a/Assets/XCharts/Documentation/XCharts配置项手册.md
+++ b/Assets/XCharts/Documentation/XCharts配置项手册.md
@@ -51,6 +51,7 @@
* [SerieSymbol 图形标记](#SerieSymbol)
* [TextLimit 文本自适应](#TextLimit)
* [TextStyle 文本样式](#TextStyle)
+* [IconStyle 图标样式](#IconStyle)
## `Theme`
@@ -204,6 +205,7 @@
* `fontSize`:字体大小。
* `fontStyle`:字体风格。
* `lineSpacing`:行间距。
+* `wrap`:是否自动换行。
## `Tooltip`
@@ -399,12 +401,14 @@
* `inverse`:是否反向坐标轴。只在数值轴`Value`中有效。
* `insertDataToHead`:添加新数据时是在列表的头部还是尾部加入。
* `data`:类目数据,在类目轴(`type: 'Category'`)中有效。
+* `icons`:刻度的图标,在类目轴(`type: 'Category'`)中有效。
* `axisLine`:坐标轴轴线相关配置 [AxisLine](#AxisLine)。
* `axisName`:坐标轴名称相关配置 [AxisName](#AxisName)。
* `axisTick`:坐标轴刻度相关配置 [AxisTick](#AxisTick)。
* `axisLabel`:坐标轴刻度标签 [AxisLabel](#AxisLabel)。
* `splitLine`:坐标轴轴线坐标轴分割线 [AxisSplitLine](#SplitLine)。
* `splitArea`:坐标轴轴线坐标轴分割区域 [AxisSplitArea](#AxisSplitArea)。
+* `iconStyle`:坐标轴刻度图标的样式 [IconStyle](#IconStyle)。
相关接口:
@@ -828,6 +832,9 @@ K线图系列。
* `numericFormatter`:标准数字格式字符串。用于将数值格式化显示为字符串。使用`Axx`的形式:`A`是格式说明符的单字符,支持`C`货币、`D`十进制、`E`指数、`F`顶点数、`G`常规、`N`数字、`P`百分比、`R`往返过程、`X`十六进制等九种。`xx`是精度说明,从`0`-`99`。
* `showAsPositiveNumber`:将负数数值显示为正数。一般和`Serie`的`showAsPositiveNumber`配合使用。
* `onZero`:刻度标签显示在`0`刻度上。
+* `width`:刻度标签的宽。当为0时系统自动设置。
+* `height`:刻度标签的高。当为0时系统自动设置。
+* `autoAlign`:是否让系统自动设置对齐方式。为true时系统自动选择对齐方式,为false时用textStyle的对齐方式。
* `textLimit`:文本自适应 [TextLimit](#TextLimit)。只在类目轴中有效。
* `textStyle`:文本样式 [TextStyle](#TextStyle)。
@@ -1018,6 +1025,16 @@ K线图系列。
* `interval`:显示图形标记的间隔。`0`表示显示所有标签,`1`表示隔一个隔显示一个标签,以此类推。
* `forceShowLast`:是否强制显示最后一个图形标记。默认为 `false`。
+## `IconStyle`
+
+* `show`:是否显示图标。
+* `layer`:显示在上层还是在下层。
+* `sprite`:图标。
+* `color`:颜色。
+* `width`:图标的宽。
+* `height`:图标的高。
+* `offset`:位置偏移。
+
[返回首页](https://github.com/monitor1394/unity-ugui-XCharts)
[XChartsAPI接口](XChartsAPI.md)
[XCharts问答](XCharts问答.md)
diff --git a/Assets/XCharts/Documentation/xcharts-configuration-EN.md b/Assets/XCharts/Documentation/xcharts-configuration-EN.md
index 3167643e..3571669d 100644
--- a/Assets/XCharts/Documentation/xcharts-configuration-EN.md
+++ b/Assets/XCharts/Documentation/xcharts-configuration-EN.md
@@ -54,6 +54,7 @@ __Sub component:__
* [SerieSymbol](#SerieSymbol)
* [TextLimit](#TextLimit)
* [TextStyle](#TextStyle)
+* [IconStyle](#IconStyle)
## `Theme`
@@ -211,6 +212,7 @@ The component of settings related to text.
* `fontSize`: the size of text. [default: `18`].
* `fontStyle`: the font style of text. [default: `FontStyle.Normal`].
* `lineSpacing`: the space of text line. [default: `1f`].
+* `wrap`: Whether to wrap lines.
## `Tooltip`
@@ -397,12 +399,14 @@ The x axis in cartesian(rectangular) coordinate. a grid component can place at m
* `inverse`: Whether the axis are reversed or not. Invalid in `Category` axis.
* `insertDataToHead`: Whether to add new data at the head or at the end of the list.
* `data`: Category data, valid in the `Category` axis.
+* `icons`: icon list.
* `axisLine`: the style of axis line [AxisLine](#AxisLine).
* `axisName`: the style of axis name [AxisName](#AxisName).
* `axisTick`: the style of axis tick [AxisTick](#AxisTick).
* `axisLabel`: the style of axis label [AxisLabel](#AxisLabel).
* `splitLine`: the style of axis split line [AxisSplitLine](#SplitLine).
* `splitArea`: the style of axis split area [AxisSplitArea](#AxisSplitArea).
+* `iconStyle`: the style of the axis scale icon [IconStyle](#IconStyle).
## `Background`
@@ -722,6 +726,9 @@ K线图系列。
* `numericFormatter`: 标准数字格式字符串。用于将数值格式化显示为字符串。使用`Axx`的形式: `A`是格式说明符的单字符,支持`C`货币、`D`十进制、`E`指数、`F`顶点数、`G`常规、`N`数字、`P`百分比、`R`往返过程、`X`十六进制等九种。`xx`是精度说明,从`0`-`99`。
* `showAsPositiveNumber`: 将负数数值显示为正数。一般和`Serie`的`showAsPositiveNumber`配合使用。
* `onZero`: 刻度标签显示在`0`刻度上。
+* `width`:刻度标签的宽。当为0时系统自动设置。
+* `height`:刻度标签的高。当为0时系统自动设置。
+* `autoAlign`:是否让系统自动设置对齐方式。为true时系统自动选择对齐方式,为false时用textStyle的对齐方式。
* `textLimit`: 文本自适应 [TextLimit](#TextLimit)。只在类目轴中有效。
* `textStyle`: The style of text [TextStyle](#TextStyle).
@@ -912,6 +919,16 @@ K线图系列。
* `interval`: 显示图形标记的间隔。`0`表示显示所有标签,`1`表示隔一个隔显示一个标签,以此类推。
* `forceShowLast`: 是否强制显示最后一个图形标记。默认为 `false`。
+## `IconStyle`
+
+* `show` : whether to show the icon.
+* `Layer` : Shows on top or bottom.
+* `Sprite` : Icon.
+* `color` : color.
+* `width` : The width of the icon.
+* `height` : the height of the icon.
+* `Offset` : Offset.
+
[返回首页](https://github.com/monitor1394/unity-ugui-XCharts)
[XChartsAPI接口](XChartsAPI.md)
[XCharts问答](XCharts问答.md)
diff --git a/Assets/XCharts/Editor/PropertyDrawers/AxisDrawer.cs b/Assets/XCharts/Editor/PropertyDrawers/AxisDrawer.cs
index 1fe39ccb..0cf308ff 100644
--- a/Assets/XCharts/Editor/PropertyDrawers/AxisDrawer.cs
+++ b/Assets/XCharts/Editor/PropertyDrawers/AxisDrawer.cs
@@ -83,7 +83,8 @@ namespace XCharts
PropertyField(prop, "m_AxisLabel");
PropertyField(prop, "m_SplitLine");
PropertyField(prop, "m_SplitArea");
-
+ PropertyField(prop, "m_IconStyle");
+ PropertyListField(prop, "m_Icons", true);
if (type == Axis.AxisType.Category)
{
PropertyListField(prop, "m_Data", true);
@@ -133,13 +134,16 @@ namespace XCharts
if (MakeFoldout(prop, "m_Show"))
{
++EditorGUI.indentLevel;
- PropertyField(prop, "m_Formatter");
PropertyField(prop, "m_Inside");
PropertyField(prop, "m_Interval");
PropertyField(prop, "m_Margin");
+ PropertyField(prop, "m_Width");
+ PropertyField(prop, "m_Height");
+ PropertyField(prop, "m_Formatter");
PropertyField(prop, "m_NumericFormatter");
PropertyField(prop, "m_ShowAsPositiveNumber");
PropertyField(prop, "m_OnZero");
+ PropertyField(prop, "m_AutoAlign");
PropertyField(prop, "m_TextLimit");
PropertyField(prop, "m_TextStyle");
--EditorGUI.indentLevel;
diff --git a/Assets/XCharts/Editor/PropertyDrawers/TextStyleDrawer.cs b/Assets/XCharts/Editor/PropertyDrawers/TextStyleDrawer.cs
index dfddb82f..c909cfe8 100644
--- a/Assets/XCharts/Editor/PropertyDrawers/TextStyleDrawer.cs
+++ b/Assets/XCharts/Editor/PropertyDrawers/TextStyleDrawer.cs
@@ -28,6 +28,7 @@ namespace XCharts
#else
PropertyField(prop, "m_Font");
#endif
+ PropertyField(prop, "m_Wrap");
PropertyField(prop, "m_Rotate");
PropertyField(prop, "m_Offset");
PropertyField(prop, "m_Color");
diff --git a/Assets/XCharts/Runtime/API/CoordinateChart_API.cs b/Assets/XCharts/Runtime/API/CoordinateChart_API.cs
index 30228691..64794a22 100644
--- a/Assets/XCharts/Runtime/API/CoordinateChart_API.cs
+++ b/Assets/XCharts/Runtime/API/CoordinateChart_API.cs
@@ -100,7 +100,26 @@ namespace XCharts
/// which xAxis should category add to
public void AddXAxisData(string category, int xAxisIndex = 0)
{
- m_XAxes[xAxisIndex].AddData(category);
+ var xAxis = GetXAxis(xAxisIndex);
+ if (xAxis != null)
+ {
+ xAxis.AddData(category);
+ }
+ }
+
+ ///
+ /// Add an icon to xAxis.
+ /// 添加一个图标到指定的x轴。
+ ///
+ ///
+ ///
+ public void AddXAxisIcon(Sprite icon, int xAxisIndex = 0)
+ {
+ var xAxis = GetXAxis(xAxisIndex);
+ if (xAxis != null)
+ {
+ xAxis.AddIcon(icon);
+ }
}
///
@@ -111,7 +130,26 @@ namespace XCharts
/// which yAxis should category add to
public void AddYAxisData(string category, int yAxisIndex = 0)
{
- m_YAxes[yAxisIndex].AddData(category);
+ var yAxis = GetYAxis(yAxisIndex);
+ if (yAxis != null)
+ {
+ yAxis.AddData(category);
+ }
+ }
+
+ ///
+ /// Add an icon to yAxis.
+ /// 添加一个图标到指定的y轴。
+ ///
+ ///
+ ///
+ public void AddYAxisIcon(Sprite icon, int yAxisIndex = 0)
+ {
+ var yAxis = GetYAxis(yAxisIndex);
+ if (yAxis != null)
+ {
+ yAxis.AddIcon(icon);
+ }
}
///
diff --git a/Assets/XCharts/Runtime/Component/Main/Axis.cs b/Assets/XCharts/Runtime/Component/Main/Axis.cs
index 3ec8ad1a..5912ec5b 100644
--- a/Assets/XCharts/Runtime/Component/Main/Axis.cs
+++ b/Assets/XCharts/Runtime/Component/Main/Axis.cs
@@ -100,6 +100,8 @@ namespace XCharts
[SerializeField] protected bool m_Inverse = false;
[SerializeField] private bool m_Clockwise = true;
[SerializeField] private bool m_InsertDataToHead;
+ [SerializeField] private IconStyle m_IconStyle = new IconStyle();
+ [SerializeField] protected List m_Icons = new List();
[SerializeField] protected List m_Data = new List();
[SerializeField] protected AxisLine m_AxisLine = AxisLine.defaultAxisLine;
[SerializeField] protected AxisName m_AxisName = AxisName.defaultAxisName;
@@ -288,6 +290,14 @@ namespace XCharts
set { if (value != null) { m_Data = value; SetAllDirty(); } }
}
///
+ /// 类目数据对应的图标。
+ ///
+ public List icons
+ {
+ get { return m_Icons; }
+ set { if (value != null) { m_Icons = value; SetAllDirty(); } }
+ }
+ ///
/// axis Line.
/// 坐标轴轴线。
/// ///
@@ -350,6 +360,14 @@ namespace XCharts
get { return m_InsertDataToHead; }
set { if (PropertyUtil.SetStruct(ref m_InsertDataToHead, value)) SetAllDirty(); }
}
+ ///
+ /// 图标样式。
+ ///
+ public IconStyle iconStyle
+ {
+ get { return m_IconStyle; }
+ set { if (PropertyUtil.SetClass(ref m_IconStyle, value)) SetAllDirty(); }
+ }
public override bool vertsDirty
{
get { return m_VertsDirty || axisLine.anyDirty || axisTick.anyDirty || splitLine.anyDirty || splitArea.anyDirty; }
@@ -374,11 +392,7 @@ namespace XCharts
splitArea.ClearVerticesDirty();
}
public int index { get; internal set; }
- ///
- /// the axis label text list.
- /// 坐标轴刻度标签的Text列表。
- ///
- public List axisLabelTextList { get { return m_AxisLabelTextList; } set { m_AxisLabelTextList = value; } }
+ public List runtimeAxisLabelList { get { return m_AxisLabelList; } set { m_AxisLabelList = value; } }
///
/// the current minimun value.
/// 当前最小值。
@@ -429,7 +443,7 @@ namespace XCharts
private int filterEnd;
private int filterMinShow;
private List filterData;
- private List m_AxisLabelTextList = new List();
+ private List m_AxisLabelList = new List();
private GameObject m_TooltipLabel;
private ChartText m_TooltipLabelText;
private RectTransform m_TooltipLabelRect;
@@ -461,12 +475,15 @@ namespace XCharts
axis.logBase = logBase;
axis.logBaseE = logBaseE;
axis.ceilRate = ceilRate;
+ axis.insertDataToHead = insertDataToHead;
+ axis.iconStyle = iconStyle.Clone();
axis.axisLine = axisLine.Clone();
axis.axisName = axisName.Clone();
axis.axisTick = axisTick.Clone();
axis.axisLabel = axisLabel.Clone();
axis.splitLine = splitLine.Clone();
axis.splitArea = splitArea.Clone();
+ axis.icons = new List();
axis.data = new List();
ChartHelper.CopyList(axis.data, data);
return axis;
@@ -487,6 +504,8 @@ namespace XCharts
logBase = axis.logBase;
logBaseE = axis.logBaseE;
ceilRate = axis.ceilRate;
+ insertDataToHead = axis.insertDataToHead;
+ iconStyle.Copy(axis.iconStyle);
axisLine.Copy(axis.axisLine);
axisName.Copy(axis.axisName);
axisTick.Copy(axis.axisTick);
@@ -494,6 +513,7 @@ namespace XCharts
splitLine.Copy(axis.splitLine);
splitArea.Copy(axis.splitArea);
ChartHelper.CopyList(data, axis.data);
+ ChartHelper.CopyList(icons, axis.icons);
}
///
@@ -502,6 +522,7 @@ namespace XCharts
public void ClearData()
{
m_Data.Clear();
+ m_Icons.Clear();
m_RuntimeData.Clear();
SetAllDirty();
}
@@ -552,6 +573,20 @@ namespace XCharts
SetAllDirty();
}
+ public void AddIcon(Sprite icon)
+ {
+ if (maxCache > 0)
+ {
+ while (m_Icons.Count > maxCache)
+ {
+ m_Icons.RemoveAt(m_InsertDataToHead ? m_Icons.Count - 1 : 0);
+ }
+ }
+ if (m_InsertDataToHead) m_Icons.Insert(0, icon);
+ else m_Icons.Add(icon);
+ SetAllDirty();
+ }
+
///
/// 获得指定索引的类目数据
///
@@ -580,6 +615,14 @@ namespace XCharts
return "";
}
+ public Sprite GetIcon(int index)
+ {
+ if (index >= 0 && index < m_Icons.Count)
+ return m_Icons[index];
+ else
+ return null;
+ }
+
///
/// 获得指定区域缩放的类目数据列表
///
@@ -667,12 +710,12 @@ namespace XCharts
{
var minValue = GetCurrMinValue(duration);
var maxValue = GetCurrMaxValue(duration);
- for (int i = 0; i < axisLabelTextList.Count; i++)
+ for (int i = 0; i < runtimeAxisLabelList.Count; i++)
{
- if (axisLabelTextList[i] != null)
+ if (runtimeAxisLabelList[i] != null)
{
var text = AxisHelper.GetLabelName(this, coordinateWidth, i, minValue, maxValue, dataZoom, forcePercent);
- axisLabelTextList[i].SetText(text);
+ runtimeAxisLabelList[i].SetText(text);
}
}
}
@@ -876,7 +919,8 @@ namespace XCharts
m_Data = new List()
{
"x1","x2","x3","x4","x5"
- }
+ },
+ m_Icons = new List(5),
};
axis.splitLine.show = false;
axis.splitLine.lineStyle.type = LineStyle.Type.None;
@@ -908,6 +952,7 @@ namespace XCharts
m_BoundaryGap = false,
m_Position = AxisPosition.Left,
m_Data = new List(5),
+
};
axis.splitLine.show = true;
axis.splitLine.lineStyle.type = LineStyle.Type.None;
diff --git a/Assets/XCharts/Runtime/Component/Sub/AxisLabel.cs b/Assets/XCharts/Runtime/Component/Sub/AxisLabel.cs
index c8164aaf..5aaabfc0 100644
--- a/Assets/XCharts/Runtime/Component/Sub/AxisLabel.cs
+++ b/Assets/XCharts/Runtime/Component/Sub/AxisLabel.cs
@@ -26,6 +26,9 @@ namespace XCharts
[SerializeField] private string m_NumericFormatter = "";
[SerializeField] private bool m_ShowAsPositiveNumber = false;
[SerializeField] private bool m_OnZero = false;
+ [SerializeField] private float m_Width = 0f;
+ [SerializeField] private float m_Height = 0f;
+ [SerializeField] private bool m_AutoAlign = true;
[SerializeField] private TextLimit m_TextLimit = new TextLimit();
[SerializeField] private TextStyle m_TextStyle = new TextStyle();
@@ -106,6 +109,30 @@ namespace XCharts
get { return m_OnZero; }
set { if (PropertyUtil.SetStruct(ref m_OnZero, value)) SetComponentDirty(); }
}
+ ///
+ /// 文本的宽。为0时会自动匹配。
+ ///
+ public float width
+ {
+ get { return m_Width; }
+ set { if (PropertyUtil.SetStruct(ref m_Width, value)) SetComponentDirty(); }
+ }
+ ///
+ /// 文本的高。为0时会自动匹配。
+ ///
+ public float height
+ {
+ get { return m_Height; }
+ set { if (PropertyUtil.SetStruct(ref m_Height, value)) SetComponentDirty(); }
+ }
+ ///
+ /// 文本是否自动选对齐方式。为false时会用TextStyle下的alignment。
+ ///
+ public bool autoAlign
+ {
+ get { return m_AutoAlign; }
+ set { if (PropertyUtil.SetStruct(ref m_AutoAlign, value)) SetComponentDirty(); }
+ }
///
/// 文本限制。
@@ -150,28 +177,34 @@ namespace XCharts
public AxisLabel Clone()
{
- var axisLable = new AxisLabel();
- axisLable.show = show;
- axisLable.formatter = formatter;
- axisLable.interval = interval;
- axisLable.inside = inside;
- axisLable.margin = margin;
- axisLable.numericFormatter = numericFormatter;
- axisLable.textLimit = textLimit.Clone();
- axisLable.textStyle.Copy(textStyle);
- return axisLable;
+ var axisLabel = new AxisLabel();
+ axisLabel.show = show;
+ axisLabel.formatter = formatter;
+ axisLabel.interval = interval;
+ axisLabel.inside = inside;
+ axisLabel.margin = margin;
+ axisLabel.numericFormatter = numericFormatter;
+ axisLabel.width = width;
+ axisLabel.height = height;
+ axisLabel.autoAlign = autoAlign;
+ axisLabel.textLimit = textLimit.Clone();
+ axisLabel.textStyle.Copy(textStyle);
+ return axisLabel;
}
- public void Copy(AxisLabel axisLable)
+ public void Copy(AxisLabel axisLabel)
{
- show = axisLable.show;
- formatter = axisLable.formatter;
- interval = axisLable.interval;
- inside = axisLable.inside;
- margin = axisLable.margin;
- numericFormatter = axisLable.numericFormatter;
- textLimit.Copy(axisLable.textLimit);
- textStyle.Copy(axisLable.textStyle);
+ show = axisLabel.show;
+ formatter = axisLabel.formatter;
+ interval = axisLabel.interval;
+ inside = axisLabel.inside;
+ margin = axisLabel.margin;
+ numericFormatter = axisLabel.numericFormatter;
+ width = axisLabel.width;
+ height = axisLabel.height;
+ autoAlign = axisLabel.autoAlign;
+ textLimit.Copy(axisLabel.textLimit);
+ textStyle.Copy(axisLabel.textStyle);
}
public void SetRelatedText(ChartText txt, float labelWidth)
diff --git a/Assets/XCharts/Runtime/Component/Sub/IconStyle.cs b/Assets/XCharts/Runtime/Component/Sub/IconStyle.cs
index 3f9cd4c4..1addc799 100644
--- a/Assets/XCharts/Runtime/Component/Sub/IconStyle.cs
+++ b/Assets/XCharts/Runtime/Component/Sub/IconStyle.cs
@@ -10,9 +10,6 @@ using UnityEngine.UI;
namespace XCharts
{
- ///
- /// 系列数据项的图标
- ///
[System.Serializable]
public class IconStyle : SubComponent
{
@@ -25,8 +22,8 @@ namespace XCharts
[SerializeField] private Layer m_Layer;
[SerializeField] private Sprite m_Sprite;
[SerializeField] private Color m_Color = Color.white;
- [SerializeField] private float m_Width = 40;
- [SerializeField] private float m_Height = 40;
+ [SerializeField] private float m_Width = 20;
+ [SerializeField] private float m_Height = 20;
[SerializeField] private Vector3 m_Offset;
public void Reset()
@@ -35,8 +32,8 @@ namespace XCharts
m_Layer = Layer.UnderLabel;
m_Sprite = null;
m_Color = Color.white;
- m_Width = 40;
- m_Height = 40;
+ m_Width = 20;
+ m_Height = 20;
m_Offset = Vector3.zero;
}
///
@@ -70,6 +67,28 @@ namespace XCharts
///
public Vector3 offset { get { return m_Offset; } set { m_Offset = value; } }
+ public IconStyle Clone()
+ {
+ var iconStyle = new IconStyle();
+ iconStyle.show = show;
+ iconStyle.layer = layer;
+ iconStyle.sprite = sprite;
+ iconStyle.color = color;
+ iconStyle.width = width;
+ iconStyle.height = height;
+ iconStyle.offset = offset;
+ return iconStyle;
+ }
+ public void Copy(IconStyle iconStyle)
+ {
+ show = iconStyle.show;
+ layer = iconStyle.layer;
+ sprite = iconStyle.sprite;
+ color = iconStyle.color;
+ width = iconStyle.width;
+ height = iconStyle.height;
+ offset = iconStyle.offset;
+ }
}
}
diff --git a/Assets/XCharts/Runtime/Component/Sub/TextStyle.cs b/Assets/XCharts/Runtime/Component/Sub/TextStyle.cs
index bde1a9fb..7f09c63d 100644
--- a/Assets/XCharts/Runtime/Component/Sub/TextStyle.cs
+++ b/Assets/XCharts/Runtime/Component/Sub/TextStyle.cs
@@ -22,6 +22,7 @@ namespace XCharts
{
[SerializeField] private Font m_Font;
+ [SerializeField] private bool m_Wrap = true;
[SerializeField] private float m_Rotate = 0;
[SerializeField] private Vector2 m_Offset = Vector2.zero;
[SerializeField] private Color m_Color = Color.clear;
@@ -119,6 +120,14 @@ namespace XCharts
set { if (PropertyUtil.SetStruct(ref m_LineSpacing, value)) SetComponentDirty(); }
}
///
+ /// 是否自动换行。
+ ///
+ public bool wrap
+ {
+ get { return m_Wrap; }
+ set { if (PropertyUtil.SetStruct(ref m_Wrap, value)) SetComponentDirty(); }
+ }
+ ///
/// 对齐方式。
///
public TextAnchor alignment
@@ -186,6 +195,7 @@ namespace XCharts
fontStyle = textStyle.fontStyle;
lineSpacing = textStyle.lineSpacing;
alignment = textStyle.alignment;
+ wrap = textStyle.wrap;
#if dUI_TextMeshPro
m_TMPFont = textStyle.tmpFont;
m_TMPAlignment = textStyle.tmpAlignment;
@@ -210,7 +220,7 @@ namespace XCharts
public int GetFontSize(ComponentTheme defaultTheme)
{
- if(fontSize == 0) return defaultTheme.fontSize;
+ if (fontSize == 0) return defaultTheme.fontSize;
else return fontSize;
}
}
diff --git a/Assets/XCharts/Runtime/Helper/AxisHelper.cs b/Assets/XCharts/Runtime/Helper/AxisHelper.cs
index aca9b656..a1fe0b2f 100644
--- a/Assets/XCharts/Runtime/Helper/AxisHelper.cs
+++ b/Assets/XCharts/Runtime/Helper/AxisHelper.cs
@@ -424,6 +424,28 @@ namespace XCharts
txt.SetLocalPosition(pos + offset);
}
+ public static void AdjustCircleLabelPos(ChartLabel txt, Vector3 pos, Vector3 cenPos, float txtHig, Vector3 offset)
+ {
+ var txtWidth = txt.label.GetPreferredWidth();
+ var sizeDelta = new Vector2(txtWidth, txt.label.GetPreferredHeight());
+ txt.label.SetSizeDelta(sizeDelta);
+ var diff = pos.x - cenPos.x;
+ if (diff < -1f) //left
+ {
+ pos = new Vector3(pos.x - txtWidth / 2, pos.y);
+ }
+ else if (diff > 1f) //right
+ {
+ pos = new Vector3(pos.x + txtWidth / 2, pos.y);
+ }
+ else
+ {
+ float y = pos.y > cenPos.y ? pos.y + txtHig / 2 : pos.y - txtHig / 2;
+ pos = new Vector3(pos.x, y);
+ }
+ txt.SetPosition(pos + offset);
+ }
+
public static void AdjustRadiusAxisLabelPos(ChartText txt, Vector3 pos, Vector3 cenPos, float txtHig, Vector3 offset)
{
var txtWidth = txt.GetPreferredWidth();
diff --git a/Assets/XCharts/Runtime/Internal/CoordinateChart.cs b/Assets/XCharts/Runtime/Internal/CoordinateChart.cs
index d1092321..bef689f7 100644
--- a/Assets/XCharts/Runtime/Internal/CoordinateChart.cs
+++ b/Assets/XCharts/Runtime/Internal/CoordinateChart.cs
@@ -538,8 +538,8 @@ namespace XCharts
var axisObj = ChartHelper.AddObject(objName, transform, graphAnchorMin,
graphAnchorMax, chartPivot, new Vector2(chartWidth, chartHeight));
yAxis.gameObject = axisObj;
- yAxis.axisLabelTextList.Clear();
- axisObj.SetActive(yAxis.show && yAxis.axisLabel.show);
+ yAxis.runtimeAxisLabelList.Clear();
+ axisObj.SetActive(yAxis.show);
axisObj.hideFlags = chartHideFlags;
ChartHelper.HideAllObject(axisObj);
var grid = GetAxisGridOrDefault(yAxis);
@@ -549,34 +549,46 @@ namespace XCharts
float totalWidth = 0;
float eachWidth = AxisHelper.GetEachWidth(yAxis, grid.runtimeHeight, dataZoom);
float gapWidth = yAxis.boundaryGap ? eachWidth / 2 : 0;
- if (yAxis.IsCategory()) splitNumber += 1;
+ float textWidth = yAxis.axisLabel.width > 0
+ ? yAxis.axisLabel.width
+ : grid.left;
+ float textHeight = yAxis.axisLabel.height > 0
+ ? yAxis.axisLabel.height
+ : 20f;
+ if (yAxis.IsCategory() && yAxis.boundaryGap)
+ {
+ splitNumber -= 1;
+ }
for (int i = 0; i < splitNumber; i++)
{
- ChartText txt;
+ ChartLabel txt;
var inside = yAxis.axisLabel.inside;
var isPercentStack = SeriesHelper.IsPercentStack(m_Series, SerieType.Bar);
var labelName = AxisHelper.GetLabelName(yAxis, grid.runtimeHeight, i, yAxis.runtimeMinValue,
yAxis.runtimeMaxValue, dataZoom, isPercentStack);
if ((inside && yAxis.IsLeft()) || (!inside && yAxis.IsRight()))
{
- txt = ChartHelper.AddTextObject(objName + i, axisObj.transform, Vector2.zero,
- Vector2.zero, new Vector2(0, 0.5f), new Vector2(grid.left, 20), axisLabelTextStyle,
- m_Theme.axis);
- txt.SetAlignment(TextAnchor.MiddleLeft);
+ txt = ChartHelper.AddAxisLabelObject(i, objName + i, axisObj.transform, Vector2.zero,
+ Vector2.zero, new Vector2(0, 0.5f), new Vector2(textWidth, textHeight), yAxis, theme.axis);
+ if (yAxis.axisLabel.autoAlign)
+ {
+ txt.label.SetAlignment(TextAnchor.MiddleLeft);
+ }
}
else
{
- txt = ChartHelper.AddTextObject(objName + i, axisObj.transform, Vector2.zero,
- Vector2.zero, new Vector2(1, 0.5f), new Vector2(grid.left, 20), axisLabelTextStyle,
- m_Theme.axis);
- txt.SetAlignment(TextAnchor.MiddleRight);
+ txt = ChartHelper.AddAxisLabelObject(i, objName + i, axisObj.transform, Vector2.zero,
+ Vector2.zero, new Vector2(1, 0.5f), new Vector2(textWidth, textHeight), yAxis, theme.axis);
+ if (yAxis.axisLabel.autoAlign)
+ {
+ txt.label.SetAlignment(TextAnchor.MiddleRight);
+ }
}
var labelWidth = AxisHelper.GetScaleWidth(yAxis, grid.runtimeHeight, i + 1, dataZoom);
- if (i == 0) yAxis.axisLabel.SetRelatedText(txt, labelWidth);
- txt.SetLocalPosition(GetLabelYPosition(totalWidth + gapWidth, i, yAxisIndex, yAxis));
+ if (i == 0) yAxis.axisLabel.SetRelatedText(txt.label, labelWidth);
+ txt.SetPosition(GetLabelYPosition(totalWidth + gapWidth, i, yAxisIndex, yAxis));
txt.SetText(labelName);
- txt.SetActive(yAxis.show && (yAxis.axisLabel.interval == 0 || i % (yAxis.axisLabel.interval + 1) == 0));
- yAxis.axisLabelTextList.Add(txt);
+ yAxis.runtimeAxisLabelList.Add(txt);
totalWidth += labelWidth;
}
if (yAxis.axisName.show)
@@ -654,8 +666,8 @@ namespace XCharts
var axisObj = ChartHelper.AddObject(objName, transform, graphAnchorMin,
graphAnchorMax, chartPivot, new Vector2(chartWidth, chartHeight));
xAxis.gameObject = axisObj;
- xAxis.axisLabelTextList.Clear();
- axisObj.SetActive(xAxis.show && xAxis.axisLabel.show);
+ xAxis.runtimeAxisLabelList.Clear();
+ axisObj.SetActive(xAxis.show);
axisObj.hideFlags = chartHideFlags;
ChartHelper.HideAllObject(axisObj);
var grid = GetAxisGridOrDefault(xAxis);
@@ -666,22 +678,33 @@ namespace XCharts
float totalWidth = 0;
float eachWidth = AxisHelper.GetEachWidth(xAxis, grid.runtimeWidth, dataZoom);
float gapWidth = xAxis.boundaryGap ? eachWidth / 2 : 0;
- float textWidth = AxisHelper.GetScaleWidth(xAxis, grid.runtimeWidth, 0, dataZoom);
- //if (xAxis.IsCategory() && xAxis.boundaryGap) splitNumber += 1;
+ float textWidth = xAxis.axisLabel.width > 0
+ ? xAxis.axisLabel.width
+ : AxisHelper.GetScaleWidth(xAxis, grid.runtimeWidth, 0, dataZoom);
+ float textHeight = xAxis.axisLabel.height > 0
+ ? xAxis.axisLabel.height
+ : 20f;
+ if (xAxis.IsCategory() && xAxis.boundaryGap)
+ {
+ splitNumber -= 1;
+ }
for (int i = 0; i < splitNumber; i++)
{
var labelWidth = AxisHelper.GetScaleWidth(xAxis, grid.runtimeWidth, i + 1, dataZoom);
var inside = xAxis.axisLabel.inside;
var isPercentStack = SeriesHelper.IsPercentStack(m_Series, SerieType.Bar);
- var txt = ChartHelper.AddTextObject(ChartCached.GetXAxisName(xAxisIndex, i), axisObj.transform, new Vector2(0, 1),
- new Vector2(0, 1), new Vector2(1, 0.5f), new Vector2(textWidth, 20), axisLabelTextStyle, theme.axis);
- if (i == 0) xAxis.axisLabel.SetRelatedText(txt, labelWidth);
- txt.SetAlignment(TextAnchor.MiddleCenter);
- txt.SetLocalPosition(GetLabelXPosition(totalWidth + textWidth / 2 + gapWidth, i, xAxisIndex, xAxis));
- txt.SetText(AxisHelper.GetLabelName(xAxis, grid.runtimeWidth, i, xAxis.runtimeMinValue, xAxis.runtimeMaxValue, dataZoom,
+ var label = ChartHelper.AddAxisLabelObject(i, ChartCached.GetXAxisName(xAxisIndex, i), axisObj.transform,
+ new Vector2(0, 1), new Vector2(0, 1), new Vector2(1, 0.5f), new Vector2(textWidth, textHeight), xAxis, theme.axis);
+
+ if (i == 0) xAxis.axisLabel.SetRelatedText(label.label, labelWidth);
+ if (xAxis.axisLabel.autoAlign)
+ {
+ label.label.SetAlignment(TextAnchor.MiddleCenter);
+ }
+ label.SetPosition(GetLabelXPosition(totalWidth + textWidth / 2 + gapWidth, i, xAxisIndex, xAxis));
+ label.SetText(AxisHelper.GetLabelName(xAxis, grid.runtimeWidth, i, xAxis.runtimeMinValue, xAxis.runtimeMaxValue, dataZoom,
isPercentStack));
- txt.SetActive(xAxis.show && (xAxis.axisLabel.interval == 0 || i % (xAxis.axisLabel.interval + 1) == 0));
- xAxis.axisLabelTextList.Add(txt);
+ xAxis.runtimeAxisLabelList.Add(label);
totalWidth += labelWidth;
}
if (xAxis.axisName.show)
@@ -807,7 +830,7 @@ namespace XCharts
posX = startX - yAxis.axisLabel.margin;
}
posX += yAxis.offset;
- return new Vector3(posX, grid.runtimeY + scaleWid, 0);
+ return new Vector3(posX, grid.runtimeY + scaleWid, 0) + yAxis.axisLabel.textStyle.offsetv3;
}
private Vector3 GetLabelXPosition(float scaleWid, int i, int xAxisIndex, XAxis xAxis)
@@ -827,7 +850,7 @@ namespace XCharts
posY = startY - xAxis.axisLabel.margin - fontSize / 2;
}
posY += xAxis.offset;
- return new Vector3(grid.runtimeX + scaleWid, posY);
+ return new Vector3(grid.runtimeX + scaleWid, posY) + xAxis.axisLabel.textStyle.offsetv3;
}
protected virtual void CheckMinMaxValue()
diff --git a/Assets/XCharts/Runtime/Internal/Object/ChartLabel.cs b/Assets/XCharts/Runtime/Internal/Object/ChartLabel.cs
index 52e02464..0d5aef6d 100644
--- a/Assets/XCharts/Runtime/Internal/Object/ChartLabel.cs
+++ b/Assets/XCharts/Runtime/Internal/Object/ChartLabel.cs
@@ -19,12 +19,33 @@ namespace XCharts
private RectTransform m_LabelRect;
private RectTransform m_IconRect;
private RectTransform m_ObjectRect;
+ private Vector3 m_IconOffest;
private Image m_IconImage;
- public GameObject gameObject { get { return m_GameObject; } }
- public Image icon { get { return m_IconImage; } }
- public ChartText label { get { return m_LabelText; } }
+ public GameObject gameObject
+ {
+ get { return m_GameObject; }
+ set
+ {
+ m_GameObject = value;
+ m_ObjectRect = value.GetComponent();
+ }
+ }
+ public Image icon
+ {
+ get { return m_IconImage; }
+ set { SetIcon(value); }
+ }
+ public ChartText label
+ {
+ get { return m_LabelText; }
+ set
+ {
+ m_LabelText = value;
+ if (value != null) m_LabelRect = m_LabelText.gameObject.GetComponent();
+ }
+ }
public ChartLabel()
{
@@ -41,6 +62,11 @@ namespace XCharts
m_ObjectRect = labelObj.GetComponent();
}
+ public void SetAutoSize(bool flag)
+ {
+ m_LabelAutoSize = flag;
+ }
+
public void SetIcon(Image image)
{
m_IconImage = image;
@@ -60,16 +86,17 @@ namespace XCharts
if (m_IconRect != null) m_IconRect.sizeDelta = new Vector3(width, height);
}
- public void UpdateIcon(IconStyle iconStyle)
+ public void UpdateIcon(IconStyle iconStyle, Sprite sprite = null)
{
if (m_IconImage == null) return;
if (iconStyle.show)
{
ChartHelper.SetActive(m_IconImage.gameObject, true);
- m_IconImage.sprite = iconStyle.sprite;
+ m_IconImage.sprite = sprite == null ? iconStyle.sprite : sprite;
m_IconImage.color = iconStyle.color;
m_IconRect.sizeDelta = new Vector2(iconStyle.width, iconStyle.height);
- m_IconImage.transform.localPosition = iconStyle.offset;
+ m_IconOffest = iconStyle.offset;
+ AdjustIconPos();
if (iconStyle.layer == IconStyle.Layer.UnderLabel)
m_IconRect.SetSiblingIndex(0);
else
@@ -144,12 +171,40 @@ namespace XCharts
if (sizeChange)
{
m_LabelRect.sizeDelta = newSize;
- m_ObjectRect.sizeDelta = newSize;
+ AdjustIconPos();
}
return sizeChange;
}
+ AdjustIconPos();
}
return false;
}
+
+ private void AdjustIconPos()
+ {
+ if (m_IconImage && m_IconImage.sprite != null && m_IconRect)
+ {
+ var iconX = 0f;
+ switch (m_LabelText.text.alignment)
+ {
+ case TextAnchor.LowerLeft:
+ case TextAnchor.UpperLeft:
+ case TextAnchor.MiddleLeft:
+ iconX = -m_ObjectRect.sizeDelta.x / 2 - m_IconRect.sizeDelta.x / 2;
+ break;
+ case TextAnchor.LowerRight:
+ case TextAnchor.UpperRight:
+ case TextAnchor.MiddleRight:
+ iconX = m_ObjectRect.sizeDelta.x / 2 - m_LabelText.GetPreferredWidth() - m_IconRect.sizeDelta.x / 2;
+ break;
+ case TextAnchor.LowerCenter:
+ case TextAnchor.UpperCenter:
+ case TextAnchor.MiddleCenter:
+ iconX = -m_LabelText.GetPreferredWidth() / 2 - m_IconRect.sizeDelta.x / 2;
+ break;
+ }
+ m_IconRect.anchoredPosition = m_IconOffest + new Vector3(iconX, 0);
+ }
+ }
}
}
diff --git a/Assets/XCharts/Runtime/Internal/Object/ChartObject.cs b/Assets/XCharts/Runtime/Internal/Object/ChartObject.cs
index 6ce5d80e..eb8de951 100644
--- a/Assets/XCharts/Runtime/Internal/Object/ChartObject.cs
+++ b/Assets/XCharts/Runtime/Internal/Object/ChartObject.cs
@@ -5,7 +5,6 @@
/* */
/************************************************/
-using System;
using UnityEngine;
namespace XCharts
diff --git a/Assets/XCharts/Runtime/Internal/Utility/ChartHelper.cs b/Assets/XCharts/Runtime/Internal/Utility/ChartHelper.cs
index fea5c6a3..719cbf1d 100644
--- a/Assets/XCharts/Runtime/Internal/Utility/ChartHelper.cs
+++ b/Assets/XCharts/Runtime/Internal/Utility/ChartHelper.cs
@@ -247,13 +247,13 @@ namespace XCharts
chartText.tmpText.alignment = textStyle.tmpAlignment;
chartText.tmpText.richText = true;
chartText.tmpText.raycastTarget = false;
- chartText.tmpText.enableWordWrapping = false;
+ chartText.tmpText.enableWordWrapping = textStyle.wrap;
#else
chartText.text = GetOrAddComponent(txtObj);
chartText.text.font = textStyle.font == null ? theme.font : textStyle.font;
chartText.text.fontStyle = textStyle.fontStyle;
chartText.text.alignment = textStyle.alignment;
- chartText.text.horizontalOverflow = HorizontalWrapMode.Overflow;
+ chartText.text.horizontalOverflow = textStyle.wrap ? HorizontalWrapMode.Wrap : HorizontalWrapMode.Overflow;
chartText.text.verticalOverflow = VerticalWrapMode.Overflow;
chartText.text.supportRichText = true;
chartText.text.raycastTarget = false;
@@ -387,7 +387,7 @@ namespace XCharts
return ChartHelper.GetOrAddComponent(painterObj);
}
- public static GameObject AddIcon(string name, Transform parent, float width, float height)
+ public static Image AddIcon(string name, Transform parent, float width, float height)
{
var anchorMax = new Vector2(0.5f, 0.5f);
var anchorMin = new Vector2(0.5f, 0.5f);
@@ -396,7 +396,29 @@ namespace XCharts
GameObject iconObj = AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta);
var img = GetOrAddComponent(iconObj);
img.raycastTarget = false;
- return iconObj;
+ return img;
+ }
+
+ public static ChartLabel AddAxisLabelObject(int index, string name, Transform parent, Vector2 anchorMin, Vector2 anchorMax,
+ Vector2 pivot, Vector2 sizeDelta, Axis axis, ComponentTheme theme)
+ {
+ var textStyle = axis.axisLabel.textStyle;
+ var iconStyle = axis.iconStyle;
+ var label = new ChartLabel();
+ label.gameObject = AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta);
+
+ // TODO: 为了兼容旧版本,这里后面版本可以去掉
+ var oldText = label.gameObject.GetComponent();
+ if (oldText != null)
+ {
+ GameObject.DestroyImmediate(oldText);
+ }
+ label.label = AddTextObject("Text", label.gameObject.transform, anchorMin, anchorMax, pivot, sizeDelta, textStyle, theme);
+ label.icon = ChartHelper.AddIcon("Icon", label.gameObject.transform, iconStyle.width, iconStyle.height);
+ label.SetAutoSize(false);
+ label.UpdateIcon(iconStyle, axis.GetIcon(index));
+ label.label.SetActive(axis.axisLabel.show && (axis.axisLabel.interval == 0 || index % (axis.axisLabel.interval + 1) == 0));
+ return label;
}
internal static GameObject AddSerieLabel(string name, Transform parent, float width, float height,
diff --git a/Assets/XCharts/Runtime/PolarChart.cs b/Assets/XCharts/Runtime/PolarChart.cs
index 8d5c1de5..7914bf86 100644
--- a/Assets/XCharts/Runtime/PolarChart.cs
+++ b/Assets/XCharts/Runtime/PolarChart.cs
@@ -46,6 +46,7 @@ namespace XCharts
m_Polars.Clear();
m_RadiusAxes.Clear();
m_AngleAxes.Clear();
+ InitComponent();
title.text = "PolarChart";
tooltip.type = Tooltip.Type.Corss;
RemoveData();
@@ -121,7 +122,7 @@ namespace XCharts
var m_AngleAxis = GetAngleAxis(m_Polar.index);
if (m_AngleAxis == null) return;
PolarHelper.UpdatePolarCenter(m_Polar, m_ChartPosition, m_ChartWidth, m_ChartHeight);
- axis.axisLabelTextList.Clear();
+ axis.runtimeAxisLabelList.Clear();
var radius = m_Polar.runtimeRadius;
var objName = "axis_radius" + axis.index;
var axisObj = ChartHelper.AddObject(objName, transform, graphAnchorMin,
@@ -144,21 +145,18 @@ namespace XCharts
{
float labelWidth = AxisHelper.GetScaleWidth(axis, radius, i, null);
bool inside = axis.axisLabel.inside;
- var txt = ChartHelper.AddTextObject(objName + i, axisObj.transform, new Vector2(0.5f, 0.5f),
- new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(labelWidth, txtHig), textStyle,
- m_Theme.axis);
- if (i == 0) axis.axisLabel.SetRelatedText(txt, labelWidth);
+ var label = ChartHelper.AddAxisLabelObject(i, objName + i, axisObj.transform, new Vector2(0.5f, 0.5f),
+ new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(labelWidth, txtHig), axis, theme.axis);
+ if (i == 0) axis.axisLabel.SetRelatedText(label.label, labelWidth);
var isPercentStack = SeriesHelper.IsPercentStack(m_Series, SerieType.Bar);
var labelName = AxisHelper.GetLabelName(axis, radius, i, axis.runtimeMinValue, axis.runtimeMaxValue,
null, isPercentStack);
- txt.SetAlignment(TextAnchor.MiddleCenter);
- txt.SetText(labelName);
- txt.SetActive(axis.show &&
- (axis.axisLabel.interval == 0 || i % (axis.axisLabel.interval + 1) == 0));
+ label.label.SetAlignment(TextAnchor.MiddleCenter);
+ label.SetText(labelName);
var pos = ChartHelper.GetPos(cenPos, totalWidth, startAngle, true) + tickVetor;
- txt.SetLocalPosition(pos);
- AxisHelper.AdjustRadiusAxisLabelPos(txt, pos, cenPos, txtHig, Vector3.zero);
- axis.axisLabelTextList.Add(txt);
+ label.SetPosition(pos);
+ AxisHelper.AdjustRadiusAxisLabelPos(label.label, pos, cenPos, txtHig, Vector3.zero);
+ axis.runtimeAxisLabelList.Add(label);
totalWidth += labelWidth;
}
@@ -207,13 +205,13 @@ namespace XCharts
if (m_Polars == null) return;
PolarHelper.UpdatePolarCenter(m_Polar, m_ChartPosition, m_ChartWidth, m_ChartHeight);
var radius = m_Polar.runtimeRadius;
- axis.axisLabelTextList.Clear();
+ axis.runtimeAxisLabelList.Clear();
string objName = "axis_angle" + axis.index;
var axisObj = ChartHelper.AddObject(objName, transform, graphAnchorMin,
graphAnchorMax, chartPivot, new Vector2(chartWidth, chartHeight));
axisObj.transform.localPosition = Vector3.zero;
- axisObj.SetActive(axis.show && axis.axisLabel.show);
+ axisObj.SetActive(axis.show);
axisObj.hideFlags = chartHideFlags;
ChartHelper.HideAllObject(axisObj);
var splitNumber = AxisHelper.GetSplitNumber(axis, radius, null);
@@ -228,18 +226,18 @@ namespace XCharts
{
float scaleAngle = AxisHelper.GetScaleWidth(axis, total, i, null);
bool inside = axis.axisLabel.inside;
- var txt = ChartHelper.AddTextObject(objName + i, axisObj.transform, new Vector2(0.5f, 0.5f),
- new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(scaleAngle, txtHig),
- axis.axisLabel.textStyle, m_Theme.axis);
- txt.SetAlignment(TextAnchor.MiddleCenter);
- txt.SetText(AxisHelper.GetLabelName(axis, total, i, axis.runtimeMinValue, axis.runtimeMaxValue,
+
+ var label = ChartHelper.AddAxisLabelObject(i, objName + i, axisObj.transform, new Vector2(0.5f, 0.5f),
+ new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(scaleAngle, txtHig), axis, theme.axis);
+
+ label.label.SetAlignment(TextAnchor.MiddleCenter);
+ label.SetText(AxisHelper.GetLabelName(axis, total, i, axis.runtimeMinValue, axis.runtimeMaxValue,
null, isPercentStack));
- txt.SetActive(axis.show && (axis.axisLabel.interval == 0 || i % (axis.axisLabel.interval + 1) == 0));
var pos = ChartHelper.GetPos(cenPos, radius + margin,
isCategory ? (totalAngle + scaleAngle / 2) : totalAngle, true);
- AxisHelper.AdjustCircleLabelPos(txt, pos, cenPos, txtHig, Vector3.zero);
- if (i == 0) axis.axisLabel.SetRelatedText(txt, scaleAngle);
- axis.axisLabelTextList.Add(txt);
+ AxisHelper.AdjustCircleLabelPos(label, pos, cenPos, txtHig, Vector3.zero);
+ if (i == 0) axis.axisLabel.SetRelatedText(label.label, scaleAngle);
+ axis.runtimeAxisLabelList.Add(label);
totalAngle += scaleAngle;
}