diff --git a/Editor/ChildComponents/AnimationDrawer.cs b/Editor/ChildComponents/AnimationDrawer.cs
index 6188282d..53fc5af0 100644
--- a/Editor/ChildComponents/AnimationDrawer.cs
+++ b/Editor/ChildComponents/AnimationDrawer.cs
@@ -62,6 +62,7 @@ namespace XCharts.Editor
PropertyField(prop, "m_Duration");
PropertyField(prop, "m_WidthRate");
PropertyField(prop, "m_RadiusRate");
+ PropertyField(prop, "m_Offset");
--EditorGUI.indentLevel;
}
}
diff --git a/Editor/ChildComponents/ComponentThemeDrawer.cs b/Editor/ChildComponents/ComponentThemeDrawer.cs
index 06bec277..128f0f9e 100644
--- a/Editor/ChildComponents/ComponentThemeDrawer.cs
+++ b/Editor/ChildComponents/ComponentThemeDrawer.cs
@@ -148,9 +148,6 @@ namespace XCharts.Editor
PropertyField(prop, "m_LineWidth");
PropertyField(prop, "m_LineSymbolSize");
PropertyField(prop, "m_ScatterSymbolSize");
- PropertyField(prop, "m_SelectedRate");
- PropertyField(prop, "m_PieTooltipExtraRadius");
- PropertyField(prop, "m_PieSelectedOffset");
PropertyField(prop, "m_CandlestickColor");
PropertyField(prop, "m_CandlestickColor0");
PropertyField(prop, "m_CandlestickBorderColor");
diff --git a/Resources/XCSettings.asset b/Resources/XCSettings.asset
index 5587633c..07e20fb5 100644
--- a/Resources/XCSettings.asset
+++ b/Resources/XCSettings.asset
@@ -45,8 +45,6 @@ MonoBehaviour:
m_LineSegmentDistance: 3
m_CicleSmoothness: 2
m_VisualMapTriangeLen: 20
- m_PieTooltipExtraRadius: 8
- m_PieSelectedOffset: 8
m_CustomThemes:
- {fileID: 11400000, guid: 289d2fc7f4ce24f73b9ed8ec52639f72, type: 2}
- {fileID: 11400000, guid: e1dc23a10de1e4c5dbfbaf74c4dfd218, type: 2}
diff --git a/Resources/XCTheme-Dark.asset b/Resources/XCTheme-Dark.asset
index 11c2806d..63d26000 100644
--- a/Resources/XCTheme-Dark.asset
+++ b/Resources/XCTheme-Dark.asset
@@ -188,9 +188,6 @@ MonoBehaviour:
m_LineWidth: 1.8
m_LineSymbolSize: 5
m_ScatterSymbolSize: 20
- m_PieTooltipExtraRadius: 8
- m_SelectedRate: 1.3
- m_PieSelectedOffset: 8
m_CandlestickColor:
serializedVersion: 2
rgba: 4283846390
diff --git a/Resources/XCTheme-Default.asset b/Resources/XCTheme-Default.asset
index e05e5787..53fae3ef 100644
--- a/Resources/XCTheme-Default.asset
+++ b/Resources/XCTheme-Default.asset
@@ -145,9 +145,6 @@ MonoBehaviour:
m_LineWidth: 1.8
m_LineSymbolSize: 5
m_ScatterSymbolSize: 20
- m_PieTooltipExtraRadius: 8
- m_SelectedRate: 1.3
- m_PieSelectedOffset: 8
m_CandlestickColor:
serializedVersion: 2
rgba: 4283716843
diff --git a/Runtime/Component/Animation/AnimationInfo.cs b/Runtime/Component/Animation/AnimationInfo.cs
index 520dd039..a0a41622 100644
--- a/Runtime/Component/Animation/AnimationInfo.cs
+++ b/Runtime/Component/Animation/AnimationInfo.cs
@@ -413,7 +413,8 @@ namespace XCharts.Runtime
public class AnimationInteraction : AnimationInfo
{
[SerializeField][Since("v3.8.0")] private float m_WidthRate = 1.3f;
- [SerializeField][Since("v3.8.0")] private float m_RadiusRate = 1.3f;
+ [SerializeField][Since("v3.8.0")] private float m_RadiusRate = 1.1f;
+ [SerializeField][Since("v3.8.0")] private float m_Offset = 8f;
///
/// the size rate of the width.
@@ -425,5 +426,16 @@ namespace XCharts.Runtime
/// |半径的放大倍率。
///
public float radiusRate { get { return m_RadiusRate; } set { m_RadiusRate = value; } }
+ ///
+ /// the offset when interaction. Such as the offset of the pie chart when the sector is selected.
+ /// |交互时的偏移。如饼图的扇形选中时的偏移。
+ ///
+ public float offset { get { return m_Offset; } set { m_Offset = value; } }
+
+
+ public float GetRadius(float radius)
+ {
+ return radius * radiusRate;
+ }
}
}
\ No newline at end of file
diff --git a/Runtime/Component/Animation/AnimationStyle.cs b/Runtime/Component/Animation/AnimationStyle.cs
index 226e5f42..d217c084 100644
--- a/Runtime/Component/Animation/AnimationStyle.cs
+++ b/Runtime/Component/Animation/AnimationStyle.cs
@@ -538,6 +538,14 @@ namespace XCharts.Runtime
return 0;
}
+ public float GetInteractionRadius(float radius){
+
+ if (m_Enable && m_Interaction.enable)
+ return m_Interaction.GetRadius(radius);
+ else
+ return radius;
+ }
+
public bool HasFadeOut()
{
return enable && m_FadeOut.context.end;
diff --git a/Runtime/Component/Interaction/InteractData.cs b/Runtime/Component/Interaction/InteractData.cs
index 1333001c..ce388e6a 100644
--- a/Runtime/Component/Interaction/InteractData.cs
+++ b/Runtime/Component/Interaction/InteractData.cs
@@ -15,6 +15,15 @@ namespace XCharts.Runtime
private bool m_ValueEnable = false;
internal float targetVaue { get { return m_TargetValue; } }
+ internal float previousValue { get { return m_PreviousValue; } }
+ internal bool valueEnable { get { return m_ValueEnable; } }
+ internal bool updateFlag { get { return m_UpdateFlag; } }
+
+ public override string ToString()
+ {
+ return string.Format("m_PreviousValue:{0},m_TargetValue:{1},m_UpdateTime:{2},m_UpdateFlag:{3},m_ValueEnable:{4}",
+ m_PreviousValue, m_TargetValue, m_UpdateTime, m_UpdateFlag, m_ValueEnable);
+ }
public void SetValue(ref bool needInteract, float size, bool highlight, float rate = 1.3f)
{
@@ -33,6 +42,10 @@ namespace XCharts.Runtime
m_PreviousValue = m_TargetValue;
m_TargetValue = size;
}
+ else if (m_UpdateFlag)
+ {
+ needInteract = true;
+ }
}
public void SetColor(ref bool needInteract, Color32 color)
@@ -49,6 +62,10 @@ namespace XCharts.Runtime
}
m_TargetColor = color;
}
+ else if (m_UpdateFlag)
+ {
+ needInteract = true;
+ }
}
public void SetColor(ref bool needInteract, Color32 color, Color32 toColor)
{
@@ -186,6 +203,7 @@ namespace XCharts.Runtime
public void Reset()
{
+ Debug.LogError("Reset:"+this);
m_UpdateFlag = false;
m_ValueEnable = false;
m_PreviousValue = float.NaN;
diff --git a/Runtime/Component/Label/SerieLabelHelper.cs b/Runtime/Component/Label/SerieLabelHelper.cs
index 5d9c5a65..6baf1026 100644
--- a/Runtime/Component/Label/SerieLabelHelper.cs
+++ b/Runtime/Component/Label/SerieLabelHelper.cs
@@ -161,6 +161,7 @@ namespace XCharts.Runtime
}
if (!serieData.show) return;
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
+ if (serieLabel == null) return;
var isOutside = serieLabel.position == LabelStyle.Position.Outside ||
serieLabel.position == LabelStyle.Position.Default;
if (!serieLabel.show) return;
@@ -187,11 +188,11 @@ namespace XCharts.Runtime
var angle = ChartHelper.GetAngle360(Vector2.up, newPos - serie.context.center);
if (angle >= 180 && angle <= 270)
{
- serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1);
+ serieData.context.labelPosition = new Vector3(isLeft ? (++lastX) : (--lastX), y1);
}
else if (angle < 180 && angle >= 90)
{
- serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1);
+ serieData.context.labelPosition = new Vector3(isLeft ? (++lastX) : (--lastX), y1);
}
else
{
diff --git a/Runtime/Internal/XCSettings.cs b/Runtime/Internal/XCSettings.cs
index d1617bcc..6d5f7a9e 100644
--- a/Runtime/Internal/XCSettings.cs
+++ b/Runtime/Internal/XCSettings.cs
@@ -60,8 +60,6 @@ namespace XCharts.Runtime
[SerializeField][Range(1f, 20)] protected float m_LineSegmentDistance = 3f;
[SerializeField][Range(1, 10)] protected float m_CicleSmoothness = 2f;
[SerializeField][Range(10, 50)] protected float m_VisualMapTriangeLen = 20f;
- [SerializeField][Range(1, 20)] protected float m_PieTooltipExtraRadius = 8f;
- [SerializeField][Range(1, 20)] protected float m_PieSelectedOffset = 8f;
[SerializeField] protected List m_CustomThemes = new List();
public static Lang lang { get { return Instance.m_Lang; } }
@@ -112,8 +110,6 @@ namespace XCharts.Runtime
public static float lineSegmentDistance { get { return Instance.m_LineSegmentDistance; } }
public static float cicleSmoothness { get { return Instance.m_CicleSmoothness; } }
public static float visualMapTriangeLen { get { return Instance.m_VisualMapTriangeLen; } }
- public static float pieTooltipExtraRadius { get { return Instance.m_PieTooltipExtraRadius; } }
- public static float pieSelectedOffset { get { return Instance.m_PieSelectedOffset; } }
#endregion
public static List customThemes { get { return Instance.m_CustomThemes; } }
diff --git a/Runtime/Serie/Bar/BarHandler.PolarCoord.cs b/Runtime/Serie/Bar/BarHandler.PolarCoord.cs
index af436cca..04688c44 100644
--- a/Runtime/Serie/Bar/BarHandler.PolarCoord.cs
+++ b/Runtime/Serie/Bar/BarHandler.PolarCoord.cs
@@ -57,7 +57,7 @@ namespace XCharts.Runtime
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
- var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
+ var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, size);
}
diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs b/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs
index 879e9268..6b225c37 100644
--- a/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs
+++ b/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs
@@ -57,7 +57,7 @@ namespace XCharts.Runtime
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
- var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
+ var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, size);
}
diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.cs b/Runtime/Serie/Heatmap/HeatmapHandler.cs
index a4aefd14..878d4b90 100644
--- a/Runtime/Serie/Heatmap/HeatmapHandler.cs
+++ b/Runtime/Serie/Heatmap/HeatmapHandler.cs
@@ -284,7 +284,7 @@ namespace XCharts.Runtime
}
else
{
- var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, defaultSymbolSize, state);
+ var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, defaultSymbolSize, state);
rectWid = symbolSize;
rectHig = symbolSize;
}
@@ -298,7 +298,7 @@ namespace XCharts.Runtime
}
else
{
- var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, defaultSymbolSize, state);
+ var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, defaultSymbolSize, state);
var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, chart.theme, serie.context.colorIndex, state);
serieData.context.rect = new Rect(pos.x - symbolSize / 2, pos.y - symbolSize / 2, symbolSize, symbolSize);
chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, pos,
@@ -398,7 +398,7 @@ namespace XCharts.Runtime
}
var state = SerieHelper.GetSerieState(serie, null, true);
var symbol = SerieHelper.GetSerieSymbol(serie, null, state);
- var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme, defaultSymbolSize, state);
+ var symbolSize = SerieHelper.GetSysmbolSize(serie, null, defaultSymbolSize, state);
var isRectSymbol = symbol.type == SymbolType.Rect;
float symbolBorder = 0f;
float[] cornerRadius = null;
diff --git a/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Runtime/Serie/Line/LineHandler.GridCoord.cs
index c4564619..90a569ca 100644
--- a/Runtime/Serie/Line/LineHandler.GridCoord.cs
+++ b/Runtime/Serie/Line/LineHandler.GridCoord.cs
@@ -65,7 +65,7 @@ namespace XCharts.Runtime
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
- var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
+ var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, size);
}
@@ -80,7 +80,7 @@ namespace XCharts.Runtime
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);
+ var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
serieData.interact.SetValue(ref needInteract, size);
if (highlight)
{
@@ -99,11 +99,11 @@ namespace XCharts.Runtime
{
var serieData = serie.data[i];
var dist = Vector3.Distance(chart.pointerPos, serieData.context.position);
- var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
+ var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize);
var highlight = dist <= size;
serieData.context.highlight = highlight;
var state = SerieHelper.GetSerieState(serie, serieData, true);
- size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
+ size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
serieData.interact.SetValue(ref needInteract, size);
if (highlight)
{
@@ -179,7 +179,7 @@ namespace XCharts.Runtime
var symbolSize = 0f;
if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration))
{
- symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state);
+ symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, state);
serieData.interact.SetValue(ref interacting, symbolSize);
symbolSize = serie.animation.GetSysmbolSize(symbolSize);
}
diff --git a/Runtime/Serie/Line/LineHandler.PolarCoord.cs b/Runtime/Serie/Line/LineHandler.PolarCoord.cs
index 3567d839..41f0dd34 100644
--- a/Runtime/Serie/Line/LineHandler.PolarCoord.cs
+++ b/Runtime/Serie/Line/LineHandler.PolarCoord.cs
@@ -57,7 +57,7 @@ namespace XCharts.Runtime
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
- var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
+ var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, size);
}
@@ -269,7 +269,7 @@ namespace XCharts.Runtime
if (!symbol.show || !symbol.ShowSymbol(i, count))
continue;
- var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state);
+ var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, state);
SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, n);
SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, null, chart.theme, state);
diff --git a/Runtime/Serie/Line/LineHandler.cs b/Runtime/Serie/Line/LineHandler.cs
index 6ff1865c..9e4d7698 100644
--- a/Runtime/Serie/Line/LineHandler.cs
+++ b/Runtime/Serie/Line/LineHandler.cs
@@ -100,7 +100,7 @@ namespace XCharts.Runtime
public override int GetPointerItemDataIndex()
{
- var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme, chart.theme.serie.lineSymbolSize) * 1.5f;
+ var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme.serie.lineSymbolSize) * 1.5f;
var count = serie.context.dataPoints.Count;
for (int i = 0; i < count; i++)
{
diff --git a/Runtime/Serie/Line/SimplifiedLineHandler.cs b/Runtime/Serie/Line/SimplifiedLineHandler.cs
index 6dc165af..40348d7d 100644
--- a/Runtime/Serie/Line/SimplifiedLineHandler.cs
+++ b/Runtime/Serie/Line/SimplifiedLineHandler.cs
@@ -76,7 +76,7 @@ namespace XCharts.Runtime
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
- var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
+ var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
serieData.context.highlight = true;
serieData.interact.SetValue(ref needInteract, size);
}
@@ -91,7 +91,7 @@ namespace XCharts.Runtime
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);
+ var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
serieData.interact.SetValue(ref needInteract, size);
if (highlight)
{
@@ -109,11 +109,11 @@ namespace XCharts.Runtime
{
var serieData = serie.data[i];
var dist = Vector3.Distance(chart.pointerPos, serieData.context.position);
- var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
+ var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize);
var highlight = dist <= size;
serieData.context.highlight = highlight;
var state = SerieHelper.GetSerieState(serie, serieData, true);
- size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
+ size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
serieData.interact.SetValue(ref needInteract, size);
if (highlight)
{
diff --git a/Runtime/Serie/Pie/PieHandler.cs b/Runtime/Serie/Pie/PieHandler.cs
index a3207652..91018fc7 100644
--- a/Runtime/Serie/Pie/PieHandler.cs
+++ b/Runtime/Serie/Pie/PieHandler.cs
@@ -108,19 +108,27 @@ namespace XCharts.Runtime
{
if (m_LastCheckContextFlag != needCheck)
{
- m_LastCheckContextFlag = needCheck;
serie.context.pointerItemDataIndex = -1;
serie.context.pointerEnter = false;
+
foreach (var serieData in serie.data)
{
var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName);
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal);
+ Debug.LogError("end:"+serieData.interact);
serieData.context.highlight = false;
serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor);
}
- if (needInteract)
+ if (needInteract){
chart.RefreshPainter(serie);
+ Debug.LogError("PieHandler update:" + needInteract + "," + m_LastCheckContextFlag + "," + needCheck);
+ }else{
+ m_LastCheckContextFlag = needCheck;
+ serie.ResetInteract();
+ Debug.LogError("PieHandler end:" + needInteract + "," + m_LastCheckContextFlag + "," + needCheck);
+ }
}
+
return;
}
m_LastCheckContextFlag = needCheck;
@@ -128,32 +136,36 @@ namespace XCharts.Runtime
var dataIndex = GetPiePosIndex(serie, chart.pointerPos);
serie.context.pointerItemDataIndex = -1;
serie.context.pointerEnter = dataIndex >= 0;
+
+ bool isAllZeroValue = SerieHelper.IsAllZeroValue(serie, 1);
+ var zeroReplaceValue = isAllZeroValue ? 360 / serie.dataCount : 0;
+
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
+ var value = isAllZeroValue ? zeroReplaceValue : serieData.GetCurrData(1, serie.animation);
+ var state = SerieState.Normal;
if (dataIndex == i || (m_LegendEnter && m_LegendEnterIndex == i))
{
serie.context.pointerItemDataIndex = i;
serieData.context.highlight = true;
-
- var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName);
- SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Emphasis);
- var value = serieData.context.outsideRadius + chart.theme.serie.pieTooltipExtraRadius;
- serieData.interact.SetValueAndColor(ref needInteract, value, color, toColor);
+ state = SerieState.Emphasis;
}
else
{
serieData.context.highlight = false;
- var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName);
- SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal);
- serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor);
}
+ UpdateSerieDataRadius(serieData, value);
+ var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName);
+ SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, state);
+ serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor);
+
}
if (lastPointerItemDataIndex != serie.context.pointerItemDataIndex)
{
needInteract = true;
}
- if (needInteract)
+ //if (needInteract)
{
chart.RefreshPainter(serie);
}
@@ -207,20 +219,11 @@ namespace XCharts.Runtime
(float)(totalDegree * value / dataTotalFilterMinAngle);
if (serie.minAngle > 0 && degree < serie.minAngle) degree = serie.minAngle;
serieData.context.toAngle = startDegree + degree;
- if (serieData.radius > 0)
- serieData.context.outsideRadius = ChartHelper.GetActualValue(serieData.radius, Mathf.Min(chart.chartWidth, chart.chartHeight));
- else
- serieData.context.outsideRadius = serie.pieRoseType > 0 ?
- serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) :
- serie.context.outsideRadius;
- if (serieData.context.highlight)
- {
- serieData.context.outsideRadius += chart.theme.serie.pieTooltipExtraRadius;
- }
+ UpdateSerieDataRadius(serieData, value);
var offset = 0f;
if (serie.pieClickOffset && (serieData.selected || serieData.context.selected))
{
- offset += chart.theme.serie.pieSelectedOffset;
+ offset += serie.animation.interaction.offset;
}
if (serie.animation.CheckDetailBreak(serieData.context.toAngle))
{
@@ -247,12 +250,12 @@ namespace XCharts.Runtime
serieData.context.outsideRadius -= serieData.context.offsetRadius;
if (serie.pieClickOffset && (serieData.selected || serieData.context.selected))
{
- serieData.context.offsetRadius += chart.theme.serie.pieSelectedOffset;
+ serieData.context.offsetRadius += serie.animation.interaction.offset;
if (serieData.context.insideRadius > 0)
{
- serieData.context.insideRadius += chart.theme.serie.pieSelectedOffset;
+ serieData.context.insideRadius += serie.animation.interaction.offset;
}
- serieData.context.outsideRadius += chart.theme.serie.pieSelectedOffset;
+ serieData.context.outsideRadius += serie.animation.interaction.offset;
}
serieData.context.offsetCenter = new Vector3(
serie.context.center.x + serieData.context.offsetRadius * currSin,
@@ -265,6 +268,20 @@ namespace XCharts.Runtime
SerieLabelHelper.AvoidLabelOverlap(serie, chart.theme.common);
}
+ private void UpdateSerieDataRadius(SerieData serieData, double value)
+ {
+ if (serieData.radius > 0)
+ serieData.context.outsideRadius = ChartHelper.GetActualValue(serieData.radius, Mathf.Min(chart.chartWidth, chart.chartHeight));
+ else
+ serieData.context.outsideRadius = serie.pieRoseType > 0 ?
+ serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) :
+ serie.context.outsideRadius;
+ if (serieData.context.highlight)
+ {
+ serieData.context.outsideRadius = serie.animation.GetInteractionRadius(serieData.context.outsideRadius);
+ }
+ }
+
private double GetTotalAngle(Serie serie, double dataTotal, ref float totalAngle)
{
totalAngle = serie.context.startAngle + 360f;
@@ -308,6 +325,7 @@ namespace XCharts.Runtime
var interacting = false;
var color = ColorUtil.clearColor32;
var toColor = ColorUtil.clearColor32;
+ var interactDuration = serie.animation.GetInteractionDuration();
var data = serie.data;
serie.animation.InitProgress(0, 360);
for (int n = 0; n < data.Count; n++)
@@ -330,13 +348,12 @@ namespace XCharts.Runtime
var progress = AnimationStyleHelper.CheckDataAnimation(chart, serie, n, 1);
var insideRadius = serieData.context.insideRadius * progress;
- //if (!serieData.interact.TryGetValueAndColor(ref outsideRadius, ref color, ref toColor, ref interacting))
+ if (!serieData.interact.TryGetValueAndColor(ref outsideRadius, ref color, ref toColor, ref interacting, interactDuration))
{
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex);
outsideRadius = serieData.context.outsideRadius * progress;
serieData.interact.SetValueAndColor(ref interacting, outsideRadius, color, toColor);
}
-
if (serie.pieClickOffset && (serieData.selected || serieData.context.selected))
{
var drawEndDegree = serieData.context.currentAngle;
@@ -514,7 +531,7 @@ namespace XCharts.Runtime
return -1;
var dist = Vector2.Distance(local, serie.context.center);
- var maxRadius = serie.context.outsideRadius + 3 * chart.theme.serie.pieSelectedOffset;
+ var maxRadius = serie.context.outsideRadius + 3 * serie.animation.interaction.offset;
if (dist < serie.context.insideRadius || dist > maxRadius)
return -1;
diff --git a/Runtime/Serie/Radar/RadarHandler.cs b/Runtime/Serie/Radar/RadarHandler.cs
index 97158704..4710a1e0 100644
--- a/Runtime/Serie/Radar/RadarHandler.cs
+++ b/Runtime/Serie/Radar/RadarHandler.cs
@@ -173,7 +173,7 @@ namespace XCharts.Runtime
for (int i = 0; i < serie.data.Count; i++)
{
var serieData = serie.data[i];
- var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
+ var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize);
if (Vector3.Distance(chart.pointerPos, serieData.context.position) < size * 2)
{
serie.context.pointerEnter = true;
@@ -334,7 +334,7 @@ namespace XCharts.Runtime
var symbolSize = 0f;
if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration))
{
- symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, serieState);
+ symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, serieState);
serieData.interact.SetValue(ref interacting, symbolSize);
symbolSize = serie.animation.GetSysmbolSize(symbolSize);
}
@@ -481,7 +481,7 @@ namespace XCharts.Runtime
var serieData = serie.data[j];
if (!serieData.show) continue;
var state = SerieHelper.GetSerieState(serie, serieData);
- var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state);
+ var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, state);
var colorIndex = serie.colorByData ? serieData.index : serie.context.colorIndex;
SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, colorIndex, state);
SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state);
diff --git a/Runtime/Serie/Scatter/BaseScatterHandler.cs b/Runtime/Serie/Scatter/BaseScatterHandler.cs
index c56db250..bf611e31 100644
--- a/Runtime/Serie/Scatter/BaseScatterHandler.cs
+++ b/Runtime/Serie/Scatter/BaseScatterHandler.cs
@@ -81,7 +81,7 @@ namespace XCharts.Runtime
for (int i = serie.dataCount - 1; i >= 0; i--)
{
var serieData = serie.data[i];
- var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
+ var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize);
if (m_LegendEnter ||
(!needHideAll && Vector3.Distance(serieData.context.position, chart.pointerPos) <= symbolSize))
{
@@ -94,7 +94,7 @@ namespace XCharts.Runtime
serieData.context.highlight = false;
}
var state = SerieHelper.GetSerieState(serie, serieData, true);
- symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
+ symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
serieData.interact.SetValue(ref needInteract, symbolSize);
}
if (needInteract)
@@ -179,7 +179,7 @@ namespace XCharts.Runtime
var symbolSize = 0f;
if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration))
{
- symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.scatterSymbolSize, state);
+ symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.scatterSymbolSize, state);
serieData.interact.SetValue(ref interacting, symbolSize);
}
@@ -283,7 +283,7 @@ namespace XCharts.Runtime
serieData.context.position = pos;
var datas = serieData.data;
- var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.scatterSymbolSize, state);
+ var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.scatterSymbolSize, state);
symbolSize *= rate;
if (isEffectScatter)
diff --git a/Runtime/Serie/SerieHelper.cs b/Runtime/Serie/SerieHelper.cs
index 50ea076b..9c351243 100644
--- a/Runtime/Serie/SerieHelper.cs
+++ b/Runtime/Serie/SerieHelper.cs
@@ -673,7 +673,7 @@ namespace XCharts.Runtime
}
}
- public static float GetSysmbolSize(Serie serie, SerieData serieData, ThemeStyle theme, float defaultSize, SerieState state = SerieState.Auto)
+ public static float GetSysmbolSize(Serie serie, SerieData serieData, float defaultSize, SerieState state = SerieState.Auto)
{
if (serie == null) return defaultSize;
if (state == SerieState.Auto)
diff --git a/Runtime/Theme/SerieTheme.cs b/Runtime/Theme/SerieTheme.cs
index a6e6f478..e41f052a 100644
--- a/Runtime/Theme/SerieTheme.cs
+++ b/Runtime/Theme/SerieTheme.cs
@@ -9,8 +9,6 @@ namespace XCharts.Runtime
[SerializeField] protected float m_LineWidth;
[SerializeField] protected float m_LineSymbolSize;
[SerializeField] protected float m_ScatterSymbolSize;
- [SerializeField] protected float m_PieTooltipExtraRadius;
- [SerializeField] protected float m_PieSelectedOffset;
[SerializeField] protected Color32 m_CandlestickColor = new Color32(235, 84, 84, 255);
[SerializeField] protected Color32 m_CandlestickColor0 = new Color32(71, 178, 98, 255);
[SerializeField] protected float m_CandlestickBorderWidth = 1;
@@ -45,24 +43,6 @@ namespace XCharts.Runtime
set { if (PropertyUtil.SetStruct(ref m_ScatterSymbolSize, value)) SetVerticesDirty(); }
}
///
- /// the extra radius of pie when actived by tooltip.
- /// |饼图鼠标移到高亮时的额外半径
- ///
- public float pieTooltipExtraRadius
- {
- get { return m_PieTooltipExtraRadius; }
- set { if (PropertyUtil.SetStruct(ref m_PieTooltipExtraRadius, value < 0 ? 0f : value)) SetVerticesDirty(); }
- }
- ///
- /// the center offset of pie if selected.
- /// |饼图选中时的中心点偏移。
- ///
- public float pieSelectedOffset
- {
- get { return m_PieSelectedOffset; }
- set { if (PropertyUtil.SetStruct(ref m_PieSelectedOffset, value < 0 ? 0f : value)) SetVerticesDirty(); }
- }
- ///
/// K线图阳线(涨)填充色
///
public Color32 candlestickColor
@@ -109,8 +89,6 @@ namespace XCharts.Runtime
m_LineWidth = theme.lineWidth;
m_LineSymbolSize = theme.lineSymbolSize;
m_ScatterSymbolSize = theme.scatterSymbolSize;
- m_PieTooltipExtraRadius = theme.pieTooltipExtraRadius;
- m_PieSelectedOffset = theme.pieSelectedOffset;
m_CandlestickColor = theme.candlestickColor;
m_CandlestickColor0 = theme.candlestickColor0;
m_CandlestickBorderColor = theme.candlestickBorderColor;
@@ -123,8 +101,6 @@ namespace XCharts.Runtime
m_LineWidth = XCSettings.serieLineWidth;
m_LineSymbolSize = XCSettings.serieLineSymbolSize;
m_ScatterSymbolSize = XCSettings.serieScatterSymbolSize;
- m_PieTooltipExtraRadius = XCSettings.pieTooltipExtraRadius;
- m_PieSelectedOffset = XCSettings.pieSelectedOffset;
m_CandlestickBorderWidth = XCSettings.serieCandlestickBorderWidth;
switch (theme)
{