diff --git a/CHANGELOG.md b/CHANGELOG.md
index bed08747..4d4eadcf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -57,6 +57,9 @@
## master
+* (2022.07.19) 增加`Axis`的`MinorSplitLine`设置坐标轴次分割线
+* (2022.07.19) 增加`Axis`的`MinorTick`设置坐标轴次刻度
+* (2022.07.17) 增加`Radar`的`smooth`参数设置平滑曲线
* (2022.07.15) 增加`DataZoom`对`Time`时间轴的支持
## 3.1.0
diff --git a/Documentation/XChartsAPI-EN.md b/Documentation/XChartsAPI-EN.md
index 0b26bdc4..ea59ea32 100644
--- a/Documentation/XChartsAPI-EN.md
+++ b/Documentation/XChartsAPI-EN.md
@@ -130,11 +130,14 @@ Inherits or Implemented: [MainComponentHandler](#MainComponentHandler)
| `GetAxisValueDistance()` |public static float GetAxisValueDistance(GridCoord grid, Axis axis, float scaleWidth, double value)获得数值value在坐标轴上相对起点的距离 |
| `GetAxisValueLength()` |public static float GetAxisValueLength(GridCoord grid, Axis axis, float scaleWidth, double value)获得数值value在坐标轴上对应的长度 |
| `GetAxisValuePosition()` |public static float GetAxisValuePosition(GridCoord grid, Axis axis, float scaleWidth, double value)获得数值value在坐标轴上的坐标位置 |
+| `GetAxisXOrY()` |public static float GetAxisXOrY(GridCoord grid, Axis axis, Axis relativedAxis) |
| `GetDataWidth()` |public static float GetDataWidth(Axis axis, float coordinateWidth, int dataCount, DataZoom dataZoom)获得一个类目数据在坐标系中代表的宽度 |
| `GetEachWidth()` |public static float GetEachWidth(Axis axis, float coordinateWidth, DataZoom dataZoom = null) |
| `GetScaleNumber()` |public static int GetScaleNumber(Axis axis, float coordinateWidth, DataZoom dataZoom = null)获得分割线条数 |
| `GetScaleWidth()` |public static float GetScaleWidth(Axis axis, float coordinateWidth, int index, DataZoom dataZoom = null)获得分割段宽度 |
| `GetSplitNumber()` |public static int GetSplitNumber(Axis axis, float coordinateWid, DataZoom dataZoom)获得分割段数 |
+| `GetXAxisXOrY()` |public static float GetXAxisXOrY(GridCoord grid, Axis xAxis, Axis relativedAxis) |
+| `GetYAxisXOrY()` |public static float GetYAxisXOrY(GridCoord grid, Axis yAxis, Axis relativedAxis) |
| `NeedShowSplit()` |public static bool NeedShowSplit(Axis axis) |
## `BarChart`
diff --git a/Documentation/XChartsAPI-ZH.md b/Documentation/XChartsAPI-ZH.md
index bfba19fd..9d8218e4 100644
--- a/Documentation/XChartsAPI-ZH.md
+++ b/Documentation/XChartsAPI-ZH.md
@@ -130,11 +130,14 @@ Inherits or Implemented: [MainComponentHandler](#MainComponentHandler)
| `GetAxisValueDistance()` |public static float GetAxisValueDistance(GridCoord grid, Axis axis, float scaleWidth, double value)获得数值value在坐标轴上相对起点的距离 |
| `GetAxisValueLength()` |public static float GetAxisValueLength(GridCoord grid, Axis axis, float scaleWidth, double value)获得数值value在坐标轴上对应的长度 |
| `GetAxisValuePosition()` |public static float GetAxisValuePosition(GridCoord grid, Axis axis, float scaleWidth, double value)获得数值value在坐标轴上的坐标位置 |
+| `GetAxisXOrY()` |public static float GetAxisXOrY(GridCoord grid, Axis axis, Axis relativedAxis) |
| `GetDataWidth()` |public static float GetDataWidth(Axis axis, float coordinateWidth, int dataCount, DataZoom dataZoom)获得一个类目数据在坐标系中代表的宽度 |
| `GetEachWidth()` |public static float GetEachWidth(Axis axis, float coordinateWidth, DataZoom dataZoom = null) |
| `GetScaleNumber()` |public static int GetScaleNumber(Axis axis, float coordinateWidth, DataZoom dataZoom = null)获得分割线条数 |
| `GetScaleWidth()` |public static float GetScaleWidth(Axis axis, float coordinateWidth, int index, DataZoom dataZoom = null)获得分割段宽度 |
| `GetSplitNumber()` |public static int GetSplitNumber(Axis axis, float coordinateWid, DataZoom dataZoom)获得分割段数 |
+| `GetXAxisXOrY()` |public static float GetXAxisXOrY(GridCoord grid, Axis xAxis, Axis relativedAxis) |
+| `GetYAxisXOrY()` |public static float GetYAxisXOrY(GridCoord grid, Axis yAxis, Axis relativedAxis) |
| `NeedShowSplit()` |public static bool NeedShowSplit(Axis axis) |
## `BarChart`
diff --git a/Documentation/XChartsConfiguration-EN.md b/Documentation/XChartsConfiguration-EN.md
index f1cdde1e..6af10094 100644
--- a/Documentation/XChartsConfiguration-EN.md
+++ b/Documentation/XChartsConfiguration-EN.md
@@ -76,6 +76,8 @@
- [ArrowStyle](#ArrowStyle)
- [AxisLabel](#AxisLabel)
- [AxisLine](#AxisLine)
+- [AxisMinorSplitLine](#AxisMinorSplitLine)
+- [AxisMinorTick](#AxisMinorTick)
- [AxisName](#AxisName)
- [AxisSplitArea](#AxisSplitArea)
- [AxisSplitLine](#AxisSplitLine)
@@ -263,8 +265,10 @@ The axis in rectangular coordinate.
|`axisLine`|||axis Line. [AxisLine](#AxisLine)|
|`axisName`|||axis name. [AxisName](#AxisName)|
|`axisTick`|||axis tick. [AxisTick](#AxisTick)|
+|`minorTick`|||axis minor tick. [AxisMinorTick](#AxisMinorTick)|
|`axisLabel`|||axis label. [AxisLabel](#AxisLabel)|
|`splitLine`|||axis split line. [AxisSplitLine](#AxisSplitLine)|
+|`minorSplitLine`|||axis minor split line. [AxisMinorSplitLine](#AxisMinorSplitLine)|
|`splitArea`|||axis split area. [AxisSplitArea](#AxisSplitArea)|
## `AxisLabel`
@@ -295,6 +299,28 @@ Settings related to axis line.
|`showArrow`|||Whether to show the arrow symbol of axis.
|`arrow`|||the arrow of line. [ArrowStyle](#ArrowStyle)|
+## `AxisMinorSplitLine`
+
+Inherits or Implemented: [BaseLine](#BaseLine)
+
+Minor split line of axis in grid area.
+
+|field|default|since|comment|
+|--|--|--|--|
+|`distance`|||The distance between the split line and axis line.
+|`autoColor`|||auto color.
+
+## `AxisMinorTick`
+
+Inherits or Implemented: [BaseLine](#BaseLine)
+
+Settings related to axis minor tick.
+
+|field|default|since|comment|
+|--|--|--|--|
+|`splitNumber`|5||Number of segments that the axis is split into.
+|`autoColor`|||
+
## `AxisName`
Inherits or Implemented: [ChildComponent](#ChildComponent)
@@ -384,7 +410,8 @@ Inherits or Implemented: [ComponentTheme](#ComponentTheme)
|`splitLineType`|||the type of split line.`LineStyle.Type`:- `Solid`: 实线- `Dashed`: 虚线- `Dotted`: 点线- `DashDot`: 点划线- `DashDotDot`: 双点划线- `None`: 双点划线|
|`splitLineWidth`|1f||the width of split line.
|`splitLineLength`|0f||the length of split line.
-|`splitLineColor`|||the color of line.
+|`splitLineColor`|||the color of split line.
+|`minorSplitLineColor`|||the color of minor split line.
|`tickWidth`|1f||the width of tick.
|`tickLength`|5f||the length of tick.
|`tickColor`|||the color of tick.
@@ -994,6 +1021,9 @@ Polar coordinate can be used in scatter and line chart. Every polar coordinate h
Inherits or Implemented: [Serie](#Serie),[INeedSerieContainer](#INeedSerieContainer)
+|field|default|since|comment|
+|--|--|--|--|
+|`smooth`|false|3.2.0|Whether use smooth curve.
## `RadarAxisTheme`
diff --git a/Documentation/XChartsConfiguration-ZH.md b/Documentation/XChartsConfiguration-ZH.md
index 78aad72c..42e46a7e 100644
--- a/Documentation/XChartsConfiguration-ZH.md
+++ b/Documentation/XChartsConfiguration-ZH.md
@@ -76,6 +76,8 @@
- [ArrowStyle](#ArrowStyle)
- [AxisLabel](#AxisLabel)
- [AxisLine](#AxisLine)
+- [AxisMinorSplitLine](#AxisMinorSplitLine)
+- [AxisMinorTick](#AxisMinorTick)
- [AxisName](#AxisName)
- [AxisSplitArea](#AxisSplitArea)
- [AxisSplitLine](#AxisSplitLine)
@@ -263,8 +265,10 @@ Inherits or Implemented: [MainComponent](#MainComponent)
|`axisLine`|||坐标轴轴线。 [AxisLine](#AxisLine)|
|`axisName`|||坐标轴名称。 [AxisName](#AxisName)|
|`axisTick`|||坐标轴刻度。 [AxisTick](#AxisTick)|
+|`minorTick`|||坐标轴次刻度。 [AxisMinorTick](#AxisMinorTick)|
|`axisLabel`|||坐标轴刻度标签。 [AxisLabel](#AxisLabel)|
|`splitLine`|||坐标轴分割线。 [AxisSplitLine](#AxisSplitLine)|
+|`minorSplitLine`|||坐标轴次分割线。 [AxisMinorSplitLine](#AxisMinorSplitLine)|
|`splitArea`|||坐标轴分割区域。 [AxisSplitArea](#AxisSplitArea)|
## `AxisLabel`
@@ -295,6 +299,28 @@ Inherits or Implemented: [BaseLine](#BaseLine)
|`showArrow`|||是否显示箭头。
|`arrow`|||轴线箭头。 [ArrowStyle](#ArrowStyle)|
+## `AxisMinorSplitLine`
+
+Inherits or Implemented: [BaseLine](#BaseLine)
+
+坐标轴在 grid 区域中的次分隔线。次分割线会对齐次刻度线 minorTick。
+
+|field|default|since|comment|
+|--|--|--|--|
+|`distance`|||刻度线与轴线的距离。
+|`autoColor`|||自动设置颜色。
+
+## `AxisMinorTick`
+
+Inherits or Implemented: [BaseLine](#BaseLine)
+
+坐标轴次刻度相关设置。注意:次刻度无法再类目轴中使用。
+
+|field|default|since|comment|
+|--|--|--|--|
+|`splitNumber`|5||分隔线之间分割的刻度数。
+|`autoColor`|||
+
## `AxisName`
Inherits or Implemented: [ChildComponent](#ChildComponent)
@@ -385,6 +411,7 @@ Inherits or Implemented: [ComponentTheme](#ComponentTheme)
|`splitLineWidth`|1f||分割线线宽。
|`splitLineLength`|0f||分割线线长。
|`splitLineColor`|||分割线线颜色。
+|`minorSplitLineColor`|||次分割线线颜色。
|`tickWidth`|1f||刻度线线宽。
|`tickLength`|5f||刻度线线长。
|`tickColor`|||坐标轴线颜色。
@@ -994,6 +1021,9 @@ Inherits or Implemented: [CoordSystem](#CoordSystem),[ISerieContainer](#ISerieCo
Inherits or Implemented: [Serie](#Serie),[INeedSerieContainer](#INeedSerieContainer)
+|field|default|since|comment|
+|--|--|--|--|
+|`smooth`|false|3.2.0|是否平滑曲线。平滑曲线时不支持区域填充颜色。
## `RadarAxisTheme`
diff --git a/Editor/ChildComponents/LineDrawer.cs b/Editor/ChildComponents/LineDrawer.cs
index b3d4896d..002d520c 100644
--- a/Editor/ChildComponents/LineDrawer.cs
+++ b/Editor/ChildComponents/LineDrawer.cs
@@ -47,6 +47,18 @@ namespace XCharts.Editor
}
}
+ [CustomPropertyDrawer(typeof(AxisMinorSplitLine), true)]
+ public class AxisMinorSplitLineDrawer : BaseLineDrawer
+ {
+ public override string ClassName { get { return "MinorSplitLine"; } }
+ protected override void DrawExtendeds(SerializedProperty prop)
+ {
+ base.DrawExtendeds(prop);
+ //PropertyField(prop, "m_Distance");
+ //PropertyField(prop, "m_AutoColor");
+ }
+ }
+
[CustomPropertyDrawer(typeof(AxisTick), true)]
public class AxisTickDrawer : BaseLineDrawer
{
@@ -63,4 +75,16 @@ namespace XCharts.Editor
PropertyField(prop, "m_AutoColor");
}
}
+
+ [CustomPropertyDrawer(typeof(AxisMinorTick), true)]
+ public class AxisMinorTickDrawer : BaseLineDrawer
+ {
+ public override string ClassName { get { return "MinorTick"; } }
+ protected override void DrawExtendeds(SerializedProperty prop)
+ {
+ base.DrawExtendeds(prop);
+ PropertyField(prop, "m_SplitNumber");
+ //PropertyField(prop, "m_AutoColor");
+ }
+ }
}
\ No newline at end of file
diff --git a/Editor/MainComponents/AxisEditor.cs b/Editor/MainComponents/AxisEditor.cs
index 47868ac1..46e1bac4 100644
--- a/Editor/MainComponents/AxisEditor.cs
+++ b/Editor/MainComponents/AxisEditor.cs
@@ -70,7 +70,6 @@ namespace XCharts.Editor
else
{
PropertyField("m_Interval");
- PropertyField("m_BoundaryGap");
}
DrawExtendeds();
PropertyField("m_AxisLine");
@@ -79,6 +78,11 @@ namespace XCharts.Editor
PropertyField("m_AxisLabel");
PropertyField("m_SplitLine");
PropertyField("m_SplitArea");
+ if (type != Axis.AxisType.Category)
+ {
+ PropertyField("m_MinorTick");
+ PropertyField("m_MinorSplitLine");
+ }
PropertyListField("m_Icons", true);
if (type == Axis.AxisType.Category)
{
@@ -93,12 +97,10 @@ namespace XCharts.Editor
}
[ComponentEditor(typeof(XAxis))]
- public class XAxisEditor : AxisEditor
- { }
+ public class XAxisEditor : AxisEditor { }
[ComponentEditor(typeof(YAxis))]
- public class YAxisEditor : AxisEditor
- { }
+ public class YAxisEditor : AxisEditor { }
[ComponentEditor(typeof(SingleAxis))]
public class SingleAxisEditor : AxisEditor
@@ -128,12 +130,10 @@ namespace XCharts.Editor
}
[ComponentEditor(typeof(RadiusAxis))]
- public class RadiusAxisEditor : AxisEditor
- { }
+ public class RadiusAxisEditor : AxisEditor { }
[ComponentEditor(typeof(ParallelAxis))]
- public class ParallelAxisEditor : AxisEditor
- { }
+ public class ParallelAxisEditor : AxisEditor { }
[CustomPropertyDrawer(typeof(AxisLabel), true)]
public class AxisLabelDrawer : BasePropertyDrawer
diff --git a/Runtime/Component/Axis/Axis.cs b/Runtime/Component/Axis/Axis.cs
index b51f9461..fe42a520 100644
--- a/Runtime/Component/Axis/Axis.cs
+++ b/Runtime/Component/Axis/Axis.cs
@@ -98,8 +98,10 @@ namespace XCharts.Runtime
[SerializeField] protected AxisLine m_AxisLine = AxisLine.defaultAxisLine;
[SerializeField] protected AxisName m_AxisName = AxisName.defaultAxisName;
[SerializeField] protected AxisTick m_AxisTick = AxisTick.defaultTick;
+ [SerializeField] protected AxisMinorTick m_MinorTick = AxisMinorTick.defaultMinorTick;
[SerializeField] protected AxisLabel m_AxisLabel = AxisLabel.defaultAxisLabel;
[SerializeField] protected AxisSplitLine m_SplitLine = AxisSplitLine.defaultSplitLine;
+ [SerializeField] protected AxisMinorSplitLine m_MinorSplitLine = AxisMinorSplitLine.defaultMinorSplitLine;
[SerializeField] protected AxisSplitArea m_SplitArea = AxisSplitArea.defaultSplitArea;
public AxisContext context = new AxisContext();
@@ -352,6 +354,24 @@ namespace XCharts.Runtime
set { if (value != null) { m_SplitArea = value; SetVerticesDirty(); } }
}
///
+ /// axis minor tick.
+ /// |坐标轴次刻度。
+ ///
+ public AxisMinorTick minorTick
+ {
+ get { return m_MinorTick; }
+ set { if (value != null) { m_MinorTick = value; SetVerticesDirty(); } }
+ }
+ ///
+ /// axis minor split line.
+ /// |坐标轴次分割线。
+ ///
+ public AxisMinorSplitLine minorSplitLine
+ {
+ get { return m_MinorSplitLine; }
+ set { if (value != null) { m_MinorSplitLine = value; SetVerticesDirty(); } }
+ }
+ ///
/// Whether to add new data at the head or at the end of the list.
/// |添加新数据时是在列表的头部还是尾部加入。
///
@@ -369,7 +389,9 @@ namespace XCharts.Runtime
axisLine.anyDirty ||
axisTick.anyDirty ||
splitLine.anyDirty ||
- splitArea.anyDirty;
+ splitArea.anyDirty ||
+ minorTick.anyDirty ||
+ minorSplitLine.anyDirty;
}
}
@@ -398,6 +420,8 @@ namespace XCharts.Runtime
axisTick.ClearVerticesDirty();
splitLine.ClearVerticesDirty();
splitArea.ClearVerticesDirty();
+ minorTick.ClearVerticesDirty();
+ minorSplitLine.ClearVerticesDirty();
}
public override void SetComponentDirty()
@@ -429,6 +453,8 @@ namespace XCharts.Runtime
axis.axisLabel = axisLabel.Clone();
axis.splitLine = splitLine.Clone();
axis.splitArea = splitArea.Clone();
+ axis.minorTick = minorTick.Clone();
+ axis.minorSplitLine = minorSplitLine.Clone();
axis.icons = new List();
axis.data = new List();
ChartHelper.CopyList(axis.data, data);
@@ -457,6 +483,8 @@ namespace XCharts.Runtime
axisLabel.Copy(axis.axisLabel);
splitLine.Copy(axis.splitLine);
splitArea.Copy(axis.splitArea);
+ minorTick.Copy(axis.minorTick);
+ minorSplitLine.Copy(axis.minorSplitLine);
ChartHelper.CopyList(data, axis.data);
ChartHelper.CopyList(icons, axis.icons);
}
@@ -664,6 +692,18 @@ namespace XCharts.Runtime
}
}
+ public float GetValueLength(double value, float axisLength)
+ {
+ if (context.minMaxRange > 0)
+ {
+ return axisLength * ((float) (value / context.minMaxRange));
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
///
/// 获得指定区域缩放的类目数据列表
///
@@ -788,5 +828,16 @@ namespace XCharts.Runtime
else
return 0;
}
+
+ public void UpdateZeroOffset(float axisLength)
+ {
+ context.offset = context.minValue > 0 || context.minMaxRange == 0?
+ 0 :
+ (context.maxValue < 0 ?
+ axisLength :
+ (float) (Math.Abs(context.minValue) * (axisLength /
+ (Math.Abs(context.minValue) + Math.Abs(context.maxValue))))
+ );
+ }
}
}
\ No newline at end of file
diff --git a/Runtime/Component/Axis/AxisContext.cs b/Runtime/Component/Axis/AxisContext.cs
index 37fcf14e..5a50c1e4 100644
--- a/Runtime/Component/Axis/AxisContext.cs
+++ b/Runtime/Component/Axis/AxisContext.cs
@@ -7,9 +7,21 @@ namespace XCharts.Runtime
public class AxisContext : MainComponentContext
{
public Orient orient;
+ ///
+ /// 坐标轴的起点X
+ ///
public float x;
+ ///
+ /// 坐标轴的起点Y
+ ///
public float y;
+ ///
+ /// 坐标轴原点X
+ ///
public float zeroX;
+ ///
+ /// 坐标轴原点Y
+ ///
public float zeroY;
public float width;
public float height;
@@ -34,6 +46,11 @@ namespace XCharts.Runtime
///
public float offset;
public double minMaxRange;
+ ///
+ /// the tick value of value axis.
+ /// |数值轴时每个tick的数值。
+ ///
+ public double tickValue;
public float scaleWidth;
public float startAngle;
public double pointerValue;
diff --git a/Runtime/Component/Axis/AxisHandler.cs b/Runtime/Component/Axis/AxisHandler.cs
index aa290a88..3e1a4de5 100644
--- a/Runtime/Component/Axis/AxisHandler.cs
+++ b/Runtime/Component/Axis/AxisHandler.cs
@@ -24,7 +24,7 @@ namespace XCharts
return Vector3.zero;
}
- protected virtual float GetAxisLineXOrY()
+ internal virtual float GetAxisLineXOrY()
{
return 0;
}
@@ -38,7 +38,7 @@ namespace XCharts
return;
if (!grid.context.isPointerEnter)
{
- axis.context.pointerValue = double.PositiveInfinity;
+ axis.context.pointerValue = double.NaN;
}
else
{
@@ -171,31 +171,11 @@ namespace XCharts
var grid = chart.GetChartComponent(axis.gridIndex);
if (grid != null && axis is XAxis && axis.IsValue())
{
- axis.context.offset = axis.context.minValue > 0 ?
- 0 :
- (axis.context.maxValue < 0 ?
- grid.context.width :
- (float) (Math.Abs(axis.context.minValue) * (grid.context.width /
- (Math.Abs(axis.context.minValue) + Math.Abs(axis.context.maxValue))))
- );
- axis.context.x = grid.context.x;
- axis.context.y = GetAxisLineXOrY();
- axis.context.zeroY = grid.context.y;
- axis.context.zeroX = grid.context.x - (float) (axis.context.minValue * grid.context.width / axis.context.minMaxRange);
+ axis.UpdateZeroOffset(grid.context.width);
}
if (grid != null && axis is YAxis && axis.IsValue())
{
- axis.context.offset = axis.context.minValue > 0 ?
- 0 :
- (axis.context.maxValue < 0 ?
- grid.context.height :
- (float) (Math.Abs(axis.context.minValue) * (grid.context.height /
- (Math.Abs(axis.context.minValue) + Math.Abs(axis.context.maxValue))))
- );
- axis.context.x = GetAxisLineXOrY();
- axis.context.y = grid.context.y;
- axis.context.zeroX = grid.context.x;
- axis.context.zeroY = grid.context.y - (float) (axis.context.minValue * grid.context.height / axis.context.minMaxRange);
+ axis.UpdateZeroOffset(grid.context.height);
}
}
@@ -260,6 +240,7 @@ namespace XCharts
}
}
var value = 0d;
+ axis.context.tickValue = tick;
if (Mathf.Approximately((float) (axis.context.minValue % tick), 0))
{
value = axis.context.minValue;
@@ -581,24 +562,21 @@ namespace XCharts
if (AxisHelper.NeedShowSplit(axis))
{
var size = AxisHelper.GetScaleNumber(axis, axisLength, dataZoom);
-
- var current = orient == Orient.Horizonal ?
- startX :
- startY;
-
+ var tickWidth = axis.axisTick.GetWidth(theme.tickWidth);
+ var tickColor = axis.axisTick.GetColor(theme.tickColor);
+ var current = orient == Orient.Horizonal ? startX : startY;
+ var lastTickX = 0f;
+ var lastTickY = 0f;
+ var minorTickSplitNumber = axis.minorTick.splitNumber <= 0 ? 5 : axis.minorTick.splitNumber;
+ var minorTickDistance = axis.GetValueLength(axis.context.tickValue / minorTickSplitNumber, axisLength);
+ var minorTickColor = axis.minorTick.GetColor(theme.tickColor);
+ var minorTickWidth = axis.minorTick.GetWidth(theme.tickWidth);
+ var minorTickLength = axis.minorTick.GetLength(theme.tickLength * 0.6f);
for (int i = 0; i < size; i++)
{
var scaleWidth = AxisHelper.GetScaleWidth(axis, axisLength, i + 1, dataZoom);
- if (i == 0 && (!axis.axisTick.showStartTick || axis.axisTick.alignWithLabel))
- {
- current += scaleWidth;
- continue;
- }
- if (i == size - 1 && !axis.axisTick.showEndTick)
- {
- current += scaleWidth;
- continue;
- }
+ var hideTick = (i == 0 && (!axis.axisTick.showStartTick || axis.axisTick.alignWithLabel)) ||
+ (i == size - 1 && !axis.axisTick.showEndTick);
if (axis.axisTick.show)
{
if (orient == Orient.Horizonal)
@@ -612,21 +590,44 @@ namespace XCharts
var sY = 0f;
var eY = 0f;
+ var mY = 0f;
if ((axis.axisTick.inside && axis.IsBottom()) ||
(!axis.axisTick.inside && axis.IsTop()))
{
sY = startY + lineWidth;
eY = sY + tickLength;
+ mY = sY + minorTickLength;
}
else
{
sY = startY - lineWidth;
eY = sY - tickLength;
+ mY = sY - minorTickLength;
}
-
- UGL.DrawLine(vh, new Vector3(pX, sY), new Vector3(pX, eY),
- axis.axisTick.GetWidth(theme.tickWidth),
- axis.axisTick.GetColor(theme.tickColor));
+ if (!hideTick)
+ UGL.DrawLine(vh, new Vector3(pX, sY), new Vector3(pX, eY), tickWidth, tickColor);
+ if (axis.minorTick.show && i > 0 && minorTickDistance > 0)
+ {
+ if (lastTickX <= axis.context.zeroX || (i == 1 && pX > axis.context.zeroX))
+ {
+ var tickTotal = pX - minorTickDistance;
+ while (tickTotal > lastTickX)
+ {
+ UGL.DrawLine(vh, new Vector3(tickTotal, sY), new Vector3(tickTotal, mY), minorTickWidth, minorTickColor);
+ tickTotal -= minorTickDistance;
+ }
+ }
+ else
+ {
+ var tickTotal = lastTickX + minorTickDistance;
+ while (tickTotal < pX)
+ {
+ UGL.DrawLine(vh, new Vector3(tickTotal, sY), new Vector3(tickTotal, mY), minorTickWidth, minorTickColor);
+ tickTotal += minorTickDistance;
+ }
+ }
+ }
+ lastTickX = pX;
}
else
{
@@ -639,21 +640,46 @@ namespace XCharts
var sX = 0f;
var eX = 0f;
+ var mX = 0f;
if ((axis.axisTick.inside && axis.IsLeft()) ||
(!axis.axisTick.inside && axis.IsRight()))
{
sX = startX + lineWidth;
eX = sX + tickLength;
+ mX = sX + minorTickLength;
}
else
{
sX = startX - lineWidth;
eX = sX - tickLength;
+ mX = sX - minorTickLength;
}
+ if (!hideTick)
+ UGL.DrawLine(vh, new Vector3(sX, pY), new Vector3(eX, pY), tickWidth, tickColor);
+ if (axis.minorTick.show && i > 0 && minorTickDistance > 0)
+ {
+ if (lastTickY <= axis.context.zeroY || (i == 1 && pY > axis.context.zeroY))
+ {
+ var tickTotal = pY - minorTickDistance;
+ while (tickTotal > lastTickY)
+ {
- UGL.DrawLine(vh, new Vector3(sX, pY), new Vector3(eX, pY),
- axis.axisTick.GetWidth(theme.tickWidth),
- axis.axisTick.GetColor(theme.tickColor));
+ UGL.DrawLine(vh, new Vector3(sX, tickTotal), new Vector3(mX, tickTotal), minorTickWidth, minorTickColor);
+ tickTotal -= minorTickDistance;
+ }
+ }
+ else
+ {
+ var tickTotal = lastTickY + minorTickDistance;
+ while (tickTotal < pY)
+ {
+
+ UGL.DrawLine(vh, new Vector3(sX, tickTotal), new Vector3(mX, tickTotal), minorTickWidth, minorTickColor);
+ tickTotal += minorTickDistance;
+ }
+ }
+ }
+ lastTickY = pY;
}
}
current += scaleWidth;
@@ -707,9 +733,12 @@ namespace XCharts
}
protected void DrawAxisSplit(VertexHelper vh, AxisTheme theme, DataZoom dataZoom,
- Orient orient, float startX, float startY, float axisLength, float splitLength, Axis relativedAxis = null)
+ Orient orient, float startX, float startY, float axisLength, float splitLength,
+ Axis relativedAxis = null)
{
Axis axis = component;
+ var axisLineWidth = axis.axisLine.GetWidth(theme.lineWidth);
+ splitLength -= axisLineWidth;
var lineColor = axis.splitLine.GetColor(theme.splitLineColor);
var lineWidth = axis.splitLine.GetWidth(theme.lineWidth);
var lineType = axis.splitLine.GetType(theme.splitLineType);
@@ -725,6 +754,14 @@ namespace XCharts
var current = orient == Orient.Horizonal ?
startX :
startY;
+
+ var lastSplitX = 0f;
+ var lastSplitY = 0f;
+ var minorTickSplitNumber = axis.minorTick.splitNumber <= 0 ? 5 : axis.minorTick.splitNumber;
+ var minorTickDistance = axis.GetValueLength(axis.context.tickValue / minorTickSplitNumber, axisLength);
+ var minorSplitLineColor = axis.minorSplitLine.GetColor(theme.minorSplitLineColor);
+ var minorLineWidth = axis.minorSplitLine.GetWidth(theme.lineWidth);
+ var minorLineType = axis.minorSplitLine.GetType(theme.splitLineType);
for (int i = 0; i < size; i++)
{
var scaleWidth = AxisHelper.GetScaleWidth(axis, axisLength, axis.IsTime() ? i : i + 1, dataZoom);
@@ -760,23 +797,99 @@ namespace XCharts
{
if (orient == Orient.Horizonal)
{
- if (relativedAxis == null || !MathUtil.Approximately(current, GetAxisLineXOrY()))
+ if (relativedAxis == null || !MathUtil.Approximately(current, relativedAxis.context.x))
+ {
ChartDrawer.DrawLineStyle(vh,
lineType,
lineWidth,
new Vector3(current, startY),
new Vector3(current, startY + splitLength),
lineColor);
+ }
+ if (axis.minorSplitLine.show && i > 0 && minorTickDistance > 0)
+ {
+ if (lastSplitX <= axis.context.zeroX || (i == 1 && current > axis.context.zeroX))
+ {
+ var tickTotal = current - minorTickDistance;
+ var count = 0;
+ while (tickTotal > lastSplitX && count < minorTickSplitNumber - 1)
+ {
+ ChartDrawer.DrawLineStyle(vh,
+ minorLineType,
+ minorLineWidth,
+ new Vector3(tickTotal, startY),
+ new Vector3(tickTotal, startY + splitLength),
+ minorSplitLineColor);
+ count++;
+ tickTotal -= minorTickDistance;
+ }
+ }
+ else
+ {
+ var tickTotal = lastSplitX + minorTickDistance;
+ var count = 0;
+ while (tickTotal < current && count < minorTickSplitNumber - 1)
+ {
+ ChartDrawer.DrawLineStyle(vh,
+ minorLineType,
+ minorLineWidth,
+ new Vector3(tickTotal, startY),
+ new Vector3(tickTotal, startY + splitLength),
+ minorSplitLineColor);
+ count++;
+ tickTotal += minorTickDistance;
+ }
+ }
+ }
+ lastSplitX = current;
}
else
{
- if (relativedAxis == null || !MathUtil.Approximately(current, GetAxisLineXOrY()))
+ if (relativedAxis == null || !MathUtil.Approximately(current, relativedAxis.context.y))
+ {
ChartDrawer.DrawLineStyle(vh,
lineType,
lineWidth,
new Vector3(startX, current),
new Vector3(startX + splitLength, current),
lineColor);
+ }
+ if (axis.minorSplitLine.show && i > 0 && minorTickDistance > 0)
+ {
+ if (lastSplitY <= axis.context.zeroY || (i == 1 && current > axis.context.zeroY))
+ {
+ var tickTotal = current - minorTickDistance;
+ var count = 0;
+ while (tickTotal > lastSplitY && count < minorTickSplitNumber - 1)
+ {
+ ChartDrawer.DrawLineStyle(vh,
+ minorLineType,
+ minorLineWidth,
+ new Vector3(startX, tickTotal),
+ new Vector3(startX + splitLength, tickTotal),
+ minorSplitLineColor);
+ count++;
+ tickTotal -= minorTickDistance;
+ }
+ }
+ else
+ {
+ var tickTotal = lastSplitY + minorTickDistance;
+ var count = 0;
+ while (tickTotal < current && count < minorTickSplitNumber - 1)
+ {
+ ChartDrawer.DrawLineStyle(vh,
+ minorLineType,
+ minorLineWidth,
+ new Vector3(startX, tickTotal),
+ new Vector3(startX + splitLength, tickTotal),
+ minorSplitLineColor);
+ count++;
+ tickTotal += minorTickDistance;
+ }
+ }
+ }
+ lastSplitY = current;
}
}
}
diff --git a/Runtime/Component/Axis/AxisHelper.cs b/Runtime/Component/Axis/AxisHelper.cs
index 888e30cf..e24be302 100644
--- a/Runtime/Component/Axis/AxisHelper.cs
+++ b/Runtime/Component/Axis/AxisHelper.cs
@@ -338,8 +338,7 @@ namespace XCharts.Runtime
axis.splitNumber = (minSplit > 0 && maxSplit > 0) ? (maxSplit + minSplit - 1) : (maxSplit + minSplit);
return;
}
- if (axis.type == Axis.AxisType.Time)
- { }
+ if (axis.type == Axis.AxisType.Time) { }
else if (axis.minMaxType == Axis.AxisMinMaxType.Custom)
{
if (axis.min != 0 || axis.max != 0)
@@ -363,8 +362,7 @@ namespace XCharts.Runtime
{
case Axis.AxisMinMaxType.Default:
- if (minValue == 0 && maxValue == 0)
- { }
+ if (minValue == 0 && maxValue == 0) { }
else if (minValue > 0 && maxValue > 0)
{
minValue = 0;
@@ -557,5 +555,43 @@ namespace XCharts.Runtime
yDataHig;
}
}
+
+ public static float GetAxisXOrY(GridCoord grid, Axis axis, Axis relativedAxis)
+ {
+ if (axis is XAxis)
+ return GetXAxisXOrY(grid, axis, relativedAxis);
+ else if (axis is YAxis)
+ return GetYAxisXOrY(grid, axis, relativedAxis);
+ else if (axis is SingleAxis)
+ return axis.context.y + axis.offset;
+ else if (axis is ParallelAxis)
+ return axis.context.y;
+ else
+ return axis.context.x;
+ }
+
+ public static float GetXAxisXOrY(GridCoord grid, Axis xAxis, Axis relativedAxis)
+ {
+ var startY = grid.context.y + xAxis.offset;
+ if (xAxis.IsTop())
+ startY += grid.context.height;
+ else if (xAxis.axisLine.onZero && relativedAxis.IsValue() && relativedAxis.gridIndex == xAxis.gridIndex)
+ startY += relativedAxis.context.offset;
+ return startY;
+ }
+
+ public static float GetYAxisXOrY(GridCoord grid, Axis yAxis, Axis relativedAxis)
+ {
+ var startX = grid.context.x + yAxis.offset;
+ if (yAxis.IsRight())
+ startX += grid.context.width;
+ else if (yAxis.axisLine.onZero && relativedAxis.IsValue() && relativedAxis.gridIndex == yAxis.gridIndex)
+ startX += relativedAxis.context.offset;
+ return startX;
+ }
+
+ public static void UpdateAxisOffset(){
+
+ }
}
}
\ No newline at end of file
diff --git a/Runtime/Component/Axis/AxisMinorSplitLine.cs b/Runtime/Component/Axis/AxisMinorSplitLine.cs
new file mode 100644
index 00000000..6716705b
--- /dev/null
+++ b/Runtime/Component/Axis/AxisMinorSplitLine.cs
@@ -0,0 +1,61 @@
+using System;
+using UnityEngine;
+
+namespace XCharts.Runtime
+{
+ ///
+ /// Minor split line of axis in grid area.
+ /// |坐标轴在 grid 区域中的次分隔线。次分割线会对齐次刻度线 minorTick。
+ ///
+ [Serializable]
+ public class AxisMinorSplitLine : BaseLine
+ {
+ [SerializeField] private float m_Distance;
+ [SerializeField] private bool m_AutoColor;
+
+ ///
+ /// The distance between the split line and axis line.
+ /// |刻度线与轴线的距离。
+ ///
+ public float distance { get { return m_Distance; } set { m_Distance = value; } }
+ ///
+ /// auto color.
+ /// |自动设置颜色。
+ ///
+ public bool autoColor { get { return m_AutoColor; } set { m_AutoColor = value; } }
+
+ public override bool vertsDirty { get { return m_VertsDirty || m_LineStyle.anyDirty; } }
+ public override void ClearVerticesDirty()
+ {
+ base.ClearVerticesDirty();
+ m_LineStyle.ClearVerticesDirty();
+ }
+ public static AxisMinorSplitLine defaultMinorSplitLine
+ {
+ get
+ {
+ return new AxisMinorSplitLine()
+ {
+ m_Show = false,
+ };
+ }
+ }
+
+ public AxisMinorSplitLine Clone()
+ {
+ var axisSplitLine = new AxisMinorSplitLine();
+ axisSplitLine.show = show;
+ axisSplitLine.distance = distance;
+ axisSplitLine.autoColor = autoColor;
+ axisSplitLine.lineStyle = lineStyle.Clone();
+ return axisSplitLine;
+ }
+
+ public void Copy(AxisMinorSplitLine splitLine)
+ {
+ base.Copy(splitLine);
+ distance = splitLine.distance;
+ autoColor = splitLine.autoColor;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Component/Axis/AxisMinorSplitLine.cs.meta b/Runtime/Component/Axis/AxisMinorSplitLine.cs.meta
new file mode 100644
index 00000000..d1400a2d
--- /dev/null
+++ b/Runtime/Component/Axis/AxisMinorSplitLine.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7be5a277811c64887a121d7711929aab
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Runtime/Component/Axis/AxisMinorTick.cs b/Runtime/Component/Axis/AxisMinorTick.cs
new file mode 100644
index 00000000..67e16f48
--- /dev/null
+++ b/Runtime/Component/Axis/AxisMinorTick.cs
@@ -0,0 +1,63 @@
+using UnityEngine;
+
+namespace XCharts.Runtime
+{
+ ///
+ /// Settings related to axis minor tick.
+ /// |坐标轴次刻度相关设置。注意:次刻度无法再类目轴中使用。
+ ///
+ [System.Serializable]
+ [Since("v3.2.0")]
+ public class AxisMinorTick : BaseLine
+ {
+ [SerializeField] protected int m_SplitNumber = 5;
+ [SerializeField] private bool m_AutoColor;
+
+ ///
+ /// Number of segments that the axis is split into.
+ /// |分隔线之间分割的刻度数。
+ ///
+ public int splitNumber
+ {
+ get { return m_SplitNumber; }
+ set { if (PropertyUtil.SetStruct(ref m_SplitNumber, value)) SetAllDirty(); }
+ }
+ public bool autoColor { get { return m_AutoColor; } set { m_AutoColor = value; } }
+
+ public override bool vertsDirty { get { return m_VertsDirty || m_LineStyle.anyDirty; } }
+ public override void ClearVerticesDirty()
+ {
+ base.ClearVerticesDirty();
+ m_LineStyle.ClearVerticesDirty();
+ }
+ public static AxisMinorTick defaultMinorTick
+ {
+ get
+ {
+ var tick = new AxisMinorTick
+ {
+ m_Show = false
+ };
+ return tick;
+ }
+ }
+
+ public AxisMinorTick Clone()
+ {
+ var axisTick = new AxisMinorTick();
+ axisTick.show = show;
+ axisTick.splitNumber = splitNumber;
+ axisTick.autoColor = autoColor;
+ axisTick.lineStyle = lineStyle.Clone();
+ return axisTick;
+ }
+
+ public void Copy(AxisMinorTick axisTick)
+ {
+ show = axisTick.show;
+ splitNumber = axisTick.splitNumber;
+ autoColor = axisTick.autoColor;
+ lineStyle.Copy(axisTick.lineStyle);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Component/Axis/AxisMinorTick.cs.meta b/Runtime/Component/Axis/AxisMinorTick.cs.meta
new file mode 100644
index 00000000..6dda4b2f
--- /dev/null
+++ b/Runtime/Component/Axis/AxisMinorTick.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3bea237f1eccc409ba2635e6f4ca609c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Runtime/Component/Axis/ParallelAxis/ParallelAxisHander.cs b/Runtime/Component/Axis/ParallelAxis/ParallelAxisHander.cs
index 76152220..0ae6185c 100644
--- a/Runtime/Component/Axis/ParallelAxis/ParallelAxisHander.cs
+++ b/Runtime/Component/Axis/ParallelAxis/ParallelAxisHander.cs
@@ -116,7 +116,6 @@ namespace XCharts.Runtime
return;
var dataZoom = chart.GetDataZoomOfAxis(axis);
-
DrawAxisSplit(vh, chart.theme.axis, dataZoom,
m_Orient,
axis.context.x,
@@ -159,7 +158,7 @@ namespace XCharts.Runtime
}
}
- protected override float GetAxisLineXOrY()
+ internal override float GetAxisLineXOrY()
{
return component.context.y;
}
diff --git a/Runtime/Component/Axis/SingleAxis/SingleAxisHandler.cs b/Runtime/Component/Axis/SingleAxis/SingleAxisHandler.cs
index cea04762..28b33ef8 100644
--- a/Runtime/Component/Axis/SingleAxis/SingleAxisHandler.cs
+++ b/Runtime/Component/Axis/SingleAxis/SingleAxisHandler.cs
@@ -117,7 +117,7 @@ namespace XCharts.Runtime
}
}
- protected override float GetAxisLineXOrY()
+ internal override float GetAxisLineXOrY()
{
return component.context.y + component.offset;
}
diff --git a/Runtime/Component/Axis/XAxis/XAxis.cs b/Runtime/Component/Axis/XAxis/XAxis.cs
index 86059069..448a8395 100644
--- a/Runtime/Component/Axis/XAxis/XAxis.cs
+++ b/Runtime/Component/Axis/XAxis/XAxis.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using UnityEngine;
diff --git a/Runtime/Component/Axis/XAxis/XAxisHander.cs b/Runtime/Component/Axis/XAxis/XAxisHander.cs
index e4020e08..fe701798 100644
--- a/Runtime/Component/Axis/XAxis/XAxisHander.cs
+++ b/Runtime/Component/Axis/XAxis/XAxisHander.cs
@@ -15,17 +15,32 @@ namespace XCharts.Runtime
public override void Update()
{
+
UpdateAxisMinMaxValue(component.index, component);
UpdatePointerValue(component);
}
public override void DrawBase(VertexHelper vh)
{
+ UpdatePosition(component);
DrawXAxisSplit(vh, component);
DrawXAxisLine(vh, component);
DrawXAxisTick(vh, component);
}
+ private void UpdatePosition(XAxis axis)
+ {
+ var grid = chart.GetChartComponent(axis.gridIndex);
+ if (grid != null && axis is XAxis && axis.IsValue())
+ {
+ var relativedAxis = chart.GetChartComponent(axis.gridIndex);
+ axis.context.x = grid.context.x;
+ axis.context.y = AxisHelper.GetXAxisXOrY(grid, axis, relativedAxis);
+ axis.context.zeroY = grid.context.y;
+ axis.context.zeroX = grid.context.x + axis.context.offset;
+ }
+ }
+
private void InitXAxis(XAxis xAxis)
{
var theme = chart.theme;
@@ -137,16 +152,9 @@ namespace XCharts.Runtime
}
}
- protected override float GetAxisLineXOrY()
+ internal override float GetAxisLineXOrY()
{
- var xAxis = component;
- var grid = chart.GetChartComponent(xAxis.gridIndex);
- var startY = grid.context.y + xAxis.offset;
- if (xAxis.IsTop())
- startY += grid.context.height;
- else
- startY += ComponentHelper.GetXAxisOnZeroOffset(chart.components, xAxis);
- return startY;
+ return component.context.y;
}
}
}
\ No newline at end of file
diff --git a/Runtime/Component/Axis/YAxis/YAxisHander.cs b/Runtime/Component/Axis/YAxis/YAxisHander.cs
index 58041f55..1aa81a67 100644
--- a/Runtime/Component/Axis/YAxis/YAxisHander.cs
+++ b/Runtime/Component/Axis/YAxis/YAxisHander.cs
@@ -21,11 +21,25 @@ namespace XCharts.Runtime
public override void DrawBase(VertexHelper vh)
{
+ UpdatePosition(component);
DrawYAxisSplit(vh, component.index, component);
DrawYAxisLine(vh, component.index, component);
DrawYAxisTick(vh, component.index, component);
}
+ private void UpdatePosition(YAxis axis)
+ {
+ var grid = chart.GetChartComponent(axis.gridIndex);
+ if (grid != null && axis.IsValue())
+ {
+ var relativedAxis = chart.GetChartComponent(axis.gridIndex);
+ axis.context.x = AxisHelper.GetYAxisXOrY(grid, axis, relativedAxis);
+ axis.context.y = grid.context.y;
+ axis.context.zeroX = axis.context.x;
+ axis.context.zeroY = axis.context.y + axis.context.offset;
+ }
+ }
+
private void InitYAxis(YAxis yAxis)
{
var theme = chart.theme;
@@ -135,16 +149,9 @@ namespace XCharts.Runtime
}
}
- protected override float GetAxisLineXOrY()
+ internal override float GetAxisLineXOrY()
{
- var yAxis = component;
- var grid = chart.GetChartComponent(yAxis.gridIndex);
- var startX = grid.context.x + yAxis.offset;
- if (yAxis.IsRight())
- startX += grid.context.width;
- else
- startX += ComponentHelper.GetYAxisOnZeroOffset(chart.components, yAxis);
- return startX;
+ return component.context.x;
}
}
}
\ No newline at end of file
diff --git a/Runtime/Theme/AxisTheme.cs b/Runtime/Theme/AxisTheme.cs
index ee5d8fdf..1cc388fc 100644
--- a/Runtime/Theme/AxisTheme.cs
+++ b/Runtime/Theme/AxisTheme.cs
@@ -18,6 +18,7 @@ namespace XCharts.Runtime
[SerializeField] protected float m_SplitLineWidth = 1f;
[SerializeField] protected float m_SplitLineLength = 0f;
[SerializeField] protected Color32 m_SplitLineColor;
+ [SerializeField] protected Color32 m_MinorSplitLineColor;
[SerializeField] protected float m_TickWidth = 1f;
[SerializeField] protected float m_TickLength = 5f;
[SerializeField] protected Color32 m_TickColor;
@@ -87,7 +88,7 @@ namespace XCharts.Runtime
set { if (PropertyUtil.SetStruct(ref m_SplitLineLength, value)) SetVerticesDirty(); }
}
///
- /// the color of line.
+ /// the color of split line.
/// |分割线线颜色。
///
public Color32 splitLineColor
@@ -96,6 +97,15 @@ namespace XCharts.Runtime
set { if (PropertyUtil.SetColor(ref m_SplitLineColor, value)) SetVerticesDirty(); }
}
///
+ /// the color of minor split line.
+ /// |次分割线线颜色。
+ ///
+ public Color32 minorSplitLineColor
+ {
+ get { return ChartHelper.IsClearColor(m_MinorSplitLineColor) ? ColorUtil.GetColor("#F4F7FD") : m_MinorSplitLineColor; }
+ set { if (PropertyUtil.SetColor(ref m_MinorSplitLineColor, value)) SetVerticesDirty(); }
+ }
+ ///
/// the length of tick.
/// |刻度线线长。
///
@@ -146,33 +156,36 @@ namespace XCharts.Runtime
switch (theme)
{
case ThemeType.Default:
- m_LineColor = ColorUtil.GetColor("#514D4D");
- m_TickColor = ColorUtil.GetColor("#514D4D");
- m_SplitLineColor = ColorUtil.GetColor("#51515120");
+ m_LineColor = ColorUtil.GetColor("#6E7079");
+ m_TickColor = ColorUtil.GetColor("#6E7079");
+ m_SplitLineColor = ColorUtil.GetColor("#E0E6F1");
+ m_MinorSplitLineColor = ColorUtil.GetColor("#F4F7FD");
m_SplitAreaColors = new List
{
- new Color32(250, 250, 250, 77),
- new Color32(200, 200, 200, 77)
+ new Color32(250, 250, 250, 51),
+ new Color32(210, 219, 238, 51)
};
break;
case ThemeType.Light:
- m_LineColor = ColorUtil.GetColor("#514D4D");
- m_TickColor = ColorUtil.GetColor("#514D4D");
- m_SplitLineColor = ColorUtil.GetColor("#51515120");
+ m_LineColor = ColorUtil.GetColor("#6E7079");
+ m_TickColor = ColorUtil.GetColor("#6E7079");
+ m_SplitLineColor = ColorUtil.GetColor("#E0E6F1");
+ m_MinorSplitLineColor = ColorUtil.GetColor("#F4F7FD");
m_SplitAreaColors = new List
{
- new Color32(250, 250, 250, 77),
- new Color32(200, 200, 200, 77)
+ new Color32(250, 250, 250, 51),
+ new Color32(210, 219, 238, 51)
};
break;
case ThemeType.Dark:
- m_LineColor = ColorUtil.GetColor("#B9B8CE");
- m_TickColor = ColorUtil.GetColor("#B9B8CE");
- m_SplitLineColor = ColorUtil.GetColor("#484753");
+ m_LineColor = ColorUtil.GetColor("#6E7079");
+ m_TickColor = ColorUtil.GetColor("#6E7079");
+ m_SplitLineColor = ColorUtil.GetColor("#E0E6F1");
+ m_MinorSplitLineColor = ColorUtil.GetColor("#F4F7FD");
m_SplitAreaColors = new List
{
new Color32(255, 255, 255, (byte) (0.02f * 255)),
- new Color32(255, 255, 255, (byte) (0.05f * 255))
+ new Color32(210, 219, 238, (byte) (0.02f * 255))
};
break;
}
@@ -199,29 +212,25 @@ namespace XCharts.Runtime
[Serializable]
public class AxisTheme : BaseAxisTheme
{
- public AxisTheme(ThemeType theme) : base(theme)
- { }
+ public AxisTheme(ThemeType theme) : base(theme) { }
}
[Serializable]
public class RadiusAxisTheme : BaseAxisTheme
{
- public RadiusAxisTheme(ThemeType theme) : base(theme)
- { }
+ public RadiusAxisTheme(ThemeType theme) : base(theme) { }
}
[Serializable]
public class AngleAxisTheme : BaseAxisTheme
{
- public AngleAxisTheme(ThemeType theme) : base(theme)
- { }
+ public AngleAxisTheme(ThemeType theme) : base(theme) { }
}
[Serializable]
public class PolarAxisTheme : BaseAxisTheme
{
- public PolarAxisTheme(ThemeType theme) : base(theme)
- { }
+ public PolarAxisTheme(ThemeType theme) : base(theme) { }
}
[Serializable]
diff --git a/Runtime/Utilities/ColorUtil.cs b/Runtime/Utilities/ColorUtil.cs
index ab650e4f..b5809792 100644
--- a/Runtime/Utilities/ColorUtil.cs
+++ b/Runtime/Utilities/ColorUtil.cs
@@ -1,11 +1,14 @@
+using System.Collections.Generic;
using UnityEngine;
namespace XCharts.Runtime
{
public static class ColorUtil
{
+ private static Dictionary s_ColorCached = new Dictionary();
public static readonly Color32 clearColor32 = new Color32(0, 0, 0, 0);
public static readonly Vector2 zeroVector2 = Vector2.zero;
+
///
/// Convert the html string to color.
/// |将字符串颜色值转成Color。
@@ -14,9 +17,14 @@ namespace XCharts.Runtime
///
public static Color32 GetColor(string hexColorStr)
{
+ if (s_ColorCached.ContainsKey(hexColorStr))
+ {
+ return s_ColorCached[hexColorStr];
+ }
Color color;
ColorUtility.TryParseHtmlString(hexColorStr, out color);
- return (Color32) color;
+ s_ColorCached[hexColorStr] = (Color32) color;
+ return s_ColorCached[hexColorStr];
}
}
}
\ No newline at end of file