Files
XCharts/Runtime/Component/Axis/XAxis/XAxisHander.cs

159 lines
5.2 KiB
C#
Raw Normal View History

2021-11-23 13:20:07 +08:00
using UnityEngine;
using UnityEngine.UI;
2022-02-19 22:37:57 +08:00
namespace XCharts.Runtime
2021-11-23 13:20:07 +08:00
{
[UnityEngine.Scripting.Preserve]
internal sealed class XAxisHander : AxisHandler<XAxis>
{
protected override Orient orient { get { return Orient.Horizonal; } }
public override void InitComponent()
{
InitXAxis(component);
}
public override void Update()
{
UpdateAxisMinMaxValue(component.index, component);
UpdatePointerValue(component);
}
public override void DrawBase(VertexHelper vh)
{
UpdatePosition(component);
2021-11-23 13:20:07 +08:00
DrawXAxisSplit(vh, component);
DrawXAxisLine(vh, component);
DrawXAxisTick(vh, component);
}
private void UpdatePosition(XAxis axis)
{
var grid = chart.GetChartComponent<GridCoord>(axis.gridIndex);
if (grid != null)
{
var relativedAxis = chart.GetChartComponent<YAxis>(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;
}
}
2021-11-23 13:20:07 +08:00
private void InitXAxis(XAxis xAxis)
{
var theme = chart.theme;
var xAxisIndex = xAxis.index;
xAxis.painter = chart.painter;
2022-05-22 22:17:38 +08:00
xAxis.refreshComponent = delegate()
2021-11-23 13:20:07 +08:00
{
var grid = chart.GetChartComponent<GridCoord>(xAxis.gridIndex);
if (grid != null)
{
var yAxis = chart.GetChartComponent<YAxis>(xAxis.index);
2022-05-22 22:17:38 +08:00
InitAxis(yAxis,
2021-11-23 13:20:07 +08:00
orient,
grid.context.x,
grid.context.y,
grid.context.width,
grid.context.height);
}
};
xAxis.refreshComponent();
}
internal override void UpdateAxisLabelText(Axis axis)
{
base.UpdateAxisLabelText(axis);
if (axis.IsTime() || axis.IsValue())
{
for (int i = 0; i < axis.context.labelObjectList.Count; i++)
{
var label = axis.context.labelObjectList[i];
if (label != null)
{
var pos = GetLabelPosition(0, i);
label.SetPosition(pos);
CheckValueLabelActive(component, i, label, pos);
}
}
}
}
protected override Vector3 GetLabelPosition(float scaleWid, int i)
{
var grid = chart.GetChartComponent<GridCoord>(component.gridIndex);
if (grid == null)
return Vector3.zero;
var yAxis = chart.GetChartComponent<YAxis>(component.index);
return GetLabelPosition(i, Orient.Horizonal, component, yAxis,
chart.theme.axis,
scaleWid,
grid.context.x,
grid.context.y,
grid.context.width,
grid.context.height);
}
private void DrawXAxisSplit(VertexHelper vh, XAxis xAxis)
{
if (AxisHelper.NeedShowSplit(xAxis))
{
var grid = chart.GetChartComponent<GridCoord>(xAxis.gridIndex);
if (grid == null)
return;
2022-03-04 22:17:32 +08:00
var relativedAxis = chart.GetChartComponent<YAxis>(xAxis.gridIndex);
2021-11-23 13:20:07 +08:00
var dataZoom = chart.GetDataZoomOfAxis(xAxis);
2022-05-22 22:17:38 +08:00
DrawAxisSplit(vh, chart.theme.axis, dataZoom,
2021-11-23 13:20:07 +08:00
Orient.Horizonal,
grid.context.x,
grid.context.y,
grid.context.width,
2022-03-04 22:17:32 +08:00
grid.context.height,
relativedAxis);
2021-11-23 13:20:07 +08:00
}
}
private void DrawXAxisTick(VertexHelper vh, XAxis xAxis)
{
if (AxisHelper.NeedShowSplit(xAxis))
{
var grid = chart.GetChartComponent<GridCoord>(xAxis.gridIndex);
if (grid == null)
return;
var dataZoom = chart.GetDataZoomOfAxis(xAxis);
DrawAxisTick(vh, xAxis, chart.theme.axis, dataZoom,
Orient.Horizonal,
grid.context.x,
2022-05-22 22:17:38 +08:00
GetAxisLineXOrY(),
2021-11-23 13:20:07 +08:00
grid.context.width);
}
}
private void DrawXAxisLine(VertexHelper vh, XAxis xAxis)
{
if (xAxis.show && xAxis.axisLine.show)
{
var grid = chart.GetChartComponent<GridCoord>(xAxis.gridIndex);
if (grid == null)
return;
DrawAxisLine(vh, xAxis, chart.theme.axis,
Orient.Horizonal,
grid.context.x,
2022-05-22 22:17:38 +08:00
GetAxisLineXOrY(),
2021-11-23 13:20:07 +08:00
grid.context.width);
}
}
2022-05-22 22:17:38 +08:00
internal override float GetAxisLineXOrY()
2022-05-22 22:17:38 +08:00
{
return component.context.y;
2022-05-22 22:17:38 +08:00
}
2021-11-23 13:20:07 +08:00
}
}