diff --git a/Runtime/Internal/BaseChart.API.cs b/Runtime/Internal/BaseChart.API.cs
index a91a63e5..491577a3 100644
--- a/Runtime/Internal/BaseChart.API.cs
+++ b/Runtime/Internal/BaseChart.API.cs
@@ -120,14 +120,37 @@ namespace XCharts.Runtime
}
///
/// Redraw chart in next frame.
- /// |在下一帧刷新图表。
+ /// |在下一帧刷新整个图表。
///
public void RefreshChart()
{
+ foreach (var serie in m_Series)
+ serie.ResetInteract();
m_RefreshChart = true;
if (m_Painter) m_Painter.Refresh();
}
+ ///
+ /// Redraw chart serie in next frame.
+ /// |在下一帧刷新图表的指定serie。
+ ///
+ public void RefreshChart(int serieIndex)
+ {
+ RefreshPainter(GetSerie(serieIndex));
+ }
+
+ ///
+ /// Redraw chart serie in next frame.
+ /// |在下一帧刷新图表的指定serie。
+ ///
+ public void RefreshChart(Serie serie)
+ {
+ if (serie == null) return;
+ serie.ResetInteract();
+ RefreshPainter(serie);
+ }
+
+
///
/// Remove all series and legend data.
/// |It just emptying all of serie's data without emptying the list of series.
diff --git a/Runtime/Internal/BaseChart.cs b/Runtime/Internal/BaseChart.cs
index 7245d879..50afe53e 100644
--- a/Runtime/Internal/BaseChart.cs
+++ b/Runtime/Internal/BaseChart.cs
@@ -211,6 +211,7 @@ namespace XCharts.Runtime
public void RefreshPainter(Serie serie)
{
+ if (serie == null) return;
RefreshPainter(GetPainterIndexBySerie(serie));
}
@@ -363,9 +364,7 @@ namespace XCharts.Runtime
if (m_Painter == null) return;
if (m_RefreshChart)
{
- m_Painter.Refresh();
- foreach (var painter in m_PainterList) painter.Refresh();
- if (m_PainterTop != null) m_PainterTop.Refresh();
+ CheckRefreshPainter();
m_RefreshChart = false;
}
}
@@ -553,6 +552,8 @@ namespace XCharts.Runtime
serie.context.dataPoints.Clear();
serie.context.dataIgnores.Clear();
serie.animation.context.isAllItemAnimationEnd = true;
+ if (!serie.context.pointerEnter)
+ serie.ResetInteract();
if (m_OnDrawSerieBefore != null)
{
diff --git a/Runtime/Serie/Bar/BarHandler.cs b/Runtime/Serie/Bar/BarHandler.cs
index 005e9bd6..88f7ccdf 100644
--- a/Runtime/Serie/Bar/BarHandler.cs
+++ b/Runtime/Serie/Bar/BarHandler.cs
@@ -63,14 +63,10 @@ namespace XCharts.Runtime
serie.context.pointerEnter = false;
foreach (var serieData in serie.data)
{
- var barColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, serie.context.colorIndex, false);
- var barToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, serie.context.colorIndex, false);
- serieData.interact.SetColor(ref needInteract, barColor, barToColor);
- }
- if (needInteract)
- {
- chart.RefreshPainter(serie);
+ serieData.context.highlight = false;
+ serieData.interact.Reset();
}
+ chart.RefreshPainter(serie);
}
return;
}
diff --git a/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Runtime/Serie/Line/LineHandler.GridCoord.cs
index 300733b2..e0a83cfd 100644
--- a/Runtime/Serie/Line/LineHandler.GridCoord.cs
+++ b/Runtime/Serie/Line/LineHandler.GridCoord.cs
@@ -26,25 +26,17 @@ namespace XCharts.Runtime
{
if (m_LastCheckContextFlag != needCheck)
{
- var needAnimation1 = false;
m_LastCheckContextFlag = needCheck;
serie.context.pointerItemDataIndex = -1;
serie.context.pointerEnter = false;
- serie.interact.SetValue(ref needAnimation1, lineWidth, false);
foreach (var serieData in serie.data)
{
- var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
- var symbolSize = symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize);
- serieData.context.highlight = false;
- serieData.interact.SetValue(ref needAnimation1, symbolSize);
- }
- if (needAnimation1)
- {
- if (SeriesHelper.IsStack(chart.series))
- chart.RefreshTopPainter();
- else
- chart.RefreshPainter(serie);
+ serieData.interact.Reset();
}
+ if (SeriesHelper.IsStack(chart.series))
+ chart.RefreshTopPainter();
+ else
+ chart.RefreshPainter(serie);
}
return;
}
diff --git a/Runtime/Serie/Serie.cs b/Runtime/Serie/Serie.cs
index 8539ac35..0719cc3e 100644
--- a/Runtime/Serie/Serie.cs
+++ b/Runtime/Serie/Serie.cs
@@ -821,12 +821,14 @@ namespace XCharts.Runtime
return m_VertsDirty ||
symbol.vertsDirty ||
lineStyle.vertsDirty ||
- (lineArrow != null && lineArrow.vertsDirty) ||
itemStyle.vertsDirty ||
+ (lineArrow != null && lineArrow.vertsDirty) ||
(areaStyle != null && areaStyle.vertsDirty) ||
(label != null && label.vertsDirty) ||
+ (labelLine != null && labelLine.vertsDirty) ||
(emphasis != null && emphasis.vertsDirty) ||
- (titleStyle != null && titleStyle.vertsDirty);
+ (titleStyle != null && titleStyle.vertsDirty) ||
+ AnySerieDataVerticesDirty();
}
}
@@ -835,12 +837,17 @@ namespace XCharts.Runtime
get
{
return m_ComponentDirty
- || (titleStyle != null && titleStyle.componentDirty);
+ || symbol.componentDirty
+ || (titleStyle != null && titleStyle.componentDirty)
+ || (label != null && label.componentDirty)
+ || (labelLine != null && labelLine.componentDirty);
}
}
public override void ClearVerticesDirty()
{
base.ClearVerticesDirty();
+ foreach (var serieData in m_Data)
+ serieData.ClearVerticesDirty();
symbol.ClearVerticesDirty();
lineStyle.ClearVerticesDirty();
itemStyle.ClearVerticesDirty();
@@ -859,6 +866,8 @@ namespace XCharts.Runtime
public override void ClearComponentDirty()
{
base.ClearComponentDirty();
+ foreach (var serieData in m_Data)
+ serieData.ClearComponentDirty();
symbol.ClearComponentDirty();
lineStyle.ClearComponentDirty();
itemStyle.ClearComponentDirty();
@@ -880,6 +889,24 @@ namespace XCharts.Runtime
labelDirty = true;
titleDirty = true;
}
+
+ private bool AnySerieDataVerticesDirty()
+ {
+ if (this is ISimplifiedSerie)
+ return false;
+ foreach (var serieData in m_Data)
+ if (serieData.vertsDirty) return true;
+ return false;
+ }
+
+ private bool AnySerieDataComponentDirty()
+ {
+ if (this is ISimplifiedSerie)
+ return false;
+ foreach (var serieData in m_Data)
+ if (serieData.componentDirty) return true;
+ return false;
+ }
///
/// Whether the serie is highlighted.
/// |该系列是否高亮,一般由图例悬停触发。
@@ -1032,6 +1059,12 @@ namespace XCharts.Runtime
}
}
+ public void ResetInteract()
+ {
+ foreach (var serieData in m_Data)
+ serieData.interact.Reset();
+ }
+
///
/// 清空所有数据
///
diff --git a/Runtime/Serie/SerieData.cs b/Runtime/Serie/SerieData.cs
index cd27ddb8..a08cd5a4 100644
--- a/Runtime/Serie/SerieData.cs
+++ b/Runtime/Serie/SerieData.cs
@@ -105,6 +105,54 @@ namespace XCharts.Runtime
private List m_DataUpdateFlag = new List();
private List m_PolygonPoints = new List();
+ public override bool vertsDirty
+ {
+ get
+ {
+ return m_VertsDirty
+ || (labelLine != null && labelLine.vertsDirty)
+ || (itemStyle != null && itemStyle.vertsDirty)
+ || (symbol != null && symbol.vertsDirty)
+ || (lineStyle != null && lineStyle.vertsDirty)
+ || (areaStyle != null && areaStyle.vertsDirty);
+ }
+ }
+ public override bool componentDirty
+ {
+ get
+ {
+ return m_ComponentDirty
+ || (labelStyle != null && labelStyle.componentDirty)
+ || (labelLine != null && labelLine.componentDirty)
+ || (titleStyle != null && titleStyle.componentDirty)
+ || (emphasis != null && emphasis.componentDirty);
+ }
+ }
+
+ public override void ClearVerticesDirty()
+ {
+ base.ClearVerticesDirty();
+ if (labelLine != null) labelLine.ClearVerticesDirty();
+ if (itemStyle != null) itemStyle.ClearVerticesDirty();
+ if (lineStyle != null) lineStyle.ClearVerticesDirty();
+ if (areaStyle != null) areaStyle.ClearVerticesDirty();
+ if (areaStyle != null) areaStyle.ClearVerticesDirty();
+ if (symbol != null) symbol.ClearVerticesDirty();
+ if (emphasis != null) emphasis.ClearVerticesDirty();
+ }
+
+ public override void ClearComponentDirty()
+ {
+ base.ClearComponentDirty();
+ if (labelLine != null) labelLine.ClearComponentDirty();
+ if (itemStyle != null) itemStyle.ClearComponentDirty();
+ if (lineStyle != null) lineStyle.ClearComponentDirty();
+ if (areaStyle != null) areaStyle.ClearComponentDirty();
+ if (areaStyle != null) areaStyle.ClearComponentDirty();
+ if (symbol != null) symbol.ClearComponentDirty();
+ if (emphasis != null) emphasis.ClearComponentDirty();
+ }
+
public void Reset()
{
index = 0;