mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-30 13:28:47 +00:00
增加Chart的onSerieClick,onSerieDown,onSerieEnter和onSerieExit回调
This commit is contained in:
@@ -69,6 +69,8 @@ slug: /api
|
|||||||
- [SerieDataComponentAttribute](#seriedatacomponentattribute)
|
- [SerieDataComponentAttribute](#seriedatacomponentattribute)
|
||||||
- [SerieDataContext](#seriedatacontext)
|
- [SerieDataContext](#seriedatacontext)
|
||||||
- [SerieDataExtraFieldAttribute](#seriedataextrafieldattribute)
|
- [SerieDataExtraFieldAttribute](#seriedataextrafieldattribute)
|
||||||
|
- [SerieEventData](#serieeventdata)
|
||||||
|
- [SerieEventDataPool](#serieeventdatapool)
|
||||||
- [SerieHandler](#seriehandler)
|
- [SerieHandler](#seriehandler)
|
||||||
- [SerieHandler<T>](#seriehandlert)
|
- [SerieHandler<T>](#seriehandlert)
|
||||||
- [SerieHandlerAttribute](#seriehandlerattribute)
|
- [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)|
|
||||||
| SerieDataExtraFieldAttribute() |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6, string field7)|
|
| 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
|
## SerieHandler
|
||||||
|
|
||||||
|public method|description|
|
|public method|description|
|
||||||
@@ -896,6 +911,7 @@ Inherits or Implemented: [Attribute](#attribute)
|
|||||||
| RefreshLabelNextFrame() |public virtual void RefreshLabelNextFrame() { }|
|
| RefreshLabelNextFrame() |public virtual void RefreshLabelNextFrame() { }|
|
||||||
| RemoveComponent() |public virtual void RemoveComponent() { }|
|
| RemoveComponent() |public virtual void RemoveComponent() { }|
|
||||||
| Update() |public virtual void Update() { }|
|
| Update() |public virtual void Update() { }|
|
||||||
|
| UpdateSerieContext() |public virtual void UpdateSerieContext() { }|
|
||||||
|
|
||||||
## SerieHandler<T>
|
## SerieHandler<T>
|
||||||
|
|
||||||
@@ -904,6 +920,8 @@ Inherits or Implemented: [SerieHandler where T](#seriehandler where t),[Serie](#
|
|||||||
|public method|description|
|
|public method|description|
|
||||||
|--|--|
|
|--|--|
|
||||||
| DrawLabelLineSymbol() |public void DrawLabelLineSymbol(VertexHelper vh, LabelLine labelLine, Vector3 startPos, Vector3 endPos, Color32 defaultColor)|
|
| 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)|
|
| GetSerieDataAutoColor() |public virtual Color GetSerieDataAutoColor(SerieData serieData)|
|
||||||
| GetSerieDataLabelOffset() |public virtual Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label)|
|
| GetSerieDataLabelOffset() |public virtual Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label)|
|
||||||
| GetSerieDataLabelPosition() |public virtual Vector3 GetSerieDataLabelPosition(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)|
|
| OnLegendButtonClick() |public override void OnLegendButtonClick(int index, string legendName, bool show)|
|
||||||
| OnLegendButtonEnter() |public override void OnLegendButtonEnter(int index, string legendName)|
|
| OnLegendButtonEnter() |public override void OnLegendButtonEnter(int index, string legendName)|
|
||||||
| OnLegendButtonExit() |public override void OnLegendButtonExit(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()|
|
| RefreshEndLabelInternal() |public virtual void RefreshEndLabelInternal()|
|
||||||
| RefreshLabelInternal() |public override void RefreshLabelInternal()|
|
| RefreshLabelInternal() |public override void RefreshLabelInternal()|
|
||||||
| RefreshLabelNextFrame() |public override void RefreshLabelNextFrame()|
|
| RefreshLabelNextFrame() |public override void RefreshLabelNextFrame()|
|
||||||
|
|||||||
@@ -69,6 +69,8 @@ slug: /api
|
|||||||
- [SerieDataComponentAttribute](#seriedatacomponentattribute)
|
- [SerieDataComponentAttribute](#seriedatacomponentattribute)
|
||||||
- [SerieDataContext](#seriedatacontext)
|
- [SerieDataContext](#seriedatacontext)
|
||||||
- [SerieDataExtraFieldAttribute](#seriedataextrafieldattribute)
|
- [SerieDataExtraFieldAttribute](#seriedataextrafieldattribute)
|
||||||
|
- [SerieEventData](#serieeventdata)
|
||||||
|
- [SerieEventDataPool](#serieeventdatapool)
|
||||||
- [SerieHandler](#seriehandler)
|
- [SerieHandler](#seriehandler)
|
||||||
- [SerieHandler<T>](#seriehandlert)
|
- [SerieHandler<T>](#seriehandlert)
|
||||||
- [SerieHandlerAttribute](#seriehandlerattribute)
|
- [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)|
|
||||||
| SerieDataExtraFieldAttribute() |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6, string field7)|
|
| 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
|
## SerieHandler
|
||||||
|
|
||||||
|public method|description|
|
|public method|description|
|
||||||
@@ -896,6 +911,7 @@ Inherits or Implemented: [Attribute](#attribute)
|
|||||||
| RefreshLabelNextFrame() |public virtual void RefreshLabelNextFrame() { }|
|
| RefreshLabelNextFrame() |public virtual void RefreshLabelNextFrame() { }|
|
||||||
| RemoveComponent() |public virtual void RemoveComponent() { }|
|
| RemoveComponent() |public virtual void RemoveComponent() { }|
|
||||||
| Update() |public virtual void Update() { }|
|
| Update() |public virtual void Update() { }|
|
||||||
|
| UpdateSerieContext() |public virtual void UpdateSerieContext() { }|
|
||||||
|
|
||||||
## SerieHandler<T>
|
## SerieHandler<T>
|
||||||
|
|
||||||
@@ -904,6 +920,8 @@ Inherits or Implemented: [SerieHandler where T](#seriehandler where t),[Serie](#
|
|||||||
|public method|description|
|
|public method|description|
|
||||||
|--|--|
|
|--|--|
|
||||||
| DrawLabelLineSymbol() |public void DrawLabelLineSymbol(VertexHelper vh, LabelLine labelLine, Vector3 startPos, Vector3 endPos, Color32 defaultColor)|
|
| 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)|
|
| GetSerieDataAutoColor() |public virtual Color GetSerieDataAutoColor(SerieData serieData)|
|
||||||
| GetSerieDataLabelOffset() |public virtual Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label)|
|
| GetSerieDataLabelOffset() |public virtual Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label)|
|
||||||
| GetSerieDataLabelPosition() |public virtual Vector3 GetSerieDataLabelPosition(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)|
|
| OnLegendButtonClick() |public override void OnLegendButtonClick(int index, string legendName, bool show)|
|
||||||
| OnLegendButtonEnter() |public override void OnLegendButtonEnter(int index, string legendName)|
|
| OnLegendButtonEnter() |public override void OnLegendButtonEnter(int index, string legendName)|
|
||||||
| OnLegendButtonExit() |public override void OnLegendButtonExit(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()|
|
| RefreshEndLabelInternal() |public virtual void RefreshEndLabelInternal()|
|
||||||
| RefreshLabelInternal() |public override void RefreshLabelInternal()|
|
| RefreshLabelInternal() |public override void RefreshLabelInternal()|
|
||||||
| RefreshLabelNextFrame() |public override void RefreshLabelNextFrame()|
|
| RefreshLabelNextFrame() |public override void RefreshLabelNextFrame()|
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ slug: /changelog
|
|||||||
|
|
||||||
## master
|
## master
|
||||||
|
|
||||||
|
* (2023.03.09) 增加`Chart`的`onSerieClick`,`onSerieDown`,`onSerieEnter`和`onSerieExit`回调
|
||||||
|
* (2023.03.09) 修复`Pie`的点击选中偏移不生效的问题
|
||||||
* (2023.03.04) 增加`Legend`的`Positions`可自定义图例的位置
|
* (2023.03.04) 增加`Legend`的`Positions`可自定义图例的位置
|
||||||
* (2023.03.03) 修复`Animation`变更动画可能无效的问题
|
* (2023.03.03) 修复`Animation`变更动画可能无效的问题
|
||||||
* (2023.02.28) 修复`Legend`点击时`Serie`的`Label`不刷新的问题
|
* (2023.02.28) 修复`Legend`点击时`Serie`的`Label`不刷新的问题
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace XCharts.Editor
|
|||||||
PropertyField("m_RoundCap");
|
PropertyField("m_RoundCap");
|
||||||
PropertyField("m_Ignore");
|
PropertyField("m_Ignore");
|
||||||
PropertyField("m_IgnoreValue");
|
PropertyField("m_IgnoreValue");
|
||||||
|
PropertyField("m_ClickOffset");
|
||||||
});
|
});
|
||||||
PropertyField("m_ItemStyle");
|
PropertyField("m_ItemStyle");
|
||||||
PropertyField("m_Animation");
|
PropertyField("m_Animation");
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ namespace XCharts.Example
|
|||||||
chart.AddData(0, 135, "视频广告");
|
chart.AddData(0, 135, "视频广告");
|
||||||
chart.AddData(0, 1548, "搜索引擎");
|
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;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using XCharts.Runtime;
|
using XCharts.Runtime;
|
||||||
#if INPUT_SYSTEM_ENABLED
|
#if INPUT_SYSTEM_ENABLED
|
||||||
@@ -14,6 +15,9 @@ namespace XCharts.Example
|
|||||||
void Awake()
|
void Awake()
|
||||||
{
|
{
|
||||||
chart = gameObject.GetComponent<BaseChart>();
|
chart = gameObject.GetComponent<BaseChart>();
|
||||||
|
chart.onSerieClick = OnPointerClickLine;
|
||||||
|
chart.onSerieEnter = OnPointerEnterLine;
|
||||||
|
chart.onSerieExit = OnPointerExitLine;
|
||||||
var btnTrans = transform.parent.Find("Button");
|
var btnTrans = transform.parent.Find("Button");
|
||||||
if (btnTrans)
|
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()
|
void Update()
|
||||||
{
|
{
|
||||||
if (Input.GetKeyDown(KeyCode.Space))
|
if (Input.GetKeyDown(KeyCode.Space))
|
||||||
|
|||||||
14
README.md
14
README.md
@@ -18,27 +18,27 @@
|
|||||||
<a href="https://github.com/XCharts-Team/XCharts/releases">
|
<a href="https://github.com/XCharts-Team/XCharts/releases">
|
||||||
<img src="https://img.shields.io/github/v/release/XCharts-Team/XCharts?include_prereleases"></img>
|
<img src="https://img.shields.io/github/v/release/XCharts-Team/XCharts?include_prereleases"></img>
|
||||||
</a>
|
</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>
|
<img src="https://img.shields.io/github/repo-size/monitor1394/unity-ugui-xcharts"></img>
|
||||||
</a>
|
</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>
|
<img src="https://img.shields.io/github/languages/code-size/monitor1394/unity-ugui-xcharts"></img>
|
||||||
</a>
|
</a>
|
||||||
<a href="">
|
<a href="https://xcharts-team.github.io/docs/tutorial01">
|
||||||
<img src="https://img.shields.io/badge/Unity-5.6+-green"></img>
|
<img src="https://img.shields.io/badge/Unity-5.6+-green"></img>
|
||||||
</a>
|
</a>
|
||||||
<a href="">
|
<a href="https://xcharts-team.github.io/docs/tutorial01">
|
||||||
<img src="https://img.shields.io/badge/TextMeshPro-YES-green"></img>
|
<img src="https://img.shields.io/badge/TextMeshPro-YES-green"></img>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<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>
|
<img src="https://img.shields.io/github/stars/XCharts-Team/XCharts?style=social"></img>
|
||||||
</a>
|
</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>
|
<img src="https://img.shields.io/github/forks/XCharts-Team/XCharts?style=social"></img>
|
||||||
</a>
|
</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>
|
<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>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -104,21 +104,48 @@ namespace XCharts.Runtime
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public CustomDrawGaugePointerFunction customDrawGaugePointerFunction { set { m_CustomDrawGaugePointerFunction = value; } get { return m_CustomDrawGaugePointerFunction; } }
|
public CustomDrawGaugePointerFunction customDrawGaugePointerFunction { set { m_CustomDrawGaugePointerFunction = value; } get { return m_CustomDrawGaugePointerFunction; } }
|
||||||
/// <summary>
|
/// <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.
|
/// the callback function of pointer click pie area.
|
||||||
/// |点击饼图区域回调。参数:PointerEventData,SerieIndex,SerieDataIndex
|
/// |点击饼图区域回调。参数:PointerEventData,SerieIndex,SerieDataIndex
|
||||||
/// </summary>
|
/// </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>
|
/// <summary>
|
||||||
/// the callback function of pointer enter pie area.
|
/// the callback function of pointer enter pie area.
|
||||||
/// |鼠标进入和离开饼图区域回调,SerieDataIndex为-1时表示离开。参数:PointerEventData,SerieIndex,SerieDataIndex
|
/// |鼠标进入和离开饼图区域回调,SerieDataIndex为-1时表示离开。参数:PointerEventData,SerieIndex,SerieDataIndex
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Since("v3.3.0")]
|
[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; } }
|
public Action<int, int> onPointerEnterPie { set { m_OnPointerEnterPie = value; m_ForceOpenRaycastTarget = true; } get { return m_OnPointerEnterPie; } }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// the callback function of click bar.
|
/// the callback function of click bar.
|
||||||
/// |点击柱形图柱条回调。参数:eventData, dataIndex
|
/// |点击柱形图柱条回调。参数:eventData, dataIndex
|
||||||
/// </summary>
|
/// </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>
|
/// <summary>
|
||||||
/// 坐标轴变更数据索引时回调。参数:axis, dataIndex/dataValue
|
/// 坐标轴变更数据索引时回调。参数:axis, dataIndex/dataValue
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -89,9 +89,11 @@ namespace XCharts.Runtime
|
|||||||
protected Action<VertexHelper> m_OnDrawTop;
|
protected Action<VertexHelper> m_OnDrawTop;
|
||||||
protected Action<VertexHelper, Serie> m_OnDrawSerieBefore;
|
protected Action<VertexHelper, Serie> m_OnDrawSerieBefore;
|
||||||
protected Action<VertexHelper, Serie> m_OnDrawSerieAfter;
|
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<int, int> m_OnPointerEnterPie;
|
||||||
protected Action<PointerEventData, int> m_OnPointerClickBar;
|
|
||||||
protected Action<Axis, double> m_OnAxisPointerValueChanged;
|
protected Action<Axis, double> m_OnAxisPointerValueChanged;
|
||||||
protected Action<Legend, int, string, bool> m_OnLegendClick;
|
protected Action<Legend, int, string, bool> m_OnLegendClick;
|
||||||
protected Action<Legend, int, string> m_OnLegendEnter;
|
protected Action<Legend, int, string> m_OnLegendEnter;
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ namespace XCharts.Runtime
|
|||||||
|
|
||||||
protected virtual void CheckRefreshChart()
|
protected virtual void CheckRefreshChart()
|
||||||
{
|
{
|
||||||
if (m_RefreshChart)
|
if (m_RefreshChart && m_Painter != null)
|
||||||
{
|
{
|
||||||
m_Painter.Refresh();
|
m_Painter.Refresh();
|
||||||
m_RefreshChart = false;
|
m_RefreshChart = false;
|
||||||
@@ -237,6 +237,7 @@ namespace XCharts.Runtime
|
|||||||
|
|
||||||
protected virtual void CheckRefreshPainter()
|
protected virtual void CheckRefreshPainter()
|
||||||
{
|
{
|
||||||
|
if (m_Painter == null) return;
|
||||||
m_Painter.CheckRefresh();
|
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 UNITY_EDITOR
|
||||||
if (!Application.isPlaying)
|
if (!Application.isPlaying)
|
||||||
GameObject.DestroyImmediate(component as GameObject, true);
|
GameObject.DestroyImmediate(component as UnityEngine.Object);
|
||||||
else
|
else
|
||||||
GameObject.Destroy(component as GameObject);
|
GameObject.Destroy(component as UnityEngine.Object);
|
||||||
#else
|
#else
|
||||||
GameObject.Destroy(component as GameObject);
|
GameObject.Destroy(component as UnityEngine.Object);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -389,6 +389,7 @@ namespace XCharts.Runtime
|
|||||||
var alignment = textStyle.GetAlignment(autoAlignment);
|
var alignment = textStyle.GetAlignment(autoAlignment);
|
||||||
UpdateAnchorAndPivotByTextAlignment(alignment, out anchorMin, out anchorMax, out pivot);
|
UpdateAnchorAndPivotByTextAlignment(alignment, out anchorMin, out anchorMax, out pivot);
|
||||||
var labelObj = AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta);
|
var labelObj = AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta);
|
||||||
|
ChartHelper.RemoveComponent<Text>(labelObj);
|
||||||
var label = EnsureComponent<ChartLabel>(labelObj);
|
var label = EnsureComponent<ChartLabel>(labelObj);
|
||||||
label.text = AddTextObject("Text", label.gameObject.transform, anchorMin, anchorMax, pivot,
|
label.text = AddTextObject("Text", label.gameObject.transform, anchorMin, anchorMax, pivot,
|
||||||
sizeDelta, textStyle, theme, autoColor, autoAlignment, label.text);
|
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()
|
private void UpdateSerieGridContext()
|
||||||
{
|
{
|
||||||
if (m_SerieGrid == null)
|
if (m_SerieGrid == null)
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ namespace XCharts.Runtime
|
|||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
UpdateSerieContext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category,
|
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category,
|
||||||
@@ -30,7 +29,7 @@ namespace XCharts.Runtime
|
|||||||
DrawBarSerie(vh, serie, serie.context.colorIndex);
|
DrawBarSerie(vh, serie, serie.context.colorIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateSerieContext()
|
public override void UpdateSerieContext()
|
||||||
{
|
{
|
||||||
if (m_SerieGrid == null)
|
if (m_SerieGrid == null)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -27,10 +27,6 @@ namespace XCharts.Runtime
|
|||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
if (serie.IsUseCoord<GridCoord>())
|
|
||||||
UpdateSerieContext();
|
|
||||||
else if (serie.IsUseCoord<PolarCoord>())
|
|
||||||
UpdateSeriePolarContext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void DrawSerie(VertexHelper vh)
|
public override void DrawSerie(VertexHelper vh)
|
||||||
@@ -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)
|
if (m_SerieGrid == null)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using XUGL;
|
using XUGL;
|
||||||
|
|
||||||
@@ -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()
|
public override void Update()
|
||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
UpdateSerieContext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category,
|
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category,
|
||||||
@@ -31,7 +30,7 @@ namespace XCharts.Runtime
|
|||||||
DrawLineSerie(vh, serie);
|
DrawLineSerie(vh, serie);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateSerieContext()
|
public override void UpdateSerieContext()
|
||||||
{
|
{
|
||||||
if (m_SerieGrid == null)
|
if (m_SerieGrid == null)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ namespace XCharts.Runtime
|
|||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
UpdateSerieContext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void DrawSerie(VertexHelper vh)
|
public override void DrawSerie(VertexHelper vh)
|
||||||
@@ -19,8 +18,6 @@ namespace XCharts.Runtime
|
|||||||
DrawParallelSerie(vh, serie);
|
DrawParallelSerie(vh, serie);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateSerieContext() { }
|
|
||||||
|
|
||||||
private void DrawParallelSerie(VertexHelper vh, Parallel serie)
|
private void DrawParallelSerie(VertexHelper vh, Parallel serie)
|
||||||
{
|
{
|
||||||
if (!serie.show) return;
|
if (!serie.show) return;
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ namespace XCharts.Runtime
|
|||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
UpdateSerieContext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void DrawBase(VertexHelper vh)
|
public override void DrawBase(VertexHelper vh)
|
||||||
@@ -79,32 +78,28 @@ namespace XCharts.Runtime
|
|||||||
|
|
||||||
public override void OnPointerDown(PointerEventData eventData)
|
public override void OnPointerDown(PointerEventData eventData)
|
||||||
{
|
{
|
||||||
if (!chart.HasSerie<Pie>()) return;
|
|
||||||
if (chart.pointerPos == Vector2.zero) return;
|
if (chart.pointerPos == Vector2.zero) return;
|
||||||
|
var dataIndex = GetPiePosIndex(serie, chart.pointerPos);
|
||||||
var refresh = false;
|
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;
|
refresh = true;
|
||||||
for (int j = 0; j < serie.data.Count; j++)
|
for (int j = 0; j < serie.data.Count; j++)
|
||||||
{
|
{
|
||||||
if (j == index) serie.data[j].context.selected = !serie.data[j].context.selected;
|
if (j == dataIndex) serie.data[j].context.selected = !serie.data[j].context.selected;
|
||||||
else serie.data[j].context.selected = false;
|
else serie.data[j].context.selected = false;
|
||||||
}
|
}
|
||||||
if (chart.onPointerClickPie != null)
|
|
||||||
{
|
|
||||||
chart.onPointerClickPie(eventData, i, index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (refresh) chart.RefreshChart();
|
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 needCheck = m_LegendEnter || (chart.isPointerInChart && PointerIsInPieSerie(serie, chart.pointerPos));
|
||||||
var needInteract = false;
|
var needInteract = false;
|
||||||
@@ -123,21 +118,16 @@ namespace XCharts.Runtime
|
|||||||
serieData.context.highlight = false;
|
serieData.context.highlight = false;
|
||||||
serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor);
|
serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor);
|
||||||
}
|
}
|
||||||
if (chart.onPointerEnterPie != null)
|
|
||||||
{
|
|
||||||
chart.onPointerEnterPie(serie.index, serie.context.pointerItemDataIndex);
|
|
||||||
}
|
|
||||||
if (needInteract)
|
if (needInteract)
|
||||||
{
|
|
||||||
chart.RefreshPainter(serie);
|
chart.RefreshPainter(serie);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_LastCheckContextFlag = needCheck;
|
m_LastCheckContextFlag = needCheck;
|
||||||
var lastPointerItemDataIndex = serie.context.pointerItemDataIndex;
|
var lastPointerItemDataIndex = serie.context.pointerItemDataIndex;
|
||||||
var dataIndex = GetPiePosIndex(serie, chart.pointerPos);
|
var dataIndex = GetPiePosIndex(serie, chart.pointerPos);
|
||||||
serie.context.pointerItemDataIndex = -1;
|
serie.context.pointerItemDataIndex = -1;
|
||||||
|
serie.context.pointerEnter = dataIndex >= 0;
|
||||||
for (int i = 0; i < serie.dataCount; i++)
|
for (int i = 0; i < serie.dataCount; i++)
|
||||||
{
|
{
|
||||||
var serieData = serie.data[i];
|
var serieData = serie.data[i];
|
||||||
@@ -162,10 +152,6 @@ namespace XCharts.Runtime
|
|||||||
if (lastPointerItemDataIndex != serie.context.pointerItemDataIndex)
|
if (lastPointerItemDataIndex != serie.context.pointerItemDataIndex)
|
||||||
{
|
{
|
||||||
needInteract = true;
|
needInteract = true;
|
||||||
if (chart.onPointerEnterPie != null)
|
|
||||||
{
|
|
||||||
chart.onPointerEnterPie(serie.index, serie.context.pointerItemDataIndex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (needInteract)
|
if (needInteract)
|
||||||
{
|
{
|
||||||
@@ -234,7 +220,7 @@ namespace XCharts.Runtime
|
|||||||
serieData.context.outsideRadius += chart.theme.serie.pieTooltipExtraRadius;
|
serieData.context.outsideRadius += chart.theme.serie.pieTooltipExtraRadius;
|
||||||
}
|
}
|
||||||
var offset = 0f;
|
var offset = 0f;
|
||||||
if (serie.pieClickOffset && serieData.selected)
|
if (serie.pieClickOffset && (serieData.selected || serieData.context.selected))
|
||||||
{
|
{
|
||||||
offset += chart.theme.serie.pieSelectedOffset;
|
offset += chart.theme.serie.pieSelectedOffset;
|
||||||
}
|
}
|
||||||
@@ -258,7 +244,7 @@ namespace XCharts.Runtime
|
|||||||
serieData.context.offsetRadius = 0;
|
serieData.context.offsetRadius = 0;
|
||||||
serieData.context.insideRadius -= serieData.context.offsetRadius;
|
serieData.context.insideRadius -= serieData.context.offsetRadius;
|
||||||
serieData.context.outsideRadius -= 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;
|
serieData.context.offsetRadius += chart.theme.serie.pieSelectedOffset;
|
||||||
if (serieData.context.insideRadius > 0)
|
if (serieData.context.insideRadius > 0)
|
||||||
@@ -350,7 +336,7 @@ namespace XCharts.Runtime
|
|||||||
serieData.interact.SetValueAndColor(ref interacting, outsideRadius, color, toColor);
|
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 drawEndDegree = serieData.context.currentAngle;
|
||||||
var needRoundCap = serie.roundCap && insideRadius > 0;
|
var needRoundCap = serie.roundCap && insideRadius > 0;
|
||||||
@@ -538,7 +524,7 @@ namespace XCharts.Runtime
|
|||||||
var serieData = serie.data[i];
|
var serieData = serie.data[i];
|
||||||
if (angle >= serieData.context.startAngle && angle <= serieData.context.toAngle)
|
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) :
|
Vector2.Distance(local, serieData.context.offsetCenter) :
|
||||||
dist;
|
dist;
|
||||||
if (ndist >= serieData.context.insideRadius && ndist <= serieData.context.outsideRadius)
|
if (ndist >= serieData.context.insideRadius && ndist <= serieData.context.outsideRadius)
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ namespace XCharts.Runtime
|
|||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
UpdateSerieContext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void DrawSerie(VertexHelper vh)
|
public override void DrawSerie(VertexHelper vh)
|
||||||
@@ -86,22 +85,33 @@ namespace XCharts.Runtime
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateSerieContext()
|
public override void UpdateSerieContext()
|
||||||
{
|
{
|
||||||
var needCheck = m_LegendEnter ||
|
var needCheck = m_LegendEnter ||
|
||||||
(chart.isPointerInChart && (m_RadarCoord != null && m_RadarCoord.IsPointerEnter()));
|
(chart.isPointerInChart && (m_RadarCoord != null && m_RadarCoord.IsPointerEnter()));
|
||||||
var needInteract = false;
|
var needInteract = false;
|
||||||
var needHideAll = false;
|
|
||||||
if (!needCheck)
|
if (!needCheck)
|
||||||
{
|
{
|
||||||
if (m_LastCheckContextFlag == needCheck)
|
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;
|
return;
|
||||||
needHideAll = true;
|
|
||||||
}
|
}
|
||||||
m_LastCheckContextFlag = needCheck;
|
m_LastCheckContextFlag = needCheck;
|
||||||
serie.highlight = false;
|
serie.highlight = false;
|
||||||
serie.context.pointerEnter = false;
|
serie.context.pointerEnter = false;
|
||||||
serie.context.pointerItemDataIndex = -1;
|
serie.context.pointerItemDataIndex = -1;
|
||||||
|
serie.context.pointerItemDataDimension = -1;
|
||||||
var areaStyle = serie.areaStyle;
|
var areaStyle = serie.areaStyle;
|
||||||
var themeSymbolSize = chart.theme.serie.lineSymbolSize;
|
var themeSymbolSize = chart.theme.serie.lineSymbolSize;
|
||||||
switch (serie.radarType)
|
switch (serie.radarType)
|
||||||
@@ -112,21 +122,23 @@ namespace XCharts.Runtime
|
|||||||
var serieData = serie.data[i];
|
var serieData = serie.data[i];
|
||||||
var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
|
var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
|
||||||
var symbolSize = symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize);
|
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);
|
serieData.interact.SetValue(ref needInteract, symbolSize, serieData.context.highlight);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
serieData.context.highlight = false;
|
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)
|
if (Vector3.Distance(chart.pointerPos, pos) < symbolSize * 2)
|
||||||
{
|
{
|
||||||
serie.highlight = true;
|
serie.highlight = true;
|
||||||
serie.context.pointerEnter = true;
|
serie.context.pointerEnter = true;
|
||||||
serie.context.pointerItemDataIndex = i;
|
serie.context.pointerItemDataIndex = i;
|
||||||
|
serie.context.pointerItemDataDimension = n;
|
||||||
serieData.context.highlight = true;
|
serieData.context.highlight = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -144,6 +156,7 @@ namespace XCharts.Runtime
|
|||||||
serie.highlight = true;
|
serie.highlight = true;
|
||||||
serie.context.pointerEnter = true;
|
serie.context.pointerEnter = true;
|
||||||
serie.context.pointerItemDataIndex = i;
|
serie.context.pointerItemDataIndex = i;
|
||||||
|
serie.context.pointerItemDataDimension = n;
|
||||||
serieData.context.highlight = true;
|
serieData.context.highlight = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -163,6 +176,7 @@ namespace XCharts.Runtime
|
|||||||
{
|
{
|
||||||
serie.context.pointerEnter = true;
|
serie.context.pointerEnter = true;
|
||||||
serie.context.pointerItemDataIndex = i;
|
serie.context.pointerItemDataIndex = i;
|
||||||
|
serie.context.pointerItemDataDimension = 1;
|
||||||
serieData.context.highlight = true;
|
serieData.context.highlight = true;
|
||||||
needInteract = true;
|
needInteract = true;
|
||||||
}
|
}
|
||||||
@@ -183,6 +197,7 @@ namespace XCharts.Runtime
|
|||||||
{
|
{
|
||||||
serie.context.pointerEnter = true;
|
serie.context.pointerEnter = true;
|
||||||
serie.context.pointerItemDataIndex = n;
|
serie.context.pointerItemDataIndex = n;
|
||||||
|
serie.context.pointerItemDataDimension = 1;
|
||||||
p1.context.highlight = true;
|
p1.context.highlight = true;
|
||||||
needInteract = true;
|
needInteract = true;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -16,10 +16,9 @@ namespace XCharts.Runtime
|
|||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
UpdateSerieContext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateSerieContext()
|
public override void UpdateSerieContext()
|
||||||
{
|
{
|
||||||
var needCheck = chart.isPointerInChart || m_LegendEnter;
|
var needCheck = chart.isPointerInChart || m_LegendEnter;
|
||||||
var needInteract = false;
|
var needInteract = false;
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ namespace XCharts.Runtime
|
|||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
UpdateSerieContext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category,
|
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()));
|
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] public List<SerieData> m_FilterData = new List<SerieData>();
|
||||||
[NonSerialized] private bool m_NameDirty;
|
[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>
|
/// <summary>
|
||||||
/// The index of serie.
|
/// The index of serie.
|
||||||
/// |系列索引。
|
/// |系列索引。
|
||||||
|
|||||||
@@ -26,6 +26,10 @@ namespace XCharts.Runtime
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public int pointerItemDataIndex = -1;
|
public int pointerItemDataIndex = -1;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// 鼠标当前指示的数据项维度
|
||||||
|
/// </summary>
|
||||||
|
public int pointerItemDataDimension = 1;
|
||||||
|
/// <summary>
|
||||||
/// 鼠标所在轴线上的数据项索引(可能有多个)
|
/// 鼠标所在轴线上的数据项索引(可能有多个)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<int> pointerAxisDataIndexs = new List<int>();
|
public List<int> pointerAxisDataIndexs = new List<int>();
|
||||||
|
|||||||
@@ -31,14 +31,18 @@ namespace XCharts.Runtime
|
|||||||
public virtual void OnScroll(PointerEventData eventData) { }
|
public virtual void OnScroll(PointerEventData eventData) { }
|
||||||
public virtual void RefreshLabelNextFrame() { }
|
public virtual void RefreshLabelNextFrame() { }
|
||||||
public virtual void RefreshLabelInternal() { }
|
public virtual void RefreshLabelInternal() { }
|
||||||
|
public virtual void UpdateSerieContext() { }
|
||||||
public virtual void UpdateTooltipSerieParams(int dataIndex, bool showCategory,
|
public virtual void UpdateTooltipSerieParams(int dataIndex, bool showCategory,
|
||||||
string category, string marker,
|
string category, string marker,
|
||||||
string itemFormatter, string numericFormatter, string ignoreDataDefaultContent,
|
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 OnLegendButtonClick(int index, string legendName, bool show) { }
|
||||||
public virtual void OnLegendButtonEnter(int index, string legendName) { }
|
public virtual void OnLegendButtonEnter(int index, string legendName) { }
|
||||||
public virtual void OnLegendButtonExit(int index, string legendName) { }
|
public virtual void OnLegendButtonExit(int index, string legendName) { }
|
||||||
internal abstract void SetSerie(Serie serie);
|
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
|
public abstract class SerieHandler<T> : SerieHandler where T : Serie
|
||||||
@@ -121,6 +125,36 @@ namespace XCharts.Runtime
|
|||||||
serie.ResetInteract();
|
serie.ResetInteract();
|
||||||
serie.ClearVerticesDirty();
|
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()
|
public override void RefreshLabelNextFrame()
|
||||||
@@ -613,5 +647,47 @@ namespace XCharts.Runtime
|
|||||||
chart.DrawSymbol(vh, symbol.type, symbol.size, 1, pos,
|
chart.DrawSymbol(vh, symbol.type, symbol.size, 1, pos,
|
||||||
color, color, ColorUtil.clearColor32, color, symbol.gap, null);
|
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