[feature][symbol] support symbol settings for StateStyle

This commit is contained in:
monitor1394
2022-07-27 08:00:57 +08:00
parent b3b0c0b3aa
commit 5b2b2d4059
16 changed files with 216 additions and 258 deletions

View File

@@ -57,9 +57,11 @@
## master ## master
* (2022.07.24) 增加`StateStyle``Symbol`用于配置状态下的标记样式
* (2022.07.24) 去掉`SerieSymbol``selectedSize`配置
* (2022.07.24) 增加`Serie``SerieData``state`设置默认状态 * (2022.07.24) 增加`Serie``SerieData``state`设置默认状态
* (2022.07.22) 增加`Serie`的三种状态`EmphasisStyle`,`BlurStyle`,`SelectStyle` * (2022.07.22) 增加`Serie`的三种状态`EmphasisStyle`,`BlurStyle`,`SelectStyle`
* (2022.07.22) 去掉`AreaStyle``m_HighlightColor``m_HighlightToColor`配置 * (2022.07.22) 去掉`AreaStyle``highlightColor``highlightToColor`配置
* (2022.07.22) 去掉`Emphasis`,`EmphasisItemStyle`,`EmphasisLabelStyle`,`EmphasisLabelLine`组件 * (2022.07.22) 去掉`Emphasis`,`EmphasisItemStyle`,`EmphasisLabelStyle`,`EmphasisLabelLine`组件
* (2022.07.20) 文档支持用`Since`标识类从哪个版本开始支持 * (2022.07.20) 文档支持用`Since`标识类从哪个版本开始支持
* (2022.07.20) 修复`Axis``Value`轴时,`AxisLabel``showStartLabel``showEndLabel`参数设置不生效的问题 * (2022.07.20) 修复`Axis``Value`轴时,`AxisLabel``showStartLabel``showEndLabel`参数设置不生效的问题

View File

@@ -31,12 +31,10 @@ namespace XCharts.Editor
{ {
case SymbolSizeType.Custom: case SymbolSizeType.Custom:
PropertyField(prop, "m_Size"); PropertyField(prop, "m_Size");
PropertyField(prop, "m_SelectedSize");
break; break;
case SymbolSizeType.FromData: case SymbolSizeType.FromData:
PropertyField(prop, "m_DataIndex"); PropertyField(prop, "m_DataIndex");
PropertyField(prop, "m_DataScale"); PropertyField(prop, "m_DataScale");
PropertyField(prop, "m_SelectedDataScale");
break; break;
case SymbolSizeType.Function: case SymbolSizeType.Function:
break; break;

View File

@@ -16,6 +16,7 @@ namespace XCharts.Editor
{ {
++EditorGUI.indentLevel; ++EditorGUI.indentLevel;
OnCustomGUI(prop); OnCustomGUI(prop);
PropertyField(prop, "m_Symbol");
PropertyField(prop, "m_ItemStyle"); PropertyField(prop, "m_ItemStyle");
PropertyField(prop, "m_Label"); PropertyField(prop, "m_Label");
PropertyField(prop, "m_LabelLine"); PropertyField(prop, "m_LabelLine");

View File

@@ -18,7 +18,6 @@ namespace XCharts.Example
foreach (var serie in chart.series) foreach (var serie in chart.series)
{ {
serie.symbol.sizeFunction = SymbolSize; serie.symbol.sizeFunction = SymbolSize;
serie.symbol.selectedSizeFunction = SymbolSelectedSize;
} }
} }
@@ -26,10 +25,5 @@ namespace XCharts.Example
{ {
return (float) (Math.Sqrt(data[2]) / 6e2); return (float) (Math.Sqrt(data[2]) / 6e2);
} }
float SymbolSelectedSize(List<double> data)
{
return (float) (Math.Sqrt(data[2]) / 5e2);
}
} }
} }

View File

@@ -34,12 +34,9 @@ namespace XCharts.Runtime
public class SerieSymbol : SymbolStyle, ISerieDataComponent public class SerieSymbol : SymbolStyle, ISerieDataComponent
{ {
[SerializeField] private SymbolSizeType m_SizeType = SymbolSizeType.Custom; [SerializeField] private SymbolSizeType m_SizeType = SymbolSizeType.Custom;
[SerializeField] private float m_SelectedSize = 0f;
[SerializeField] private int m_DataIndex = 1; [SerializeField] private int m_DataIndex = 1;
[SerializeField] private float m_DataScale = 1; [SerializeField] private float m_DataScale = 1;
[SerializeField] private float m_SelectedDataScale = 1.5f;
[SerializeField] private SymbolSizeFunction m_SizeFunction; [SerializeField] private SymbolSizeFunction m_SizeFunction;
[SerializeField] private SymbolSizeFunction m_SelectedSizeFunction;
[SerializeField] private int m_StartIndex; [SerializeField] private int m_StartIndex;
[SerializeField] private int m_Interval; [SerializeField] private int m_Interval;
[SerializeField] private bool m_ForceShowLast = false; [SerializeField] private bool m_ForceShowLast = false;
@@ -49,12 +46,9 @@ namespace XCharts.Runtime
{ {
base.Reset(); base.Reset();
m_SizeType = SymbolSizeType.Custom; m_SizeType = SymbolSizeType.Custom;
m_SelectedSize = 0f;
m_DataIndex = 1; m_DataIndex = 1;
m_DataScale = 1; m_DataScale = 1;
m_SelectedDataScale = 1.5f;
m_SizeFunction = null; m_SizeFunction = null;
m_SelectedSizeFunction = null;
m_StartIndex = 0; m_StartIndex = 0;
m_Interval = 0; m_Interval = 0;
m_ForceShowLast = false; m_ForceShowLast = false;
@@ -71,15 +65,6 @@ namespace XCharts.Runtime
set { if (PropertyUtil.SetStruct(ref m_SizeType, value)) SetVerticesDirty(); } set { if (PropertyUtil.SetStruct(ref m_SizeType, value)) SetVerticesDirty(); }
} }
/// <summary> /// <summary>
/// the size of selected symbol.
/// |被选中的标记的大小。
/// </summary>
public float selectedSize
{
get { return m_SelectedSize; }
set { if (PropertyUtil.SetStruct(ref m_SelectedSize, value)) SetVerticesDirty(); }
}
/// <summary>
/// whitch data index is when the sizeType assined as FromData. /// whitch data index is when the sizeType assined as FromData.
/// |当sizeType指定为FromData时指定的数据源索引。 /// |当sizeType指定为FromData时指定的数据源索引。
/// </summary> /// </summary>
@@ -98,15 +83,6 @@ namespace XCharts.Runtime
set { if (PropertyUtil.SetStruct(ref m_DataScale, value)) SetVerticesDirty(); } set { if (PropertyUtil.SetStruct(ref m_DataScale, value)) SetVerticesDirty(); }
} }
/// <summary> /// <summary>
/// the scale of selected data when sizeType assined as FromData.
/// |当sizeType指定为FromData时指定的高亮倍数系数。
/// </summary>
public float selectedDataScale
{
get { return m_SelectedDataScale; }
set { if (PropertyUtil.SetStruct(ref m_SelectedDataScale, value)) SetVerticesDirty(); }
}
/// <summary>
/// the function of size when sizeType assined as Function. /// the function of size when sizeType assined as Function.
/// |当sizeType指定为Function时指定的委托函数。 /// |当sizeType指定为Function时指定的委托函数。
/// </summary> /// </summary>
@@ -116,15 +92,6 @@ namespace XCharts.Runtime
set { if (PropertyUtil.SetClass(ref m_SizeFunction, value)) SetVerticesDirty(); } set { if (PropertyUtil.SetClass(ref m_SizeFunction, value)) SetVerticesDirty(); }
} }
/// <summary> /// <summary>
/// the function of size when sizeType assined as Function.
/// |当sizeType指定为Function时指定的高亮委托函数。
/// </summary>
public SymbolSizeFunction selectedSizeFunction
{
get { return m_SelectedSizeFunction; }
set { if (PropertyUtil.SetClass(ref m_SelectedSizeFunction, value)) SetVerticesDirty(); }
}
/// <summary>
/// the index start to show symbol. /// the index start to show symbol.
/// |开始显示图形标记的索引。 /// |开始显示图形标记的索引。
/// </summary> /// </summary>
@@ -187,42 +154,6 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// 根据sizeType获得高亮时的标记大小
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public float GetSelectedSize(List<double> data, float themeSelectedSize)
{
switch (m_SizeType)
{
case SymbolSizeType.Custom:
return selectedSize == 0 ? themeSelectedSize : selectedSize;
case SymbolSizeType.FromData:
if (data != null && dataIndex >= 0 && dataIndex < data.Count)
{
return (float) data[dataIndex] * m_SelectedDataScale;
}
else
{
return selectedSize == 0 ? themeSelectedSize : selectedSize;
}
case SymbolSizeType.Function:
if (data != null && selectedSizeFunction != null)
return selectedSizeFunction(data);
else
return selectedSize == 0 ? themeSelectedSize : selectedSize;
default:
return selectedSize == 0 ? themeSelectedSize : selectedSize;
}
}
public bool ShowSymbol(int dataIndex, int dataCount) public bool ShowSymbol(int dataIndex, int dataCount)
{ {
if (!show) if (!show)

View File

@@ -242,9 +242,10 @@ namespace XCharts.Runtime
private void DrawMarkLineSymbol(VertexHelper vh, SymbolStyle symbol, Serie serie, GridCoord grid, ThemeStyle theme, private void DrawMarkLineSymbol(VertexHelper vh, SymbolStyle symbol, Serie serie, GridCoord grid, ThemeStyle theme,
Vector3 pos, Vector3 startPos, Color32 lineColor) Vector3 pos, Vector3 startPos, Color32 lineColor)
{ {
var tickness = SerieHelper.GetSymbolBorder(serie, null, theme); float tickness = 0f;
var borderColor = SerieHelper.GetSymbolBorderColor(serie, null, theme); float[] cornerRadius = null;
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, null); Color32 borderColor;
SerieHelper.GetSymbolInfo(out borderColor, out tickness, out cornerRadius, serie, null, chart.theme);
chart.DrawClipSymbol(vh, symbol.type, symbol.size, tickness, pos, lineColor, lineColor, chart.DrawClipSymbol(vh, symbol.type, symbol.size, tickness, pos, lineColor, lineColor,
ColorUtil.clearColor32, borderColor, symbol.gap, true, cornerRadius, grid, startPos); ColorUtil.clearColor32, borderColor, symbol.gap, true, cornerRadius, grid, startPos);
} }

View File

@@ -16,6 +16,7 @@ namespace XCharts.Runtime
[SerializeField] private ItemStyle m_ItemStyle = new ItemStyle(); [SerializeField] private ItemStyle m_ItemStyle = new ItemStyle();
[SerializeField] private LineStyle m_LineStyle = new LineStyle(); [SerializeField] private LineStyle m_LineStyle = new LineStyle();
[SerializeField] private AreaStyle m_AreaStyle = new AreaStyle(); [SerializeField] private AreaStyle m_AreaStyle = new AreaStyle();
[SerializeField] private SerieSymbol m_Symbol = new SerieSymbol();
public void Reset() public void Reset()
{ {
@@ -23,6 +24,7 @@ namespace XCharts.Runtime
m_Label.Reset(); m_Label.Reset();
m_LabelLine.Reset(); m_LabelLine.Reset();
m_ItemStyle.Reset(); m_ItemStyle.Reset();
m_Symbol.Reset();
} }
/// <summary> /// <summary>
@@ -73,6 +75,14 @@ namespace XCharts.Runtime
get { return m_AreaStyle; } get { return m_AreaStyle; }
set { if (PropertyUtil.SetClass(ref m_AreaStyle, value, true)) SetVerticesDirty(); } set { if (PropertyUtil.SetClass(ref m_AreaStyle, value, true)) SetVerticesDirty(); }
} }
/// <summary>
/// 标记样式。
/// </summary>
public SerieSymbol symbol
{
get { return m_Symbol; }
set { if (PropertyUtil.SetClass(ref m_Symbol, value, true)) SetVerticesDirty(); }
}
public override bool vertsDirty public override bool vertsDirty
{ {
@@ -82,7 +92,8 @@ namespace XCharts.Runtime
m_Label.vertsDirty || m_Label.vertsDirty ||
m_ItemStyle.vertsDirty || m_ItemStyle.vertsDirty ||
m_LineStyle.vertsDirty || m_LineStyle.vertsDirty ||
m_AreaStyle.vertsDirty; m_AreaStyle.vertsDirty ||
m_Symbol.vertsDirty;
} }
} }
@@ -102,12 +113,14 @@ namespace XCharts.Runtime
m_ItemStyle.ClearVerticesDirty(); m_ItemStyle.ClearVerticesDirty();
m_LineStyle.ClearVerticesDirty(); m_LineStyle.ClearVerticesDirty();
m_AreaStyle.ClearVerticesDirty(); m_AreaStyle.ClearVerticesDirty();
m_Symbol.ClearVerticesDirty();
} }
public override void ClearComponentDirty() public override void ClearComponentDirty()
{ {
base.ClearComponentDirty(); base.ClearComponentDirty();
m_Label.ClearComponentDirty(); m_Label.ClearComponentDirty();
m_Symbol.ClearComponentDirty();
} }
} }
} }

View File

@@ -836,7 +836,7 @@ namespace XCharts.Runtime
} }
} }
public static Color32 GetHighlightColor(Color32 color, float rate = 0.8f) public static Color32 GetHighlightColor(Color32 color, float rate = 1.2f)
{ {
var newColor = color; var newColor = color;
newColor.r = (byte) (color.r * rate); newColor.r = (byte) (color.r * rate);
@@ -852,7 +852,7 @@ namespace XCharts.Runtime
return newColor; return newColor;
} }
public static Color32 GetSelectColor(Color32 color, float rate = 0.7f) public static Color32 GetSelectColor(Color32 color, float rate = 0.8f)
{ {
var newColor = color; var newColor = color;
newColor.r = (byte) (color.r * rate); newColor.r = (byte) (color.r * rate);

View File

@@ -56,70 +56,62 @@ namespace XCharts.Runtime
} }
m_LastCheckContextFlag = needCheck; m_LastCheckContextFlag = needCheck;
var themeSymbolSize = chart.theme.serie.lineSymbolSize; var themeSymbolSize = chart.theme.serie.lineSymbolSize;
var themeSymbolSelectedSize = chart.theme.serie.lineSymbolSelectedSize;
var needInteract = false; var needInteract = false;
if (m_LegendEnter) if (m_LegendEnter)
{
serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize);
serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, symbolSelectedSize);
}
}
else if (serie.context.isTriggerByAxis)
{ {
serie.context.pointerEnter = true; serie.context.pointerEnter = true;
serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
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];
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize);
var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize);
if (i == serie.context.pointerItemDataIndex)
{
serieData.context.highlight = true; serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, symbolSelectedSize); serieData.interact.SetValue(ref needInteract, size);
} }
else }
else if (serie.context.isTriggerByAxis)
{ {
serieData.context.highlight = false; serie.context.pointerEnter = false;
serieData.interact.SetValue(ref needInteract, symbolSize); serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
var highlight = i == serie.context.pointerItemDataIndex;
serieData.context.highlight = highlight;
var state = SerieHelper.GetSerieState(serie, serieData, true);
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
serieData.interact.SetValue(ref needInteract, size);
if (highlight)
{
serie.context.pointerEnter = true;
serie.context.pointerItemDataIndex = i;
} }
} }
} }
else else
{ {
var lastIndex = serie.context.pointerItemDataIndex;
serie.context.pointerItemDataIndex = -1; serie.context.pointerItemDataIndex = -1;
serie.context.pointerEnter = false; serie.context.pointerEnter = false;
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];
serieData.index = i;
var dist = Vector3.Distance(chart.pointerPos, serieData.context.position); var dist = Vector3.Distance(chart.pointerPos, serieData.context.position);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); var highlight = dist <= size;
var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize); serieData.context.highlight = highlight;
if (dist <= symbolSelectedSize) var state = SerieHelper.GetSerieState(serie, serieData, true);
size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
serieData.interact.SetValue(ref needInteract, size);
if (highlight)
{ {
serie.context.pointerItemDataIndex = serieData.index;
serie.context.pointerEnter = true; serie.context.pointerEnter = true;
serie.context.pointerItemDataIndex = serieData.index;
serie.interact.SetValue(ref needInteract, lineWidth, true); serie.interact.SetValue(ref needInteract, lineWidth, true);
serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, symbolSelectedSize);
}
else
{
serieData.context.highlight = false;
serieData.interact.SetValue(ref needInteract, symbolSize);
} }
} }
if (lastIndex != serie.context.pointerItemDataIndex)
needInteract = true;
} }
if (needInteract) if (needInteract)
{ {
@@ -157,8 +149,8 @@ namespace XCharts.Runtime
continue; continue;
if (serieData.context.isClip) if (serieData.context.isClip)
continue; continue;
var state = SerieHelper.GetSerieState(serie, serieData, true);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var symbol = SerieHelper.GetSerieSymbol(serie, serieData, state);
if (!symbol.show || !symbol.ShowSymbol(i, count)) if (!symbol.show || !symbol.ShowSymbol(i, count))
continue; continue;
@@ -175,30 +167,24 @@ namespace XCharts.Runtime
if (ChartHelper.IsIngore(pos)) if (ChartHelper.IsIngore(pos))
continue; continue;
var highlight = serie.data[i].context.highlight || serie.highlight; var symbolSize = 0f;
var symbolSize = highlight ?
theme.serie.lineSymbolSelectedSize :
theme.serie.lineSymbolSize;
if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting)) if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting))
{ {
symbolSize = highlight ? symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state);
symbol.GetSelectedSize(serieData.data, symbolSize) :
symbol.GetSize(serieData.data, symbolSize);
serieData.interact.SetValue(ref interacting, symbolSize); serieData.interact.SetValue(ref interacting, symbolSize);
symbolSize = serie.animation.GetSysmbolSize(symbolSize); symbolSize = serie.animation.GetSysmbolSize(symbolSize);
} }
var state = SerieHelper.GetSerieState(serie, serieData);
Color32 symbolColor, symbolToColor,symbolEmptyColor;
SerieHelper.GetItemColor(out symbolColor, out symbolToColor,out symbolEmptyColor, serie, serieData, theme, serie.index, state);
float symbolBorder = 0f;
float[] cornerRadius = null;
Color32 symbolColor, symbolToColor, symbolEmptyColor, borderColor;
SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, theme, serie.index);
SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, null, chart.theme, state);
if (isVisualMapGradient) if (isVisualMapGradient)
{ {
symbolColor = VisualMapHelper.GetLineGradientColor(visualMap, pos, m_SerieGrid, axis, relativedAxis, symbolColor); symbolColor = VisualMapHelper.GetLineGradientColor(visualMap, pos, m_SerieGrid, axis, relativedAxis, symbolColor);
symbolToColor = symbolColor; symbolToColor = symbolColor;
} }
var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, theme, state);
var borderColor = SerieHelper.GetSymbolBorderColor(serie, serieData, theme, state);
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, state);
chart.DrawClipSymbol(vh, symbol.type, symbolSize, symbolBorder, pos, chart.DrawClipSymbol(vh, symbol.type, symbolSize, symbolBorder, pos,
symbolColor, symbolToColor, symbolEmptyColor, borderColor, symbol.gap, clip, cornerRadius, m_SerieGrid, symbolColor, symbolToColor, symbolEmptyColor, borderColor, symbol.gap, clip, cornerRadius, m_SerieGrid,
i > 0 ? serie.context.dataPoints[i - 1] : m_SerieGrid.context.position); i > 0 ? serie.context.dataPoints[i - 1] : m_SerieGrid.context.position);

View File

@@ -47,21 +47,19 @@ namespace XCharts.Runtime
} }
m_LastCheckContextFlag = needCheck; m_LastCheckContextFlag = needCheck;
var themeSymbolSize = chart.theme.serie.lineSymbolSize; var themeSymbolSize = chart.theme.serie.lineSymbolSize;
var themeSymbolSelectedSize = chart.theme.serie.lineSymbolSelectedSize;
lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth); lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth);
var needInteract = false; var needInteract = false;
if (m_LegendEnter) if (m_LegendEnter)
{ {
serie.context.pointerEnter = true;
serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
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];
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize);
serieData.context.highlight = true; serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, symbolSelectedSize); serieData.interact.SetValue(ref needInteract, size);
} }
} }
else else
@@ -205,27 +203,23 @@ namespace XCharts.Runtime
continue; continue;
var count = serie.dataCount; var count = serie.dataCount;
Color32 symbolColor, symbolToColor,symbolEmptyColor; float symbolBorder = 0f;
float[] cornerRadius = null;
Color32 symbolColor, symbolToColor, symbolEmptyColor, borderColor;
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
var serieData = serie.GetSerieData(i); var serieData = serie.GetSerieData(i);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var state = SerieHelper.GetSerieState(serie, serieData, true);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData, state);
if (ChartHelper.IsIngore(serieData.context.position)) if (ChartHelper.IsIngore(serieData.context.position))
continue; continue;
bool highlight = serieData.context.highlight || serie.highlight; if (!symbol.show || !symbol.ShowSymbol(i, count))
if ((!symbol.show || !symbol.ShowSymbol(i, count) || serie.IsPerformanceMode()) &&
!serieData.context.highlight)
continue; continue;
var symbolSize = highlight ? var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state);
symbol.GetSelectedSize(serieData.data, chart.theme.serie.lineSymbolSize) : SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, n);
symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, null, chart.theme, state);
var state = SerieHelper.GetSerieState(serie, serieData);
SerieHelper.GetItemColor(out symbolColor, out symbolToColor,out symbolEmptyColor, serie, serieData, chart.theme, n);
var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, chart.theme, state);
var borderColor = SerieHelper.GetSymbolBorderColor(serie, serieData, chart.theme, state);
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, state);
symbolSize = serie.animation.GetSysmbolSize(symbolSize); symbolSize = serie.animation.GetSysmbolSize(symbolSize);
chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, serieData.context.position, chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, serieData.context.position,

View File

@@ -261,8 +261,6 @@ namespace XCharts.Runtime
var isY = axis is YAxis; var isY = axis is YAxis;
var isVisualMapGradient = VisualMapHelper.IsNeedLineGradient(visualMap); var isVisualMapGradient = VisualMapHelper.IsNeedLineGradient(visualMap);
var isLineStyleGradient = serie.lineStyle.IsNeedGradient(); var isLineStyleGradient = serie.lineStyle.IsNeedGradient();
//var highlight = serie.highlight || serie.context.pointerEnter;
var lineColor = SerieHelper.GetLineColor(serie, null, theme, serie.context.colorIndex); var lineColor = SerieHelper.GetLineColor(serie, null, theme, serie.context.colorIndex);
var lastDataIsIgnore = datas[0].isIgnoreBreak; var lastDataIsIgnore = datas[0].isIgnoreBreak;

View File

@@ -73,15 +73,14 @@ namespace XCharts.Runtime
var needInteract = false; var needInteract = false;
if (m_LegendEnter) if (m_LegendEnter)
{ {
serie.context.pointerEnter = true;
serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
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];
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize);
serieData.context.highlight = true; serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, symbolSelectedSize); serieData.interact.SetValue(ref needInteract, size);
} }
} }
else if (serie.context.isTriggerByAxis) else if (serie.context.isTriggerByAxis)
@@ -91,47 +90,42 @@ namespace XCharts.Runtime
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];
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var highlight = i == serie.context.pointerItemDataIndex;
var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); serieData.context.highlight = highlight;
var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize); var state = SerieHelper.GetSerieState(serie, serieData, true);
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
if (i == serie.context.pointerItemDataIndex) serieData.interact.SetValue(ref needInteract, size);
if (highlight)
{ {
serieData.context.highlight = true; serie.context.pointerEnter = true;
serieData.interact.SetValue(ref needInteract, symbolSelectedSize); serie.context.pointerItemDataIndex = i;
}
else
{
serieData.context.highlight = false;
serieData.interact.SetValue(ref needInteract, symbolSize);
} }
} }
} }
else else
{ {
var lastIndex = serie.context.pointerItemDataIndex;
serie.context.pointerItemDataIndex = -1; serie.context.pointerItemDataIndex = -1;
serie.context.pointerEnter = false; serie.context.pointerEnter = false;
foreach (var serieData in serie.data) for (int i = 0; i < serie.dataCount; i++)
{ {
var serieData = serie.data[i];
var dist = Vector3.Distance(chart.pointerPos, serieData.context.position); var dist = Vector3.Distance(chart.pointerPos, serieData.context.position);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); var highlight = dist <= size;
var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize); serieData.context.highlight = highlight;
var state = SerieHelper.GetSerieState(serie, serieData, true);
if (dist <= symbolSelectedSize) size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
serieData.interact.SetValue(ref needInteract, size);
if (highlight)
{ {
serie.context.pointerItemDataIndex = serieData.index;
serie.context.pointerEnter = true; serie.context.pointerEnter = true;
serie.context.pointerItemDataIndex = serieData.index;
serie.interact.SetValue(ref needInteract, lineWidth, true); serie.interact.SetValue(ref needInteract, lineWidth, true);
serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, symbolSelectedSize);
}
else
{
serieData.context.highlight = false;
serieData.interact.SetValue(ref needInteract, symbolSize);
} }
} }
if (lastIndex != serie.context.pointerItemDataIndex)
needInteract = true;
} }
if (needInteract) if (needInteract)
{ {

View File

@@ -224,10 +224,10 @@ namespace XCharts.Runtime
{ {
continue; continue;
} }
var serieState = SerieHelper.GetSerieState(serie, serieData, true);
var lineStyle = SerieHelper.GetLineStyle(serie, serieData); var lineStyle = SerieHelper.GetLineStyle(serie, serieData);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var symbol = SerieHelper.GetSerieSymbol(serie, serieData, serieState);
var isHighlight = serieData.context.highlight;
var serieState = SerieHelper.GetSerieState(serie, serieData);
var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName); var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName);
var showArea = SerieHelper.GetAreaColor(out areaColor, out areaToColor, serie, serieData, chart.theme, colorIndex); var showArea = SerieHelper.GetAreaColor(out areaColor, out areaToColor, serie, serieData, chart.theme, colorIndex);
var lineColor = SerieHelper.GetLineColor(serie, serieData, chart.theme, colorIndex); var lineColor = SerieHelper.GetLineColor(serie, serieData, chart.theme, colorIndex);
@@ -300,25 +300,21 @@ namespace XCharts.Runtime
if (symbol.show && symbol.type != SymbolType.None) if (symbol.show && symbol.type != SymbolType.None)
{ {
float symbolBorder = 0f;
float[] cornerRadius = null;
Color32 symbolColor, symbolToColor, symbolEmptyColor, borderColor;
for (int m = 0; m < serieData.context.dataPoints.Count; m++) for (int m = 0; m < serieData.context.dataPoints.Count; m++)
{ {
var point = serieData.context.dataPoints[m]; var point = serieData.context.dataPoints[m];
var symbolSize = isHighlight ? var symbolSize = 0f;
symbol.GetSelectedSize(null, chart.theme.serie.lineSymbolSelectedSize) :
symbol.GetSize(null, chart.theme.serie.lineSymbolSize);
if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting)) if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting))
{ {
symbolSize = isHighlight ? symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, serieState);
symbol.GetSelectedSize(serieData.data, symbolSize) :
symbol.GetSize(serieData.data, symbolSize);
serieData.interact.SetValue(ref interacting, symbolSize); serieData.interact.SetValue(ref interacting, symbolSize);
symbolSize = serie.animation.GetSysmbolSize(symbolSize); symbolSize = serie.animation.GetSysmbolSize(symbolSize);
} }
Color32 symbolColor, symbolToColor, symbolEmptyColor;
SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, j, serieState); SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, j, serieState);
var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, chart.theme, serieState); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, serieState);
var borderColor = SerieHelper.GetSymbolBorderColor(serie, serieData, chart.theme, serieState);
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, serieState);
chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, point, symbolColor, chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, point, symbolColor,
symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius); symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius);
} }
@@ -451,20 +447,18 @@ namespace XCharts.Runtime
} }
if (serie.symbol.show && serie.symbol.type != SymbolType.None) if (serie.symbol.show && serie.symbol.type != SymbolType.None)
{ {
float symbolBorder = 0f;
float[] cornerRadius = null;
Color32 symbolColor, symbolToColor, symbolEmptyColor, borderColor;
for (int j = 0; j < serie.data.Count; j++) for (int j = 0; j < serie.data.Count; j++)
{ {
var serieData = serie.data[j]; var serieData = serie.data[j];
if (!serieData.show) continue; if (!serieData.show) continue;
var state = SerieHelper.GetSerieState(serie, serieData); var state = SerieHelper.GetSerieState(serie, serieData);
var serieIndex = serieData.index; var serieIndex = serieData.index;
var symbolSize = state == SerieState.Emphasis ? var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state);
serie.symbol.GetSelectedSize(serieData.data, chart.theme.serie.lineSymbolSelectedSize) : SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, serieIndex, state);
serie.symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state);
Color32 symbolColor, symbolToColor,symbolEmptyColor;
SerieHelper.GetItemColor(out symbolColor, out symbolToColor,out symbolEmptyColor, serie, serieData, chart.theme, serieIndex, state);
var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, chart.theme, state);
var borderColor = SerieHelper.GetSymbolBorderColor(serie, serieData, chart.theme, state);
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, state);
if (!radar.IsInIndicatorRange(j, serieData.GetData(1))) if (!radar.IsInIndicatorRange(j, serieData.GetData(1)))
{ {
symbolColor = radar.outRangeColor; symbolColor = radar.outRangeColor;

View File

@@ -82,22 +82,21 @@ namespace XCharts.Runtime
for (int i = serie.dataCount - 1; i >= 0; i--) for (int i = serie.dataCount - 1; i >= 0; i--)
{ {
var serieData = serie.data[i]; var serieData = serie.data[i];
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize);
var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize);
if (m_LegendEnter || if (m_LegendEnter ||
(!needHideAll && Vector3.Distance(serieData.context.position, chart.pointerPos) <= symbolSize)) (!needHideAll && Vector3.Distance(serieData.context.position, chart.pointerPos) <= symbolSize))
{ {
serie.context.pointerItemDataIndex = i; serie.context.pointerItemDataIndex = i;
serie.context.pointerEnter = true; serie.context.pointerEnter = true;
serieData.context.highlight = true; serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, symbolSelectedSize);
} }
else else
{ {
serieData.context.highlight = false; serieData.context.highlight = false;
serieData.interact.SetValue(ref needInteract, symbolSize);
} }
var state = SerieHelper.GetSerieState(serie, serieData, true);
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
serieData.interact.SetValue(ref needInteract, symbolSize);
} }
if (needInteract) if (needInteract)
{ {
@@ -144,19 +143,19 @@ namespace XCharts.Runtime
serie.containerIndex = m_Grid.index; serie.containerIndex = m_Grid.index;
serie.containterInstanceId = m_Grid.instanceId; serie.containterInstanceId = m_Grid.instanceId;
float symbolBorder = 0f;
float[] cornerRadius = null;
Color32 color, toColor, emptyColor, borderColor;
foreach (var serieData in dataList) foreach (var serieData in dataList)
{ {
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
if (!symbol.ShowSymbol(serieData.index, maxCount)) if (!symbol.ShowSymbol(serieData.index, maxCount))
continue; continue;
var highlight = serie.highlight || serieData.context.highlight; var state = SerieHelper.GetSerieState(serie, serieData, true);
var state = SerieHelper.GetSerieState(serie, serieData);
Color32 color, toColor, emptyColor;
SerieHelper.GetItemColor(out color, out toColor, out emptyColor, serie, serieData, chart.theme, colorIndex, state); SerieHelper.GetItemColor(out color, out toColor, out emptyColor, serie, serieData, chart.theme, colorIndex, state);
var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, theme, state); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state);
var borderColor = SerieHelper.GetSymbolBorderColor(serie, serieData, theme, state);
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, state);
double xValue = serieData.GetCurrData(0, dataChangeDuration, xAxis.inverse); double xValue = serieData.GetCurrData(0, dataChangeDuration, xAxis.inverse);
double yValue = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse); double yValue = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse);
@@ -175,14 +174,10 @@ namespace XCharts.Runtime
serie.context.dataPoints.Add(pos); serie.context.dataPoints.Add(pos);
serieData.context.position = pos; serieData.context.position = pos;
var datas = serieData.data; var datas = serieData.data;
var symbolSize = serie.highlight || serieData.context.highlight ? var symbolSize = 0f;
theme.serie.scatterSymbolSelectedSize :
theme.serie.scatterSymbolSize;
if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting)) if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting))
{ {
symbolSize = highlight ? symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.scatterSymbolSize, state);
symbol.GetSelectedSize(serieData.data, symbolSize) :
symbol.GetSize(serieData.data, symbolSize);
serieData.interact.SetValue(ref interacting, symbolSize); serieData.interact.SetValue(ref interacting, symbolSize);
} }
@@ -249,24 +244,25 @@ namespace XCharts.Runtime
serie.containerIndex = axis.index; serie.containerIndex = axis.index;
serie.containterInstanceId = axis.instanceId; serie.containterInstanceId = axis.instanceId;
float symbolBorder = 0f;
float[] cornerRadius = null;
Color32 color, toColor, emptyColor, borderColor;
foreach (var serieData in dataList) foreach (var serieData in dataList)
{ {
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
if (!symbol.ShowSymbol(serieData.index, maxCount)) if (!symbol.ShowSymbol(serieData.index, maxCount))
continue; continue;
var state = SerieHelper.GetSerieState(serie, serieData); var state = SerieHelper.GetSerieState(serie, serieData, true);
Color32 color, toColor, emptyColor;
SerieHelper.GetItemColor(out color, out toColor, out emptyColor, serie, serieData, chart.theme, colorIndex, state); SerieHelper.GetItemColor(out color, out toColor, out emptyColor, serie, serieData, chart.theme, colorIndex, state);
var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, theme, state); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state);
var borderColor = SerieHelper.GetSymbolBorderColor(serie, serieData, theme, state);
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, state);
var xValue = serieData.GetCurrData(0, dataChangeDuration, axis.inverse);
if (serieData.IsDataChanged()) if (serieData.IsDataChanged())
dataChanging = true; dataChanging = true;
var pos = Vector3.zero; var pos = Vector3.zero;
var xValue = serieData.GetCurrData(0, dataChangeDuration, axis.inverse);
if (axis.orient == Orient.Horizonal) if (axis.orient == Orient.Horizonal)
{ {
var xDataHig = GetDataHig(axis, xValue, axis.context.width); var xDataHig = GetDataHig(axis, xValue, axis.context.width);
@@ -283,11 +279,7 @@ namespace XCharts.Runtime
serieData.context.position = pos; serieData.context.position = pos;
var datas = serieData.data; var datas = serieData.data;
var symbolSize = 0f; var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.scatterSymbolSize, state);
if (serie.highlight || serieData.context.highlight)
symbolSize = symbol.GetSelectedSize(datas, theme.serie.scatterSymbolSelectedSize);
else
symbolSize = symbol.GetSize(datas, theme.serie.scatterSymbolSize);
symbolSize *= rate; symbolSize *= rate;
if (isEffectScatter) if (isEffectScatter)

View File

@@ -16,6 +16,7 @@ namespace XCharts.Runtime
{ {
"m_Id", "m_Id",
"m_ParentId", "m_ParentId",
"m_State",
"m_Ignore", "m_Ignore",
"m_Selected", "m_Selected",
"m_Radius", "m_Radius",

View File

@@ -248,13 +248,20 @@ namespace XCharts.Runtime
return serie.state; return serie.state;
} }
public static SerieState GetSerieState(Serie serie, SerieData serieData) public static SerieState GetSerieState(SerieData serieData)
{ {
if (serieData == null || serieData.state == SerieState.Auto) return GetSerieState(serie);
if (serieData.context.highlight) return SerieState.Emphasis; if (serieData.context.highlight) return SerieState.Emphasis;
return serieData.state; return serieData.state;
} }
public static SerieState GetSerieState(Serie serie, SerieData serieData, bool defaultSerieState = false)
{
if (serieData == null) return GetSerieState(serie);
if (serieData.context.highlight) return SerieState.Emphasis;
if (serieData.state == SerieState.Auto) return defaultSerieState?serie.state : GetSerieState(serie);
return serieData.state;
}
public static Color32 GetItemBackgroundColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, public static Color32 GetItemBackgroundColor(Serie serie, SerieData serieData, ThemeStyle theme, int index,
SerieState state = SerieState.Auto, bool useDefault = false) SerieState state = SerieState.Auto, bool useDefault = false)
{ {
@@ -443,10 +450,18 @@ namespace XCharts.Runtime
return stateStyle == null?serie.labelLine : stateStyle.labelLine; return stateStyle == null?serie.labelLine : stateStyle.labelLine;
} }
public static SerieSymbol GetSerieSymbol(Serie serie, SerieData serieData) public static SerieSymbol GetSerieSymbol(Serie serie, SerieData serieData, SerieState state = SerieState.Auto)
{ {
if (!serie.IsPerformanceMode() && serieData.symbol != null) return serieData.symbol; if (state == SerieState.Auto) state = GetSerieState(serie, serieData);
else return serie.symbol; if (state == SerieState.Normal)
{
return serieData != null && serieData.symbol != null? serieData.symbol : serie.symbol;
}
else
{
var stateStyle = GetStateStyle(serie, serieData, state);
return stateStyle == null?serie.symbol : stateStyle.symbol;
}
} }
public static LineStyle GetLineStyle(Serie serie, SerieData serieData) public static LineStyle GetLineStyle(Serie serie, SerieData serieData)
@@ -579,29 +594,73 @@ namespace XCharts.Runtime
{ {
if (!ChartHelper.IsClearColor(checkColor)) color = checkColor; if (!ChartHelper.IsClearColor(checkColor)) color = checkColor;
else if (!ChartHelper.IsClearColor(itemColor)) color = itemColor; else if (!ChartHelper.IsClearColor(itemColor)) color = itemColor;
if (ChartHelper.IsClearColor(color)) color = theme.GetColor(colorIndex); if (ChartHelper.IsClearColor(color) && colorIndex >= 0) color = theme.GetColor(colorIndex);
if (setOpacity) ChartHelper.SetColorOpacity(ref color, opacity); if (setOpacity) ChartHelper.SetColorOpacity(ref color, opacity);
} }
public static float GetSymbolBorder(Serie serie, SerieData serieData, ThemeStyle theme, SerieState state = SerieState.Auto) public static void GetSymbolInfo(out Color32 borderColor, out float border, out float[] cornerRadius,
Serie serie, SerieData serieData, ThemeStyle theme, SerieState state = SerieState.Auto)
{ {
var itemStyle = GetItemStyle(serie, serieData, state); borderColor = ChartConst.clearColor32;
if (itemStyle != null && itemStyle.borderWidth != 0) return itemStyle.borderWidth; if (state == SerieState.Auto)
else return serie.lineStyle.GetWidth(theme.serie.lineWidth) * 2; state = GetSerieState(serie, serieData);
var stateStyle = GetStateStyle(serie, serieData, state);
if (stateStyle == null)
{
var itemStyle = GetItemStyle(serie, serieData, SerieState.Normal);
border = itemStyle.borderWidth != 0 ? itemStyle.borderWidth : serie.lineStyle.GetWidth(theme.serie.lineWidth);
cornerRadius = itemStyle.cornerRadius;
GetColor(ref borderColor, itemStyle.borderColor, itemStyle.borderColor, 1, theme, -1);
switch (state)
{
case SerieState.Emphasis:
borderColor = ChartHelper.GetHighlightColor(borderColor);
break;
case SerieState.Blur:
borderColor = ChartHelper.GetBlurColor(borderColor);
break;
case SerieState.Select:
borderColor = ChartHelper.GetSelectColor(borderColor);
break;
default:
break;
}
}
else
{
var itemStyle = stateStyle.itemStyle;
border = itemStyle.borderWidth != 0 ? itemStyle.borderWidth : stateStyle.lineStyle.GetWidth(theme.serie.lineWidth);
cornerRadius = itemStyle.cornerRadius;
GetColor(ref borderColor, stateStyle.itemStyle.borderColor, ColorUtil.clearColor32, 1, theme, -1);
}
} }
public static Color32 GetSymbolBorderColor(Serie serie, SerieData serieData, ThemeStyle theme, SerieState state = SerieState.Auto) public static float GetSysmbolSize(Serie serie, SerieData serieData, ThemeStyle theme, float defaultSize, SerieState state = SerieState.Auto)
{ {
var itemStyle = GetItemStyle(serie, serieData, state); if (state == SerieState.Auto)
if (itemStyle != null && !ChartHelper.IsClearColor(itemStyle.borderColor)) return itemStyle.borderColor; state = GetSerieState(serie, serieData);
else return serie.itemStyle.borderColor; var stateStyle = GetStateStyle(serie, serieData, state);
var size = 0f;
if (stateStyle == null)
{
var symbol = GetSerieSymbol(serie, serieData, SerieState.Normal);
size = symbol.GetSize(serieData.data, defaultSize);
switch (state)
{
case SerieState.Emphasis:
case SerieState.Select:
size *= theme.serie.selectedRate;
break;
default:
break;
} }
}
public static float[] GetSymbolCornerRadius(Serie serie, SerieData serieData, SerieState state = SerieState.Auto) else
{ {
var itemStyle = GetItemStyle(serie, serieData, state); var symbol = stateStyle.symbol;
if (itemStyle != null) return itemStyle.cornerRadius; size = symbol.GetSize(serieData.data, defaultSize);
else return null; }
return size;
} }
public static string GetNumericFormatter(Serie serie, SerieData serieData, string defaultFormatter = null) public static string GetNumericFormatter(Serie serie, SerieData serieData, string defaultFormatter = null)