mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-21 16:00:24 +00:00
增加onPointerClickPie和onPointerClickBar回调
This commit is contained in:
@@ -33,15 +33,15 @@ namespace XCharts
|
||||
protected bool m_IsControlledByLayout = false;
|
||||
protected Vector3 m_LastLocalPosition;
|
||||
|
||||
protected Action<BaseGraph, PointerEventData> m_OnPointerClick;
|
||||
protected Action<BaseGraph, PointerEventData> m_OnPointerDown;
|
||||
protected Action<BaseGraph, PointerEventData> m_OnPointerUp;
|
||||
protected Action<BaseGraph, PointerEventData> m_OnPointerEnter;
|
||||
protected Action<BaseGraph, PointerEventData> m_OnPointerExit;
|
||||
protected Action<BaseGraph, PointerEventData> m_OnBeginDrag;
|
||||
protected Action<BaseGraph, PointerEventData> m_OnDrag;
|
||||
protected Action<BaseGraph, PointerEventData> m_OnEndDrag;
|
||||
protected Action<BaseGraph, PointerEventData> m_OnScroll;
|
||||
protected Action<PointerEventData, BaseGraph> m_OnPointerClick;
|
||||
protected Action<PointerEventData, BaseGraph> m_OnPointerDown;
|
||||
protected Action<PointerEventData, BaseGraph> m_OnPointerUp;
|
||||
protected Action<PointerEventData, BaseGraph> m_OnPointerEnter;
|
||||
protected Action<PointerEventData, BaseGraph> m_OnPointerExit;
|
||||
protected Action<PointerEventData, BaseGraph> m_OnBeginDrag;
|
||||
protected Action<PointerEventData, BaseGraph> m_OnDrag;
|
||||
protected Action<PointerEventData, BaseGraph> m_OnEndDrag;
|
||||
protected Action<PointerEventData, BaseGraph> m_OnScroll;
|
||||
|
||||
protected Vector2 chartAnchorMax { get { return m_GraphMinAnchor; } }
|
||||
protected Vector2 chartAnchorMin { get { return m_GraphMaxAnchor; } }
|
||||
@@ -228,53 +228,53 @@ namespace XCharts
|
||||
|
||||
public virtual void OnPointerClick(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnPointerClick != null) m_OnPointerClick(this, eventData);
|
||||
if (m_OnPointerClick != null) m_OnPointerClick(eventData, this);
|
||||
}
|
||||
|
||||
public virtual void OnPointerDown(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnPointerDown != null) m_OnPointerDown(this, eventData);
|
||||
if (m_OnPointerDown != null) m_OnPointerDown(eventData, this);
|
||||
}
|
||||
|
||||
public virtual void OnPointerUp(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnPointerUp != null) m_OnPointerUp(this, eventData);
|
||||
if (m_OnPointerUp != null) m_OnPointerUp(eventData, this);
|
||||
}
|
||||
|
||||
public virtual void OnPointerEnter(PointerEventData eventData)
|
||||
{
|
||||
isPointerInChart = true;
|
||||
if (m_OnPointerEnter != null) m_OnPointerEnter(this, eventData);
|
||||
if (m_OnPointerEnter != null) m_OnPointerEnter(eventData, this);
|
||||
}
|
||||
|
||||
public virtual void OnPointerExit(PointerEventData eventData)
|
||||
{
|
||||
isPointerInChart = false;
|
||||
if (m_OnPointerExit != null) m_OnPointerExit(this, eventData);
|
||||
if (m_OnPointerExit != null) m_OnPointerExit(eventData, this);
|
||||
}
|
||||
|
||||
public virtual void OnBeginDrag(PointerEventData eventData)
|
||||
{
|
||||
if (m_ScrollRect != null) m_ScrollRect.OnBeginDrag(eventData);
|
||||
if (m_OnBeginDrag != null) m_OnBeginDrag(this, eventData);
|
||||
if (m_OnBeginDrag != null) m_OnBeginDrag(eventData, this);
|
||||
}
|
||||
|
||||
public virtual void OnEndDrag(PointerEventData eventData)
|
||||
{
|
||||
if (m_ScrollRect != null) m_ScrollRect.OnEndDrag(eventData);
|
||||
if (m_OnEndDrag != null) m_OnEndDrag(this, eventData);
|
||||
if (m_OnEndDrag != null) m_OnEndDrag(eventData, this);
|
||||
}
|
||||
|
||||
public virtual void OnDrag(PointerEventData eventData)
|
||||
{
|
||||
if (m_ScrollRect != null) m_ScrollRect.OnDrag(eventData);
|
||||
if (m_OnDrag != null) m_OnDrag(this, eventData);
|
||||
if (m_OnDrag != null) m_OnDrag(eventData, this);
|
||||
}
|
||||
|
||||
public virtual void OnScroll(PointerEventData eventData)
|
||||
{
|
||||
if (m_ScrollRect != null) m_ScrollRect.OnScroll(eventData);
|
||||
if (m_OnScroll != null) m_OnScroll(this, eventData);
|
||||
if (m_OnScroll != null) m_OnScroll(eventData, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -250,111 +250,7 @@ namespace XCharts
|
||||
}
|
||||
else
|
||||
{
|
||||
var isCartesian = IsValue();
|
||||
int dataCount = m_Series.list.Count > 0 ? m_Series.list[0].GetDataList(dataZoom).Count : 0;
|
||||
for (int i = 0; i < m_XAxises.Count; i++)
|
||||
{
|
||||
var xAxis = m_XAxises[i];
|
||||
var yAxis = m_YAxises[i];
|
||||
if (!xAxis.show && !yAxis.show) continue;
|
||||
if (isCartesian && xAxis.show && yAxis.show)
|
||||
{
|
||||
var yRate = (yAxis.runtimeMaxValue - yAxis.runtimeMinValue) / m_CoordinateHeight;
|
||||
var xRate = (xAxis.runtimeMaxValue - xAxis.runtimeMinValue) / m_CoordinateWidth;
|
||||
var yValue = yRate * (local.y - m_CoordinateY - yAxis.runtimeZeroYOffset);
|
||||
if (yAxis.runtimeMinValue > 0) yValue += yAxis.runtimeMinValue;
|
||||
m_Tooltip.runtimeYValues[i] = yValue;
|
||||
var xValue = xRate * (local.x - m_CoordinateX - xAxis.runtimeZeroXOffset);
|
||||
if (xAxis.runtimeMinValue > 0) xValue += xAxis.runtimeMinValue;
|
||||
m_Tooltip.runtimeXValues[i] = xValue;
|
||||
|
||||
for (int j = 0; j < m_Series.Count; j++)
|
||||
{
|
||||
var serie = m_Series.GetSerie(j);
|
||||
for (int n = 0; n < serie.data.Count; n++)
|
||||
{
|
||||
var serieData = serie.data[n];
|
||||
var xdata = serieData.GetData(0, xAxis.inverse);
|
||||
var ydata = serieData.GetData(1, yAxis.inverse);
|
||||
var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
|
||||
var symbolSize = symbol.GetSize(serieData == null ? null : serieData.data);
|
||||
if (Mathf.Abs(xValue - xdata) / xRate < symbolSize
|
||||
&& Mathf.Abs(yValue - ydata) / yRate < symbolSize)
|
||||
{
|
||||
m_Tooltip.runtimeDataIndex[i] = n;
|
||||
serieData.highlighted = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
serieData.highlighted = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (IsCategory())
|
||||
{
|
||||
|
||||
for (int j = 0; j < xAxis.GetDataNumber(m_DataZoom); j++)
|
||||
{
|
||||
float splitWid = AxisHelper.GetDataWidth(xAxis, m_CoordinateWidth, dataCount, m_DataZoom);
|
||||
float pX = m_CoordinateX + j * splitWid;
|
||||
if ((xAxis.boundaryGap && (local.x > pX && local.x <= pX + splitWid)) ||
|
||||
(!xAxis.boundaryGap && (local.x > pX - splitWid / 2 && local.x <= pX + splitWid / 2)))
|
||||
{
|
||||
m_Tooltip.runtimeXValues[i] = j;
|
||||
m_Tooltip.runtimeDataIndex[i] = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int j = 0; j < yAxis.GetDataNumber(m_DataZoom); j++)
|
||||
{
|
||||
float splitWid = AxisHelper.GetDataWidth(yAxis, m_CoordinateHeight, dataCount, m_DataZoom);
|
||||
float pY = m_CoordinateY + j * splitWid;
|
||||
if ((yAxis.boundaryGap && (local.y > pY && local.y <= pY + splitWid)) ||
|
||||
(!yAxis.boundaryGap && (local.y > pY - splitWid / 2 && local.y <= pY + splitWid / 2)))
|
||||
{
|
||||
m_Tooltip.runtimeYValues[i] = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (xAxis.IsCategory())
|
||||
{
|
||||
var value = (yAxis.runtimeMaxValue - yAxis.runtimeMinValue) * (local.y - m_CoordinateY - yAxis.runtimeZeroYOffset) / m_CoordinateHeight;
|
||||
if (yAxis.runtimeMinValue > 0) value += yAxis.runtimeMinValue;
|
||||
m_Tooltip.runtimeYValues[i] = value;
|
||||
for (int j = 0; j < xAxis.GetDataNumber(m_DataZoom); j++)
|
||||
{
|
||||
float splitWid = AxisHelper.GetDataWidth(xAxis, m_CoordinateWidth, dataCount, m_DataZoom);
|
||||
float pX = m_CoordinateX + j * splitWid;
|
||||
if ((xAxis.boundaryGap && (local.x > pX && local.x <= pX + splitWid)) ||
|
||||
(!xAxis.boundaryGap && (local.x > pX - splitWid / 2 && local.x <= pX + splitWid / 2)))
|
||||
{
|
||||
m_Tooltip.runtimeXValues[i] = j;
|
||||
m_Tooltip.runtimeDataIndex[i] = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (yAxis.IsCategory())
|
||||
{
|
||||
var value = (xAxis.runtimeMaxValue - xAxis.runtimeMinValue) * (local.x - m_CoordinateX - xAxis.runtimeZeroXOffset) / m_CoordinateWidth;
|
||||
if (xAxis.runtimeMinValue > 0) value += xAxis.runtimeMinValue;
|
||||
m_Tooltip.runtimeXValues[i] = value;
|
||||
for (int j = 0; j < yAxis.GetDataNumber(m_DataZoom); j++)
|
||||
{
|
||||
float splitWid = AxisHelper.GetDataWidth(yAxis, m_CoordinateHeight, dataCount, m_DataZoom);
|
||||
float pY = m_CoordinateY + j * splitWid;
|
||||
if ((yAxis.boundaryGap && (local.y > pY && local.y <= pY + splitWid)) ||
|
||||
(!yAxis.boundaryGap && (local.y > pY - splitWid / 2 && local.y <= pY + splitWid / 2)))
|
||||
{
|
||||
m_Tooltip.runtimeYValues[i] = j;
|
||||
m_Tooltip.runtimeDataIndex[i] = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
UpdateTooltipValue(local);
|
||||
}
|
||||
if (m_Tooltip.IsSelected())
|
||||
{
|
||||
@@ -373,6 +269,115 @@ namespace XCharts
|
||||
}
|
||||
}
|
||||
|
||||
protected void UpdateTooltipValue(Vector2 local)
|
||||
{
|
||||
var isCartesian = IsValue();
|
||||
int dataCount = m_Series.list.Count > 0 ? m_Series.list[0].GetDataList(dataZoom).Count : 0;
|
||||
for (int i = 0; i < m_XAxises.Count; i++)
|
||||
{
|
||||
var xAxis = m_XAxises[i];
|
||||
var yAxis = m_YAxises[i];
|
||||
if (!xAxis.show && !yAxis.show) continue;
|
||||
if (isCartesian && xAxis.show && yAxis.show)
|
||||
{
|
||||
var yRate = (yAxis.runtimeMaxValue - yAxis.runtimeMinValue) / m_CoordinateHeight;
|
||||
var xRate = (xAxis.runtimeMaxValue - xAxis.runtimeMinValue) / m_CoordinateWidth;
|
||||
var yValue = yRate * (local.y - m_CoordinateY - yAxis.runtimeZeroYOffset);
|
||||
if (yAxis.runtimeMinValue > 0) yValue += yAxis.runtimeMinValue;
|
||||
m_Tooltip.runtimeYValues[i] = yValue;
|
||||
var xValue = xRate * (local.x - m_CoordinateX - xAxis.runtimeZeroXOffset);
|
||||
if (xAxis.runtimeMinValue > 0) xValue += xAxis.runtimeMinValue;
|
||||
m_Tooltip.runtimeXValues[i] = xValue;
|
||||
|
||||
for (int j = 0; j < m_Series.Count; j++)
|
||||
{
|
||||
var serie = m_Series.GetSerie(j);
|
||||
for (int n = 0; n < serie.data.Count; n++)
|
||||
{
|
||||
var serieData = serie.data[n];
|
||||
var xdata = serieData.GetData(0, xAxis.inverse);
|
||||
var ydata = serieData.GetData(1, yAxis.inverse);
|
||||
var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
|
||||
var symbolSize = symbol.GetSize(serieData == null ? null : serieData.data);
|
||||
if (Mathf.Abs(xValue - xdata) / xRate < symbolSize
|
||||
&& Mathf.Abs(yValue - ydata) / yRate < symbolSize)
|
||||
{
|
||||
m_Tooltip.runtimeDataIndex[i] = n;
|
||||
serieData.highlighted = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
serieData.highlighted = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (IsCategory())
|
||||
{
|
||||
|
||||
for (int j = 0; j < xAxis.GetDataNumber(m_DataZoom); j++)
|
||||
{
|
||||
float splitWid = AxisHelper.GetDataWidth(xAxis, m_CoordinateWidth, dataCount, m_DataZoom);
|
||||
float pX = m_CoordinateX + j * splitWid;
|
||||
if ((xAxis.boundaryGap && (local.x > pX && local.x <= pX + splitWid)) ||
|
||||
(!xAxis.boundaryGap && (local.x > pX - splitWid / 2 && local.x <= pX + splitWid / 2)))
|
||||
{
|
||||
m_Tooltip.runtimeXValues[i] = j;
|
||||
m_Tooltip.runtimeDataIndex[i] = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int j = 0; j < yAxis.GetDataNumber(m_DataZoom); j++)
|
||||
{
|
||||
float splitWid = AxisHelper.GetDataWidth(yAxis, m_CoordinateHeight, dataCount, m_DataZoom);
|
||||
float pY = m_CoordinateY + j * splitWid;
|
||||
if ((yAxis.boundaryGap && (local.y > pY && local.y <= pY + splitWid)) ||
|
||||
(!yAxis.boundaryGap && (local.y > pY - splitWid / 2 && local.y <= pY + splitWid / 2)))
|
||||
{
|
||||
m_Tooltip.runtimeYValues[i] = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (xAxis.IsCategory())
|
||||
{
|
||||
var value = (yAxis.runtimeMaxValue - yAxis.runtimeMinValue) * (local.y - m_CoordinateY - yAxis.runtimeZeroYOffset) / m_CoordinateHeight;
|
||||
if (yAxis.runtimeMinValue > 0) value += yAxis.runtimeMinValue;
|
||||
m_Tooltip.runtimeYValues[i] = value;
|
||||
for (int j = 0; j < xAxis.GetDataNumber(m_DataZoom); j++)
|
||||
{
|
||||
float splitWid = AxisHelper.GetDataWidth(xAxis, m_CoordinateWidth, dataCount, m_DataZoom);
|
||||
float pX = m_CoordinateX + j * splitWid;
|
||||
if ((xAxis.boundaryGap && (local.x > pX && local.x <= pX + splitWid)) ||
|
||||
(!xAxis.boundaryGap && (local.x > pX - splitWid / 2 && local.x <= pX + splitWid / 2)))
|
||||
{
|
||||
m_Tooltip.runtimeXValues[i] = j;
|
||||
m_Tooltip.runtimeDataIndex[i] = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (yAxis.IsCategory())
|
||||
{
|
||||
var value = (xAxis.runtimeMaxValue - xAxis.runtimeMinValue) * (local.x - m_CoordinateX - xAxis.runtimeZeroXOffset) / m_CoordinateWidth;
|
||||
if (xAxis.runtimeMinValue > 0) value += xAxis.runtimeMinValue;
|
||||
m_Tooltip.runtimeXValues[i] = value;
|
||||
for (int j = 0; j < yAxis.GetDataNumber(m_DataZoom); j++)
|
||||
{
|
||||
float splitWid = AxisHelper.GetDataWidth(yAxis, m_CoordinateHeight, dataCount, m_DataZoom);
|
||||
float pY = m_CoordinateY + j * splitWid;
|
||||
if ((yAxis.boundaryGap && (local.y > pY && local.y <= pY + splitWid)) ||
|
||||
(!yAxis.boundaryGap && (local.y > pY - splitWid / 2 && local.y <= pY + splitWid / 2)))
|
||||
{
|
||||
m_Tooltip.runtimeYValues[i] = j;
|
||||
m_Tooltip.runtimeDataIndex[i] = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected StringBuilder sb = new StringBuilder(100);
|
||||
protected override void UpdateTooltip()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user