[bug] fix change color in runtime did not refresh

This commit is contained in:
monitor1394
2022-04-27 08:26:05 +08:00
parent 419c704b23
commit 8c02ce14ac
6 changed files with 120 additions and 27 deletions

View File

@@ -120,14 +120,37 @@ namespace XCharts.Runtime
}
/// <summary>
/// Redraw chart in next frame.
/// |在下一帧刷新图表。
/// |在下一帧刷新整个图表。
/// </summary>
public void RefreshChart()
{
foreach (var serie in m_Series)
serie.ResetInteract();
m_RefreshChart = true;
if (m_Painter) m_Painter.Refresh();
}
/// <summary>
/// Redraw chart serie in next frame.
/// |在下一帧刷新图表的指定serie。
/// </summary>
public void RefreshChart(int serieIndex)
{
RefreshPainter(GetSerie(serieIndex));
}
/// <summary>
/// Redraw chart serie in next frame.
/// |在下一帧刷新图表的指定serie。
/// </summary>
public void RefreshChart(Serie serie)
{
if (serie == null) return;
serie.ResetInteract();
RefreshPainter(serie);
}
/// <summary>
/// Remove all series and legend data.
/// |It just emptying all of serie's data without emptying the list of series.

View File

@@ -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)
{

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}
/// <summary>
/// Whether the serie is highlighted.
/// |该系列是否高亮,一般由图例悬停触发。
@@ -1032,6 +1059,12 @@ namespace XCharts.Runtime
}
}
public void ResetInteract()
{
foreach (var serieData in m_Data)
serieData.interact.Reset();
}
/// <summary>
/// 清空所有数据
/// </summary>

View File

@@ -105,6 +105,54 @@ namespace XCharts.Runtime
private List<bool> m_DataUpdateFlag = new List<bool>();
private List<Vector2> m_PolygonPoints = new List<Vector2>();
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;