mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-29 20:58:47 +00:00
[feature][symbol] support symbol settings for StateStyle
This commit is contained in:
@@ -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`参数设置不生效的问题
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user