mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-21 07:50:16 +00:00
增加Chart的onSerieClick,onSerieDown,onSerieEnter和onSerieExit回调
This commit is contained in:
@@ -69,6 +69,8 @@ slug: /api
|
||||
- [SerieDataComponentAttribute](#seriedatacomponentattribute)
|
||||
- [SerieDataContext](#seriedatacontext)
|
||||
- [SerieDataExtraFieldAttribute](#seriedataextrafieldattribute)
|
||||
- [SerieEventData](#serieeventdata)
|
||||
- [SerieEventDataPool](#serieeventdatapool)
|
||||
- [SerieHandler](#seriehandler)
|
||||
- [SerieHandler<T>](#seriehandlert)
|
||||
- [SerieHandlerAttribute](#seriehandlerattribute)
|
||||
@@ -870,6 +872,19 @@ Inherits or Implemented: [Attribute](#attribute)
|
||||
| SerieDataExtraFieldAttribute() |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6)|
|
||||
| SerieDataExtraFieldAttribute() |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6, string field7)|
|
||||
|
||||
## SerieEventData
|
||||
|
||||
|public method|description|
|
||||
|--|--|
|
||||
| Reset() |public void Reset()|
|
||||
|
||||
## SerieEventDataPool
|
||||
|
||||
|public method|description|
|
||||
|--|--|
|
||||
| Get() |public static SerieEventData Get(Vector3 pos, int serieIndex, int dataIndex, int dimension, double value)|
|
||||
| Release() |public static void Release(SerieEventData toRelease)|
|
||||
|
||||
## SerieHandler
|
||||
|
||||
|public method|description|
|
||||
@@ -896,6 +911,7 @@ Inherits or Implemented: [Attribute](#attribute)
|
||||
| RefreshLabelNextFrame() |public virtual void RefreshLabelNextFrame() { }|
|
||||
| RemoveComponent() |public virtual void RemoveComponent() { }|
|
||||
| Update() |public virtual void Update() { }|
|
||||
| UpdateSerieContext() |public virtual void UpdateSerieContext() { }|
|
||||
|
||||
## SerieHandler<T>
|
||||
|
||||
@@ -904,6 +920,8 @@ Inherits or Implemented: [SerieHandler where T](#seriehandler where t),[Serie](#
|
||||
|public method|description|
|
||||
|--|--|
|
||||
| DrawLabelLineSymbol() |public void DrawLabelLineSymbol(VertexHelper vh, LabelLine labelLine, Vector3 startPos, Vector3 endPos, Color32 defaultColor)|
|
||||
| GetPointerItemDataDimension() |public override int GetPointerItemDataDimension()|
|
||||
| GetPointerItemDataIndex() |public override int GetPointerItemDataIndex()|
|
||||
| GetSerieDataAutoColor() |public virtual Color GetSerieDataAutoColor(SerieData serieData)|
|
||||
| GetSerieDataLabelOffset() |public virtual Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label)|
|
||||
| GetSerieDataLabelPosition() |public virtual Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label)|
|
||||
@@ -912,6 +930,8 @@ Inherits or Implemented: [SerieHandler where T](#seriehandler where t),[Serie](#
|
||||
| OnLegendButtonClick() |public override void OnLegendButtonClick(int index, string legendName, bool show)|
|
||||
| OnLegendButtonEnter() |public override void OnLegendButtonEnter(int index, string legendName)|
|
||||
| OnLegendButtonExit() |public override void OnLegendButtonExit(int index, string legendName)|
|
||||
| OnPointerClick() |public override void OnPointerClick(PointerEventData eventData)|
|
||||
| OnPointerDown() |public override void OnPointerDown(PointerEventData eventData)|
|
||||
| RefreshEndLabelInternal() |public virtual void RefreshEndLabelInternal()|
|
||||
| RefreshLabelInternal() |public override void RefreshLabelInternal()|
|
||||
| RefreshLabelNextFrame() |public override void RefreshLabelNextFrame()|
|
||||
|
||||
@@ -69,6 +69,8 @@ slug: /api
|
||||
- [SerieDataComponentAttribute](#seriedatacomponentattribute)
|
||||
- [SerieDataContext](#seriedatacontext)
|
||||
- [SerieDataExtraFieldAttribute](#seriedataextrafieldattribute)
|
||||
- [SerieEventData](#serieeventdata)
|
||||
- [SerieEventDataPool](#serieeventdatapool)
|
||||
- [SerieHandler](#seriehandler)
|
||||
- [SerieHandler<T>](#seriehandlert)
|
||||
- [SerieHandlerAttribute](#seriehandlerattribute)
|
||||
@@ -870,6 +872,19 @@ Inherits or Implemented: [Attribute](#attribute)
|
||||
| SerieDataExtraFieldAttribute() |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6)|
|
||||
| SerieDataExtraFieldAttribute() |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6, string field7)|
|
||||
|
||||
## SerieEventData
|
||||
|
||||
|public method|description|
|
||||
|--|--|
|
||||
| Reset() |public void Reset()|
|
||||
|
||||
## SerieEventDataPool
|
||||
|
||||
|public method|description|
|
||||
|--|--|
|
||||
| Get() |public static SerieEventData Get(Vector3 pos, int serieIndex, int dataIndex, int dimension, double value)|
|
||||
| Release() |public static void Release(SerieEventData toRelease)|
|
||||
|
||||
## SerieHandler
|
||||
|
||||
|public method|description|
|
||||
@@ -896,6 +911,7 @@ Inherits or Implemented: [Attribute](#attribute)
|
||||
| RefreshLabelNextFrame() |public virtual void RefreshLabelNextFrame() { }|
|
||||
| RemoveComponent() |public virtual void RemoveComponent() { }|
|
||||
| Update() |public virtual void Update() { }|
|
||||
| UpdateSerieContext() |public virtual void UpdateSerieContext() { }|
|
||||
|
||||
## SerieHandler<T>
|
||||
|
||||
@@ -904,6 +920,8 @@ Inherits or Implemented: [SerieHandler where T](#seriehandler where t),[Serie](#
|
||||
|public method|description|
|
||||
|--|--|
|
||||
| DrawLabelLineSymbol() |public void DrawLabelLineSymbol(VertexHelper vh, LabelLine labelLine, Vector3 startPos, Vector3 endPos, Color32 defaultColor)|
|
||||
| GetPointerItemDataDimension() |public override int GetPointerItemDataDimension()|
|
||||
| GetPointerItemDataIndex() |public override int GetPointerItemDataIndex()|
|
||||
| GetSerieDataAutoColor() |public virtual Color GetSerieDataAutoColor(SerieData serieData)|
|
||||
| GetSerieDataLabelOffset() |public virtual Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label)|
|
||||
| GetSerieDataLabelPosition() |public virtual Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label)|
|
||||
@@ -912,6 +930,8 @@ Inherits or Implemented: [SerieHandler where T](#seriehandler where t),[Serie](#
|
||||
| OnLegendButtonClick() |public override void OnLegendButtonClick(int index, string legendName, bool show)|
|
||||
| OnLegendButtonEnter() |public override void OnLegendButtonEnter(int index, string legendName)|
|
||||
| OnLegendButtonExit() |public override void OnLegendButtonExit(int index, string legendName)|
|
||||
| OnPointerClick() |public override void OnPointerClick(PointerEventData eventData)|
|
||||
| OnPointerDown() |public override void OnPointerDown(PointerEventData eventData)|
|
||||
| RefreshEndLabelInternal() |public virtual void RefreshEndLabelInternal()|
|
||||
| RefreshLabelInternal() |public override void RefreshLabelInternal()|
|
||||
| RefreshLabelNextFrame() |public override void RefreshLabelNextFrame()|
|
||||
|
||||
@@ -65,6 +65,8 @@ slug: /changelog
|
||||
|
||||
## master
|
||||
|
||||
* (2023.03.09) 增加`Chart`的`onSerieClick`,`onSerieDown`,`onSerieEnter`和`onSerieExit`回调
|
||||
* (2023.03.09) 修复`Pie`的点击选中偏移不生效的问题
|
||||
* (2023.03.04) 增加`Legend`的`Positions`可自定义图例的位置
|
||||
* (2023.03.03) 修复`Animation`变更动画可能无效的问题
|
||||
* (2023.02.28) 修复`Legend`点击时`Serie`的`Label`不刷新的问题
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace XCharts.Editor
|
||||
PropertyField("m_RoundCap");
|
||||
PropertyField("m_Ignore");
|
||||
PropertyField("m_IgnoreValue");
|
||||
PropertyField("m_ClickOffset");
|
||||
});
|
||||
PropertyField("m_ItemStyle");
|
||||
PropertyField("m_Animation");
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace XCharts.Example
|
||||
chart.AddData(0, 135, "视频广告");
|
||||
chart.AddData(0, 1548, "搜索引擎");
|
||||
|
||||
chart.onPointerClickPie = delegate (PointerEventData e, int serieIndex, int dataIndex)
|
||||
chart.onSerieClick = delegate (SerieEventData data)
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
using XCharts.Runtime;
|
||||
#if INPUT_SYSTEM_ENABLED
|
||||
@@ -14,6 +15,9 @@ namespace XCharts.Example
|
||||
void Awake()
|
||||
{
|
||||
chart = gameObject.GetComponent<BaseChart>();
|
||||
chart.onSerieClick = OnPointerClickLine;
|
||||
chart.onSerieEnter = OnPointerEnterLine;
|
||||
chart.onSerieExit = OnPointerExitLine;
|
||||
var btnTrans = transform.parent.Find("Button");
|
||||
if (btnTrans)
|
||||
{
|
||||
@@ -21,6 +25,21 @@ namespace XCharts.Example
|
||||
}
|
||||
}
|
||||
|
||||
void OnPointerClickLine(SerieEventData data)
|
||||
{
|
||||
Debug.Log("OnPointerClick: " + data.serieIndex+ " " + data.dataIndex +" "+ data.dimension);
|
||||
}
|
||||
|
||||
void OnPointerEnterLine(SerieEventData data)
|
||||
{
|
||||
Debug.Log("OnPointerEnter: " + data.serieIndex + " " + data.dataIndex + " " + data.dimension);
|
||||
}
|
||||
|
||||
void OnPointerExitLine(SerieEventData data)
|
||||
{
|
||||
Debug.Log("OnPointerExit: " + data.serieIndex + " " + data.dataIndex + " " + data.dimension);
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.Space))
|
||||
|
||||
14
README.md
14
README.md
@@ -18,27 +18,27 @@
|
||||
<a href="https://github.com/XCharts-Team/XCharts/releases">
|
||||
<img src="https://img.shields.io/github/v/release/XCharts-Team/XCharts?include_prereleases"></img>
|
||||
</a>
|
||||
<a href="">
|
||||
<a href="https://github.com/XCharts-Team/XCharts">
|
||||
<img src="https://img.shields.io/github/repo-size/monitor1394/unity-ugui-xcharts"></img>
|
||||
</a>
|
||||
<a href="">
|
||||
<a href="https://github.com/XCharts-Team/XCharts">
|
||||
<img src="https://img.shields.io/github/languages/code-size/monitor1394/unity-ugui-xcharts"></img>
|
||||
</a>
|
||||
<a href="">
|
||||
<a href="https://xcharts-team.github.io/docs/tutorial01">
|
||||
<img src="https://img.shields.io/badge/Unity-5.6+-green"></img>
|
||||
</a>
|
||||
<a href="">
|
||||
<a href="https://xcharts-team.github.io/docs/tutorial01">
|
||||
<img src="https://img.shields.io/badge/TextMeshPro-YES-green"></img>
|
||||
</a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="">
|
||||
<a href="https://github.com/XCharts-Team/XCharts/stargazers">
|
||||
<img src="https://img.shields.io/github/stars/XCharts-Team/XCharts?style=social"></img>
|
||||
</a>
|
||||
<a href="">
|
||||
<a href="https://github.com/XCharts-Team/XCharts/forks">
|
||||
<img src="https://img.shields.io/github/forks/XCharts-Team/XCharts?style=social"></img>
|
||||
</a>
|
||||
<a href="">
|
||||
<a href="https://github.com/XCharts-Team/XCharts/issues">
|
||||
<img src="https://img.shields.io/github/issues-closed/XCharts-Team/XCharts?color=green&label=%20%20%20%20issues&logoColor=green&style=social"></img>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
@@ -104,21 +104,48 @@ namespace XCharts.Runtime
|
||||
/// </summary>
|
||||
public CustomDrawGaugePointerFunction customDrawGaugePointerFunction { set { m_CustomDrawGaugePointerFunction = value; } get { return m_CustomDrawGaugePointerFunction; } }
|
||||
/// <summary>
|
||||
/// the callback function of pointer click serie.
|
||||
/// |鼠标点击Serie回调。
|
||||
/// </summary>
|
||||
[Since("v3.6.0")]
|
||||
public Action<SerieEventData> onSerieClick { set { m_OnSerieClick = value; m_ForceOpenRaycastTarget = true; } get { return m_OnSerieClick; } }
|
||||
/// <summary>
|
||||
/// the callback function of pointer down serie.
|
||||
/// |鼠标按下Serie回调。
|
||||
/// </summary>
|
||||
[Since("v3.6.0")]
|
||||
public Action<SerieEventData> onSerieDown { set { m_OnSerieDown = value; m_ForceOpenRaycastTarget = true; } get { return m_OnSerieDown; } }
|
||||
/// <summary>
|
||||
/// the callback function of pointer enter serie.
|
||||
/// |鼠标进入Serie回调。
|
||||
/// </summary>
|
||||
[Since("v3.6.0")]
|
||||
public Action<SerieEventData> onSerieEnter { set { m_OnSerieEnter = value; m_ForceOpenRaycastTarget = true; } get { return m_OnSerieEnter; } }
|
||||
/// <summary>
|
||||
/// the callback function of pointer exit serie.
|
||||
/// |鼠标离开Serie回调。
|
||||
/// </summary>
|
||||
[Since("v3.6.0")]
|
||||
public Action<SerieEventData> onSerieExit { set { m_OnSerieExit = value; m_ForceOpenRaycastTarget = true; } get { return m_OnSerieExit; } }
|
||||
/// <summary>
|
||||
/// the callback function of pointer click pie area.
|
||||
/// |点击饼图区域回调。参数:PointerEventData,SerieIndex,SerieDataIndex
|
||||
/// </summary>
|
||||
public Action<PointerEventData, int, int> onPointerClickPie { set { m_OnPointerClickPie = value; m_ForceOpenRaycastTarget = true; } get { return m_OnPointerClickPie; } }
|
||||
[Obsolete("Use \"onSerieClick\" instead", true)]
|
||||
public Action<PointerEventData, int, int> onPointerClickPie { get; set; }
|
||||
/// <summary>
|
||||
/// the callback function of pointer enter pie area.
|
||||
/// |鼠标进入和离开饼图区域回调,SerieDataIndex为-1时表示离开。参数:PointerEventData,SerieIndex,SerieDataIndex
|
||||
/// </summary>
|
||||
[Since("v3.3.0")]
|
||||
[Obsolete("Use \"onSerieEnter\" instead", true)]
|
||||
public Action<int, int> onPointerEnterPie { set { m_OnPointerEnterPie = value; m_ForceOpenRaycastTarget = true; } get { return m_OnPointerEnterPie; } }
|
||||
/// <summary>
|
||||
/// the callback function of click bar.
|
||||
/// |点击柱形图柱条回调。参数:eventData, dataIndex
|
||||
/// </summary>
|
||||
public Action<PointerEventData, int> onPointerClickBar { set { m_OnPointerClickBar = value; m_ForceOpenRaycastTarget = true; } get { return m_OnPointerClickBar; } }
|
||||
[Obsolete("Use \"onSerieClick\" instead", true)]
|
||||
public Action<PointerEventData, int> onPointerClickBar { get; set; }
|
||||
/// <summary>
|
||||
/// 坐标轴变更数据索引时回调。参数:axis, dataIndex/dataValue
|
||||
/// </summary>
|
||||
|
||||
@@ -89,9 +89,11 @@ namespace XCharts.Runtime
|
||||
protected Action<VertexHelper> m_OnDrawTop;
|
||||
protected Action<VertexHelper, Serie> m_OnDrawSerieBefore;
|
||||
protected Action<VertexHelper, Serie> m_OnDrawSerieAfter;
|
||||
protected Action<PointerEventData, int, int> m_OnPointerClickPie;
|
||||
protected Action<SerieEventData> m_OnSerieClick;
|
||||
protected Action<SerieEventData> m_OnSerieDown;
|
||||
protected Action<SerieEventData> m_OnSerieEnter;
|
||||
protected Action<SerieEventData> m_OnSerieExit;
|
||||
protected Action<int, int> m_OnPointerEnterPie;
|
||||
protected Action<PointerEventData, int> m_OnPointerClickBar;
|
||||
protected Action<Axis, double> m_OnAxisPointerValueChanged;
|
||||
protected Action<Legend, int, string, bool> m_OnLegendClick;
|
||||
protected Action<Legend, int, string> m_OnLegendEnter;
|
||||
|
||||
@@ -228,7 +228,7 @@ namespace XCharts.Runtime
|
||||
|
||||
protected virtual void CheckRefreshChart()
|
||||
{
|
||||
if (m_RefreshChart)
|
||||
if (m_RefreshChart && m_Painter != null)
|
||||
{
|
||||
m_Painter.Refresh();
|
||||
m_RefreshChart = false;
|
||||
@@ -237,6 +237,7 @@ namespace XCharts.Runtime
|
||||
|
||||
protected virtual void CheckRefreshPainter()
|
||||
{
|
||||
if (m_Painter == null) return;
|
||||
m_Painter.CheckRefresh();
|
||||
}
|
||||
|
||||
|
||||
46
Runtime/Internal/Misc/SerieEventData.cs
Normal file
46
Runtime/Internal/Misc/SerieEventData.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace XCharts.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// the data of serie event.
|
||||
/// |serie事件的数据。
|
||||
/// </summary>
|
||||
public class SerieEventData
|
||||
{
|
||||
/// <summary>
|
||||
/// the position of pointer in chart.
|
||||
/// |鼠标在chart中的位置。
|
||||
/// </summary>
|
||||
public Vector3 pointerPos { get; set; }
|
||||
/// <summary>
|
||||
/// the index of serie in chart.series.
|
||||
/// |在chart.series中的索引。
|
||||
/// </summary>
|
||||
public int serieIndex { get; set; }
|
||||
/// <summary>
|
||||
/// the index of data in serie.data.
|
||||
/// |在serie.data中的索引。
|
||||
/// </summary>
|
||||
public int dataIndex { get; set; }
|
||||
/// <summary>
|
||||
/// the dimension of data.
|
||||
/// |数据的维度。
|
||||
/// </summary>
|
||||
public int dimension { get; set; }
|
||||
/// <summary>
|
||||
/// the value of data.
|
||||
/// |数据的值。
|
||||
/// </summary>
|
||||
public double value { get; set; }
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
serieIndex = -1;
|
||||
dataIndex = -1;
|
||||
dimension = -1;
|
||||
value = 0;
|
||||
pointerPos = Vector3.zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Runtime/Internal/Misc/SerieEventData.cs.meta
Normal file
11
Runtime/Internal/Misc/SerieEventData.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fdfaa773d93294d78b2fb4b8f42708a3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
33
Runtime/Internal/Pools/SerieEventDataPool.cs
Normal file
33
Runtime/Internal/Pools/SerieEventDataPool.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace XCharts.Runtime
|
||||
{
|
||||
public static class SerieEventDataPool
|
||||
{
|
||||
private static readonly ObjectPool<SerieEventData> s_ListPool = new ObjectPool<SerieEventData>(null, OnClear);
|
||||
|
||||
static void OnGet(SerieEventData data)
|
||||
{
|
||||
}
|
||||
|
||||
static void OnClear(SerieEventData data)
|
||||
{
|
||||
data.Reset();
|
||||
}
|
||||
|
||||
public static SerieEventData Get(Vector3 pos, int serieIndex, int dataIndex, int dimension, double value)
|
||||
{
|
||||
var data = s_ListPool.Get();
|
||||
data.serieIndex = serieIndex;
|
||||
data.dataIndex = dataIndex;
|
||||
data.pointerPos = pos;
|
||||
data.dimension = dimension;
|
||||
return data;
|
||||
}
|
||||
|
||||
public static void Release(SerieEventData toRelease)
|
||||
{
|
||||
s_ListPool.Release(toRelease);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Runtime/Internal/Pools/SerieEventDataPool.cs.meta
Normal file
11
Runtime/Internal/Pools/SerieEventDataPool.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 30d123dd5c38446f18183f50336322bb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -161,11 +161,11 @@ namespace XCharts.Runtime
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
if (!Application.isPlaying)
|
||||
GameObject.DestroyImmediate(component as GameObject, true);
|
||||
GameObject.DestroyImmediate(component as UnityEngine.Object);
|
||||
else
|
||||
GameObject.Destroy(component as GameObject);
|
||||
GameObject.Destroy(component as UnityEngine.Object);
|
||||
#else
|
||||
GameObject.Destroy(component as GameObject);
|
||||
GameObject.Destroy(component as UnityEngine.Object);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -389,6 +389,7 @@ namespace XCharts.Runtime
|
||||
var alignment = textStyle.GetAlignment(autoAlignment);
|
||||
UpdateAnchorAndPivotByTextAlignment(alignment, out anchorMin, out anchorMax, out pivot);
|
||||
var labelObj = AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta);
|
||||
ChartHelper.RemoveComponent<Text>(labelObj);
|
||||
var label = EnsureComponent<ChartLabel>(labelObj);
|
||||
label.text = AddTextObject("Text", label.gameObject.transform, anchorMin, anchorMax, pivot,
|
||||
sizeDelta, textStyle, theme, autoColor, autoAlignment, label.text);
|
||||
|
||||
@@ -78,16 +78,6 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnPointerDown(PointerEventData eventData)
|
||||
{
|
||||
if (!serie.context.pointerEnter) return;
|
||||
if (serie.context.pointerItemDataIndex < 0) return;
|
||||
if (chart.onPointerClickBar != null)
|
||||
{
|
||||
chart.onPointerClickBar(eventData, serie.context.pointerItemDataIndex);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateSerieGridContext()
|
||||
{
|
||||
if (m_SerieGrid == null)
|
||||
@@ -240,7 +230,7 @@ namespace XCharts.Runtime
|
||||
if (isPercentStack)
|
||||
{
|
||||
var valueTotal = chart.GetSerieSameStackTotalValue<Bar>(serie.stack, i);
|
||||
barHig = valueTotal != 0 ? (float) (relativedValue / valueTotal * relativedAxisLength) : 0;
|
||||
barHig = valueTotal != 0 ? (float)(relativedValue / valueTotal * relativedAxisLength) : 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -314,7 +304,7 @@ namespace XCharts.Runtime
|
||||
if (axis.context.minMaxRange <= 0) pY = grid.context.y;
|
||||
else
|
||||
{
|
||||
var valueLen = (float) ((value - axis.context.minValue) / axis.context.minMaxRange) * grid.context.height;
|
||||
var valueLen = (float)((value - axis.context.minValue) / axis.context.minMaxRange) * grid.context.height;
|
||||
pY = grid.context.y + valueLen - categoryWidth * 0.5f;
|
||||
}
|
||||
}
|
||||
@@ -336,7 +326,7 @@ namespace XCharts.Runtime
|
||||
if (axis.context.minMaxRange <= 0) pX = grid.context.x;
|
||||
else
|
||||
{
|
||||
var valueLen = (float) ((value - axis.context.minValue) / axis.context.minMaxRange) * grid.context.width;
|
||||
var valueLen = (float)((value - axis.context.minValue) / axis.context.minMaxRange) * grid.context.width;
|
||||
pX = grid.context.x + valueLen - categoryWidth * 0.5f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ namespace XCharts.Runtime
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
UpdateSerieContext();
|
||||
}
|
||||
|
||||
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category,
|
||||
@@ -30,7 +29,7 @@ namespace XCharts.Runtime
|
||||
DrawBarSerie(vh, serie, serie.context.colorIndex);
|
||||
}
|
||||
|
||||
private void UpdateSerieContext()
|
||||
public override void UpdateSerieContext()
|
||||
{
|
||||
if (m_SerieGrid == null)
|
||||
return;
|
||||
|
||||
@@ -27,10 +27,6 @@ namespace XCharts.Runtime
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
if (serie.IsUseCoord<GridCoord>())
|
||||
UpdateSerieContext();
|
||||
else if (serie.IsUseCoord<PolarCoord>())
|
||||
UpdateSeriePolarContext();
|
||||
}
|
||||
|
||||
public override void DrawSerie(VertexHelper vh)
|
||||
@@ -97,7 +93,7 @@ namespace XCharts.Runtime
|
||||
{
|
||||
var xAxis = chart.GetChartComponent<XAxis>(serie.xAxisIndex);
|
||||
if (xAxis != null)
|
||||
category = xAxis.GetData((int) serieData.GetData(0));
|
||||
category = xAxis.GetData((int)serieData.GetData(0));
|
||||
}
|
||||
title = serie.serieName;
|
||||
|
||||
@@ -121,7 +117,15 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateSerieContext()
|
||||
public override void UpdateSerieContext()
|
||||
{
|
||||
if (serie.IsUseCoord<GridCoord>())
|
||||
UpdateSerieGridContext();
|
||||
else if (serie.IsUseCoord<PolarCoord>())
|
||||
UpdateSeriePolarContext();
|
||||
}
|
||||
|
||||
private void UpdateSerieGridContext()
|
||||
{
|
||||
if (m_SerieGrid == null)
|
||||
return;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
using XUGL;
|
||||
|
||||
@@ -69,7 +70,7 @@ namespace XCharts.Runtime
|
||||
var endLabelList = m_SerieGrid.context.endLabelList;
|
||||
if (endLabelList.Count <= 1) return;
|
||||
|
||||
endLabelList.Sort(delegate(ChartLabel a, ChartLabel b)
|
||||
endLabelList.Sort(delegate (ChartLabel a, ChartLabel b)
|
||||
{
|
||||
if (a == null || b == null) return 1;
|
||||
return b.transform.position.y.CompareTo(a.transform.position.y);
|
||||
@@ -96,5 +97,27 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override int GetPointerItemDataIndex()
|
||||
{
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme, chart.theme.serie.lineSymbolSize) * 1.5f;
|
||||
var count = serie.context.dataPoints.Count;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var index = serie.context.dataIndexs[i];
|
||||
var serieData = serie.GetSerieData(index);
|
||||
if (serieData == null)
|
||||
continue;
|
||||
if (serieData.context.isClip)
|
||||
continue;
|
||||
|
||||
var pos = serie.context.dataPoints[i];
|
||||
if (Vector2.Distance(pos, chart.pointerPos) < symbolSize)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,6 @@ namespace XCharts.Runtime
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
UpdateSerieContext();
|
||||
}
|
||||
|
||||
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category,
|
||||
@@ -31,7 +30,7 @@ namespace XCharts.Runtime
|
||||
DrawLineSerie(vh, serie);
|
||||
}
|
||||
|
||||
private void UpdateSerieContext()
|
||||
public override void UpdateSerieContext()
|
||||
{
|
||||
if (m_SerieGrid == null)
|
||||
return;
|
||||
|
||||
@@ -11,7 +11,6 @@ namespace XCharts.Runtime
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
UpdateSerieContext();
|
||||
}
|
||||
|
||||
public override void DrawSerie(VertexHelper vh)
|
||||
@@ -19,8 +18,6 @@ namespace XCharts.Runtime
|
||||
DrawParallelSerie(vh, serie);
|
||||
}
|
||||
|
||||
private void UpdateSerieContext() { }
|
||||
|
||||
private void DrawParallelSerie(VertexHelper vh, Parallel serie)
|
||||
{
|
||||
if (!serie.show) return;
|
||||
|
||||
@@ -12,7 +12,6 @@ namespace XCharts.Runtime
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
UpdateSerieContext();
|
||||
}
|
||||
|
||||
public override void DrawBase(VertexHelper vh)
|
||||
@@ -79,32 +78,28 @@ namespace XCharts.Runtime
|
||||
|
||||
public override void OnPointerDown(PointerEventData eventData)
|
||||
{
|
||||
if (!chart.HasSerie<Pie>()) return;
|
||||
if (chart.pointerPos == Vector2.zero) return;
|
||||
var dataIndex = GetPiePosIndex(serie, chart.pointerPos);
|
||||
var refresh = false;
|
||||
for (int i = 0; i < chart.series.Count; i++)
|
||||
if (dataIndex >= 0)
|
||||
{
|
||||
var serie = chart.GetSerie(i);
|
||||
if (!(serie is Pie)) continue;
|
||||
var index = GetPiePosIndex(serie, chart.pointerPos);
|
||||
if (index >= 0)
|
||||
refresh = true;
|
||||
for (int j = 0; j < serie.data.Count; j++)
|
||||
{
|
||||
refresh = true;
|
||||
for (int j = 0; j < serie.data.Count; j++)
|
||||
{
|
||||
if (j == index) serie.data[j].context.selected = !serie.data[j].context.selected;
|
||||
else serie.data[j].context.selected = false;
|
||||
}
|
||||
if (chart.onPointerClickPie != null)
|
||||
{
|
||||
chart.onPointerClickPie(eventData, i, index);
|
||||
}
|
||||
if (j == dataIndex) serie.data[j].context.selected = !serie.data[j].context.selected;
|
||||
else serie.data[j].context.selected = false;
|
||||
}
|
||||
}
|
||||
if (refresh) chart.RefreshChart();
|
||||
base.OnPointerDown(eventData);
|
||||
}
|
||||
|
||||
private void UpdateSerieContext()
|
||||
public override int GetPointerItemDataIndex()
|
||||
{
|
||||
return GetPiePosIndex(serie, chart.pointerPos);
|
||||
}
|
||||
|
||||
public override void UpdateSerieContext()
|
||||
{
|
||||
var needCheck = m_LegendEnter || (chart.isPointerInChart && PointerIsInPieSerie(serie, chart.pointerPos));
|
||||
var needInteract = false;
|
||||
@@ -123,14 +118,8 @@ namespace XCharts.Runtime
|
||||
serieData.context.highlight = false;
|
||||
serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor);
|
||||
}
|
||||
if (chart.onPointerEnterPie != null)
|
||||
{
|
||||
chart.onPointerEnterPie(serie.index, serie.context.pointerItemDataIndex);
|
||||
}
|
||||
if (needInteract)
|
||||
{
|
||||
chart.RefreshPainter(serie);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -138,6 +127,7 @@ namespace XCharts.Runtime
|
||||
var lastPointerItemDataIndex = serie.context.pointerItemDataIndex;
|
||||
var dataIndex = GetPiePosIndex(serie, chart.pointerPos);
|
||||
serie.context.pointerItemDataIndex = -1;
|
||||
serie.context.pointerEnter = dataIndex >= 0;
|
||||
for (int i = 0; i < serie.dataCount; i++)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
@@ -162,10 +152,6 @@ namespace XCharts.Runtime
|
||||
if (lastPointerItemDataIndex != serie.context.pointerItemDataIndex)
|
||||
{
|
||||
needInteract = true;
|
||||
if (chart.onPointerEnterPie != null)
|
||||
{
|
||||
chart.onPointerEnterPie(serie.index, serie.context.pointerItemDataIndex);
|
||||
}
|
||||
}
|
||||
if (needInteract)
|
||||
{
|
||||
@@ -220,21 +206,21 @@ namespace XCharts.Runtime
|
||||
}
|
||||
float degree = serie.pieRoseType == RoseType.Area ?
|
||||
(totalDegree / showdataCount) :
|
||||
(float) (totalDegree * value / dataTotalFilterMinAngle);
|
||||
(float)(totalDegree * value / dataTotalFilterMinAngle);
|
||||
if (serie.minAngle > 0 && degree < serie.minAngle) degree = serie.minAngle;
|
||||
serieData.context.toAngle = startDegree + degree;
|
||||
if (serieData.radius > 0)
|
||||
serieData.context.outsideRadius = ChartHelper.GetActualValue(serieData.radius, Mathf.Min(chart.chartWidth, chart.chartHeight));
|
||||
else
|
||||
serieData.context.outsideRadius = serie.pieRoseType > 0 ?
|
||||
serie.context.insideRadius + (float) ((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) :
|
||||
serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) :
|
||||
serie.context.outsideRadius;
|
||||
if (serieData.context.highlight)
|
||||
{
|
||||
serieData.context.outsideRadius += chart.theme.serie.pieTooltipExtraRadius;
|
||||
}
|
||||
var offset = 0f;
|
||||
if (serie.pieClickOffset && serieData.selected)
|
||||
if (serie.pieClickOffset && (serieData.selected || serieData.context.selected))
|
||||
{
|
||||
offset += chart.theme.serie.pieSelectedOffset;
|
||||
}
|
||||
@@ -258,7 +244,7 @@ namespace XCharts.Runtime
|
||||
serieData.context.offsetRadius = 0;
|
||||
serieData.context.insideRadius -= serieData.context.offsetRadius;
|
||||
serieData.context.outsideRadius -= serieData.context.offsetRadius;
|
||||
if (serie.pieClickOffset && serieData.selected)
|
||||
if (serie.pieClickOffset && (serieData.selected || serieData.context.selected))
|
||||
{
|
||||
serieData.context.offsetRadius += chart.theme.serie.pieSelectedOffset;
|
||||
if (serieData.context.insideRadius > 0)
|
||||
@@ -350,7 +336,7 @@ namespace XCharts.Runtime
|
||||
serieData.interact.SetValueAndColor(ref interacting, outsideRadius, color, toColor);
|
||||
}
|
||||
|
||||
if (serie.pieClickOffset && serieData.selected)
|
||||
if (serie.pieClickOffset && (serieData.selected || serieData.context.selected))
|
||||
{
|
||||
var drawEndDegree = serieData.context.currentAngle;
|
||||
var needRoundCap = serie.roundCap && insideRadius > 0;
|
||||
@@ -493,7 +479,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
var diffAngle = (currAngle - startAngle) % 360;
|
||||
var isLeft = diffAngle > 180 || (diffAngle == 0 && serieData.context.startAngle > 0);
|
||||
var pos5X = isLeft?pos2.x - labelLine.lineLength2 : pos2.x + labelLine.lineLength2;
|
||||
var pos5X = isLeft ? pos2.x - labelLine.lineLength2 : pos2.x + labelLine.lineLength2;
|
||||
var pos5 = new Vector3(pos5X, pos2.y);
|
||||
var angle = Vector3.Angle(pos1 - center, pos2 - pos1);
|
||||
if (angle > 15)
|
||||
@@ -538,7 +524,7 @@ namespace XCharts.Runtime
|
||||
var serieData = serie.data[i];
|
||||
if (angle >= serieData.context.startAngle && angle <= serieData.context.toAngle)
|
||||
{
|
||||
var ndist = serieData.selected ?
|
||||
var ndist = (serieData.selected || serieData.context.selected) ?
|
||||
Vector2.Distance(local, serieData.context.offsetCenter) :
|
||||
dist;
|
||||
if (ndist >= serieData.context.insideRadius && ndist <= serieData.context.outsideRadius)
|
||||
|
||||
@@ -12,7 +12,6 @@ namespace XCharts.Runtime
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
UpdateSerieContext();
|
||||
}
|
||||
|
||||
public override void DrawSerie(VertexHelper vh)
|
||||
@@ -86,22 +85,33 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateSerieContext()
|
||||
public override void UpdateSerieContext()
|
||||
{
|
||||
var needCheck = m_LegendEnter ||
|
||||
(chart.isPointerInChart && (m_RadarCoord != null && m_RadarCoord.IsPointerEnter()));
|
||||
var needInteract = false;
|
||||
var needHideAll = false;
|
||||
if (!needCheck)
|
||||
{
|
||||
if (m_LastCheckContextFlag == needCheck)
|
||||
return;
|
||||
needHideAll = true;
|
||||
if (m_LastCheckContextFlag != needCheck)
|
||||
{
|
||||
m_LastCheckContextFlag = needCheck;
|
||||
serie.context.pointerItemDataIndex = -1;
|
||||
serie.context.pointerItemDataDimension = -1;
|
||||
serie.context.pointerEnter = false;
|
||||
foreach (var serieData in serie.data)
|
||||
{
|
||||
serieData.context.highlight = false;
|
||||
serieData.interact.Reset();
|
||||
}
|
||||
chart.RefreshPainter(serie);
|
||||
}
|
||||
return;
|
||||
}
|
||||
m_LastCheckContextFlag = needCheck;
|
||||
serie.highlight = false;
|
||||
serie.context.pointerEnter = false;
|
||||
serie.context.pointerItemDataIndex = -1;
|
||||
serie.context.pointerItemDataDimension = -1;
|
||||
var areaStyle = serie.areaStyle;
|
||||
var themeSymbolSize = chart.theme.serie.lineSymbolSize;
|
||||
switch (serie.radarType)
|
||||
@@ -112,21 +122,23 @@ namespace XCharts.Runtime
|
||||
var serieData = serie.data[i];
|
||||
var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
|
||||
var symbolSize = symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize);
|
||||
if (needHideAll || m_LegendEnter)
|
||||
if (m_LegendEnter)
|
||||
{
|
||||
serieData.context.highlight = needHideAll ? false : true;
|
||||
serieData.context.highlight = true;
|
||||
serieData.interact.SetValue(ref needInteract, symbolSize, serieData.context.highlight);
|
||||
}
|
||||
else
|
||||
{
|
||||
serieData.context.highlight = false;
|
||||
foreach (var pos in serieData.context.dataPoints)
|
||||
for (int n = 0; n < serieData.context.dataPoints.Count; n++)
|
||||
{
|
||||
var pos = serieData.context.dataPoints[n];
|
||||
if (Vector3.Distance(chart.pointerPos, pos) < symbolSize * 2)
|
||||
{
|
||||
serie.highlight = true;
|
||||
serie.context.pointerEnter = true;
|
||||
serie.context.pointerItemDataIndex = i;
|
||||
serie.context.pointerItemDataDimension = n;
|
||||
serieData.context.highlight = true;
|
||||
break;
|
||||
}
|
||||
@@ -144,6 +156,7 @@ namespace XCharts.Runtime
|
||||
serie.highlight = true;
|
||||
serie.context.pointerEnter = true;
|
||||
serie.context.pointerItemDataIndex = i;
|
||||
serie.context.pointerItemDataDimension = n;
|
||||
serieData.context.highlight = true;
|
||||
break;
|
||||
}
|
||||
@@ -163,6 +176,7 @@ namespace XCharts.Runtime
|
||||
{
|
||||
serie.context.pointerEnter = true;
|
||||
serie.context.pointerItemDataIndex = i;
|
||||
serie.context.pointerItemDataDimension = 1;
|
||||
serieData.context.highlight = true;
|
||||
needInteract = true;
|
||||
}
|
||||
@@ -183,6 +197,7 @@ namespace XCharts.Runtime
|
||||
{
|
||||
serie.context.pointerEnter = true;
|
||||
serie.context.pointerItemDataIndex = n;
|
||||
serie.context.pointerItemDataDimension = 1;
|
||||
p1.context.highlight = true;
|
||||
needInteract = true;
|
||||
break;
|
||||
@@ -264,7 +279,7 @@ namespace XCharts.Runtime
|
||||
max = serie.context.dataMax;
|
||||
}
|
||||
}
|
||||
var radius = (float) (m_RadarCoord.context.dataRadius * (value - min) / (max - min));
|
||||
var radius = (float)(m_RadarCoord.context.dataRadius * (value - min) / (max - min));
|
||||
var currAngle = startAngle + (n + (m_RadarCoord.positionType == RadarCoord.PositionType.Between ? 0.5f : 0)) * angle;
|
||||
radius *= rate;
|
||||
if (n == 0)
|
||||
@@ -380,7 +395,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
var lineStyle = SerieHelper.GetLineStyle(serie, serieData);
|
||||
Color32 areaColor, areaToColor;
|
||||
var colorIndex = serie.colorByData?j : serie.context.colorIndex;
|
||||
var colorIndex = serie.colorByData ? j : serie.context.colorIndex;
|
||||
var showArea = SerieHelper.GetAreaColor(out areaColor, out areaToColor, serie, serieData, chart.theme, colorIndex - 1);
|
||||
var lineColor = SerieHelper.GetLineColor(serie, serieData, chart.theme, colorIndex);
|
||||
int dataCount = m_RadarCoord.indicatorList.Count;
|
||||
@@ -397,7 +412,7 @@ namespace XCharts.Runtime
|
||||
{
|
||||
lineColor = m_RadarCoord.outRangeColor;
|
||||
}
|
||||
var radius = (float) (max < 0 ? m_RadarCoord.context.dataRadius - m_RadarCoord.context.dataRadius * value / max :
|
||||
var radius = (float)(max < 0 ? m_RadarCoord.context.dataRadius - m_RadarCoord.context.dataRadius * value / max :
|
||||
m_RadarCoord.context.dataRadius * value / max);
|
||||
var currAngle = startAngle + (index + (m_RadarCoord.positionType == RadarCoord.PositionType.Between ? 0.5f : 0)) * angle;
|
||||
radius *= rate;
|
||||
|
||||
@@ -16,10 +16,9 @@ namespace XCharts.Runtime
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
UpdateSerieContext();
|
||||
}
|
||||
|
||||
private void UpdateSerieContext()
|
||||
public override void UpdateSerieContext()
|
||||
{
|
||||
var needCheck = chart.isPointerInChart || m_LegendEnter;
|
||||
var needInteract = false;
|
||||
|
||||
@@ -13,7 +13,6 @@ namespace XCharts.Runtime
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
UpdateSerieContext();
|
||||
}
|
||||
|
||||
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category,
|
||||
@@ -63,7 +62,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateSerieContext()
|
||||
public override void UpdateSerieContext()
|
||||
{
|
||||
var needCheck = m_LegendEnter || (chart.isPointerInChart && (m_Grid == null || m_Grid.IsPointerEnter()));
|
||||
|
||||
|
||||
@@ -309,6 +309,27 @@ namespace XCharts.Runtime
|
||||
[NonSerialized] public List<SerieData> m_FilterData = new List<SerieData>();
|
||||
[NonSerialized] private bool m_NameDirty;
|
||||
|
||||
/// <summary>
|
||||
/// event callback when click serie.
|
||||
/// |点击系列时的回调。
|
||||
/// </summary>
|
||||
public Action<SerieEventData> onClick { get; set; }
|
||||
/// <summary>
|
||||
/// event callback when mouse down on serie.
|
||||
/// |鼠标按下时的回调。
|
||||
/// </summary>
|
||||
public Action<SerieEventData> onDown { get; set; }
|
||||
/// <summary>
|
||||
/// event callback when mouse enter serie.
|
||||
/// |鼠标进入时的回调。
|
||||
/// </summary>
|
||||
public Action<SerieEventData> onEnter { get; set; }
|
||||
/// <summary>
|
||||
/// event callback when mouse leave serie.
|
||||
/// |鼠标离开时的回调。
|
||||
/// </summary>
|
||||
public Action<SerieEventData> onExit { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The index of serie.
|
||||
/// |系列索引。
|
||||
|
||||
@@ -26,6 +26,10 @@ namespace XCharts.Runtime
|
||||
/// </summary>
|
||||
public int pointerItemDataIndex = -1;
|
||||
/// <summary>
|
||||
/// 鼠标当前指示的数据项维度
|
||||
/// </summary>
|
||||
public int pointerItemDataDimension = 1;
|
||||
/// <summary>
|
||||
/// 鼠标所在轴线上的数据项索引(可能有多个)
|
||||
/// </summary>
|
||||
public List<int> pointerAxisDataIndexs = new List<int>();
|
||||
|
||||
@@ -31,14 +31,18 @@ namespace XCharts.Runtime
|
||||
public virtual void OnScroll(PointerEventData eventData) { }
|
||||
public virtual void RefreshLabelNextFrame() { }
|
||||
public virtual void RefreshLabelInternal() { }
|
||||
public virtual void UpdateSerieContext() { }
|
||||
public virtual void UpdateTooltipSerieParams(int dataIndex, bool showCategory,
|
||||
string category, string marker,
|
||||
string itemFormatter, string numericFormatter, string ignoreDataDefaultContent,
|
||||
ref List<SerieParams> paramList, ref string title) { }
|
||||
ref List<SerieParams> paramList, ref string title)
|
||||
{ }
|
||||
public virtual void OnLegendButtonClick(int index, string legendName, bool show) { }
|
||||
public virtual void OnLegendButtonEnter(int index, string legendName) { }
|
||||
public virtual void OnLegendButtonExit(int index, string legendName) { }
|
||||
internal abstract void SetSerie(Serie serie);
|
||||
public virtual int GetPointerItemDataIndex() { return -1; }
|
||||
public virtual int GetPointerItemDataDimension() { return 1; }
|
||||
}
|
||||
|
||||
public abstract class SerieHandler<T> : SerieHandler where T : Serie
|
||||
@@ -62,7 +66,7 @@ namespace XCharts.Runtime
|
||||
|
||||
internal override void SetSerie(Serie serie)
|
||||
{
|
||||
this.serie = (T) serie;
|
||||
this.serie = (T)serie;
|
||||
this.serie.context.param.serieType = typeof(T);
|
||||
m_NeedInitComponent = true;
|
||||
AnimationStyleHelper.UpdateSerieAnimation(serie);
|
||||
@@ -121,6 +125,36 @@ namespace XCharts.Runtime
|
||||
serie.ResetInteract();
|
||||
serie.ClearVerticesDirty();
|
||||
}
|
||||
UpdateSerieContextInternal();
|
||||
}
|
||||
|
||||
private void UpdateSerieContextInternal()
|
||||
{
|
||||
var lastEnter = serie.context.pointerEnter;
|
||||
var lastDataIndex = serie.context.pointerItemDataIndex;
|
||||
UpdateSerieContext();
|
||||
if (lastEnter != serie.context.pointerEnter || lastDataIndex != serie.context.pointerItemDataIndex)
|
||||
{
|
||||
if (chart.onSerieEnter != null || chart.onSerieExit != null || serie.onEnter != null || serie.onExit != null)
|
||||
{
|
||||
var dataIndex = GetPointerItemDataIndex();
|
||||
var dimension = GetPointerItemDataDimension();
|
||||
var value = serie.GetData(dataIndex, dimension);
|
||||
var data = SerieEventDataPool.Get(chart.pointerPos, serie.index, dataIndex, dimension, value);
|
||||
if (serie.context.pointerEnter)
|
||||
{
|
||||
if (serie.onEnter != null) serie.onEnter(data);
|
||||
if (chart.onSerieEnter != null) chart.onSerieEnter(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
data.dataIndex = lastDataIndex;
|
||||
if (serie.onExit != null) serie.onExit(data);
|
||||
if (chart.onSerieExit != null) chart.onSerieExit(data);
|
||||
}
|
||||
SerieEventDataPool.Release(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void RefreshLabelNextFrame()
|
||||
@@ -289,7 +323,7 @@ namespace XCharts.Runtime
|
||||
return;
|
||||
}
|
||||
InitRoot();
|
||||
var dataAutoColor = (Color) chart.GetLegendRealShowNameColor(serie.legendName);
|
||||
var dataAutoColor = (Color)chart.GetLegendRealShowNameColor(serie.legendName);
|
||||
m_EndLabel = ChartHelper.AddChartLabel(s_SerieEndLabelObjectName, m_SerieRoot.transform, serie.endLabel,
|
||||
chart.theme.common, "", dataAutoColor, TextAnchor.MiddleLeft);
|
||||
m_EndLabel.SetActive(serie.endLabel.show);
|
||||
@@ -493,7 +527,7 @@ namespace XCharts.Runtime
|
||||
var colorIndex = serie.colorByData ? serieData.index : serie.index;
|
||||
Color32 color, toColor;
|
||||
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal, false);
|
||||
return (Color) color;
|
||||
return (Color)color;
|
||||
}
|
||||
|
||||
protected void UpdateCoordSerieParams(ref List<SerieParams> paramList, ref string title,
|
||||
@@ -537,7 +571,7 @@ namespace XCharts.Runtime
|
||||
|
||||
param.columns.Add(param.marker);
|
||||
param.columns.Add(showCategory ? category : serie.serieName);
|
||||
param.columns.Add(ignore?ignoreDataDefaultContent : ChartCached.NumberToStr(param.value, param.numericFormatter));
|
||||
param.columns.Add(ignore ? ignoreDataDefaultContent : ChartCached.NumberToStr(param.value, param.numericFormatter));
|
||||
|
||||
paramList.Add(param);
|
||||
}
|
||||
@@ -566,7 +600,7 @@ namespace XCharts.Runtime
|
||||
return;
|
||||
|
||||
if (colorIndex < 0)
|
||||
colorIndex = serie.colorByData?dataIndex : chart.GetLegendRealShowNameIndex(serieData.name);
|
||||
colorIndex = serie.colorByData ? dataIndex : chart.GetLegendRealShowNameIndex(serieData.name);
|
||||
|
||||
Color32 color, toColor;
|
||||
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal);
|
||||
@@ -580,7 +614,7 @@ namespace XCharts.Runtime
|
||||
param.dataCount = serie.dataCount;
|
||||
param.value = serieData.GetData(param.dimension);
|
||||
param.ignore = ignore;
|
||||
param.total = serie.multiDimensionLabel? serieData.GetTotalData() : serie.GetDataTotal(defaultDimension);
|
||||
param.total = serie.multiDimensionLabel ? serieData.GetTotalData() : serie.GetDataTotal(defaultDimension);
|
||||
param.color = color;
|
||||
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
|
||||
param.itemFormatter = itemFormatter;
|
||||
@@ -590,7 +624,7 @@ namespace XCharts.Runtime
|
||||
param.columns.Add(param.marker);
|
||||
param.columns.Add(serieData.name);
|
||||
|
||||
param.columns.Add(ignore?ignoreDataDefaultContent : ChartCached.NumberToStr(param.value, param.numericFormatter));
|
||||
param.columns.Add(ignore ? ignoreDataDefaultContent : ChartCached.NumberToStr(param.value, param.numericFormatter));
|
||||
|
||||
paramList.Add(param);
|
||||
}
|
||||
@@ -613,5 +647,47 @@ namespace XCharts.Runtime
|
||||
chart.DrawSymbol(vh, symbol.type, symbol.size, 1, pos,
|
||||
color, color, ColorUtil.clearColor32, color, symbol.gap, null);
|
||||
}
|
||||
|
||||
public override void OnPointerDown(PointerEventData eventData)
|
||||
{
|
||||
if (serie.onDown == null && chart.onSerieDown == null) return;
|
||||
if (!serie.context.pointerEnter) return;
|
||||
var dataIndex = GetPointerItemDataIndex();
|
||||
if (dataIndex < 0) return;
|
||||
var dimension = GetPointerItemDataDimension();
|
||||
var value = serie.GetData(dataIndex, dimension);
|
||||
var data = SerieEventDataPool.Get(chart.pointerPos, serie.index, dataIndex, dimension, value);
|
||||
if (chart.onSerieDown != null)
|
||||
chart.onSerieDown(data);
|
||||
if (serie.onDown != null)
|
||||
serie.onDown(data);
|
||||
SerieEventDataPool.Release(data);
|
||||
}
|
||||
|
||||
public override void OnPointerClick(PointerEventData eventData)
|
||||
{
|
||||
if (serie.onClick == null && chart.onSerieClick == null) return;
|
||||
if (!serie.context.pointerEnter) return;
|
||||
var dataIndex = GetPointerItemDataIndex();
|
||||
if (dataIndex < 0) return;
|
||||
var dimension = GetPointerItemDataDimension();
|
||||
var value = serie.GetData(dataIndex, dimension);
|
||||
var data = SerieEventDataPool.Get(chart.pointerPos, serie.index, dataIndex, dimension, value);
|
||||
if (chart.onSerieClick != null)
|
||||
chart.onSerieClick(data);
|
||||
if (serie.onClick != null)
|
||||
serie.onClick(data);
|
||||
SerieEventDataPool.Release(data);
|
||||
}
|
||||
|
||||
public override int GetPointerItemDataIndex()
|
||||
{
|
||||
return serie.context.pointerItemDataIndex;
|
||||
}
|
||||
|
||||
public override int GetPointerItemDataDimension()
|
||||
{
|
||||
return serie.context.pointerItemDataDimension;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user