增加TooltipitemFormatter\n换行的支持

This commit is contained in:
monitor1394
2025-02-19 22:52:38 +08:00
parent 9ddc543ed7
commit a54c50d947
7 changed files with 282 additions and 157 deletions

View File

@@ -79,6 +79,7 @@ slug: /changelog
## master
* (2025.02.19) 增加`Tooltip``itemFormatter``\n`换行的支持
* (2025.02.18) 优化`Tooltip`的对齐方式
* (2025.02.09) 修复`SaveAsImage`保存图片时不支持透明度的问题 (#337)
* (2025.02.05) 增加`GraphChart`可单独设置`data`样式的支持

View File

@@ -33,37 +33,19 @@ namespace XCharts.Runtime
var newMarker = SerieHelper.GetItemMarker(serie, serieData, marker);
var newItemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
var newNumericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
var isEmptyItemFormatter = string.IsNullOrEmpty(newItemFormatter);
var param = serie.context.param;
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.category = category;
param.dimension = 1;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = 0;
param.total = 0;
param.color = color;
param.marker = newMarker;
param.itemFormatter = newItemFormatter;
param.numericFormatter = newNumericFormatter;
param.columns.Clear();
param.columns.Add(param.marker);
param.columns.Add(serie.serieName);
param.columns.Add(string.Empty);
paramList.Add(param);
for (int i = 1; i < 5; i++)
if (isEmptyItemFormatter)
{
param = new SerieParams();
var param = serie.context.param;
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.dimension = i;
param.category = category;
param.dimension = 1;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(i);
param.total = SerieHelper.GetMaxData(serie, i);
param.value = 0;
param.total = 0;
param.color = color;
param.marker = newMarker;
param.itemFormatter = newItemFormatter;
@@ -71,10 +53,56 @@ namespace XCharts.Runtime
param.columns.Clear();
param.columns.Add(param.marker);
param.columns.Add(XCSettings.lang.GetCandlestickDimensionName(i - 1));
param.columns.Add(ChartCached.NumberToStr(param.value, param.numericFormatter));
param.columns.Add(serie.serieName);
param.columns.Add(string.Empty);
paramList.Add(param);
for (int i = 1; i < 5; i++)
{
param = new SerieParams();
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.dimension = i;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(i);
param.total = SerieHelper.GetMaxData(serie, i);
param.color = color;
param.marker = newMarker;
param.itemFormatter = newItemFormatter;
param.numericFormatter = newNumericFormatter;
param.isSecondaryMark = true;
param.columns.Clear();
param.columns.Add(param.marker);
param.columns.Add(XCSettings.lang.GetCandlestickDimensionName(i - 1));
param.columns.Add(ChartCached.NumberToStr(param.value, param.numericFormatter));
paramList.Add(param);
}
}
else
{
newItemFormatter = newItemFormatter.Replace("\\n", "\n");
var temp = newItemFormatter.Split('\n');
foreach (var str in temp)
{
var param = new SerieParams();
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.category = category;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = 0;
param.total = 0;
param.color = color;
param.marker = newMarker;
param.itemFormatter = str;
param.numericFormatter = newNumericFormatter;
param.isSecondaryMark = false;
param.columns.Clear();
paramList.Add(param);
}
}
}

View File

@@ -59,24 +59,36 @@ namespace XCharts.Runtime
var dimension = VisualMapHelper.GetDimension(visualMap, defaultDimension);
title = serie.serieName;
itemFormatter = SerieHelper.GetItemFormatter(serie, null, itemFormatter);
numericFormatter = SerieHelper.GetNumericFormatter(serie, null, numericFormatter);
marker = SerieHelper.GetItemMarker(serie, null, marker);
var color = visualMap.GetColor(value);
var param = serie.context.param;
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.dimension = dimension;
param.dataCount = serie.dataCount;
param.serieData = null;
param.color = visualMap.GetColor(value);
param.marker = SerieHelper.GetItemMarker(serie, null, marker);
param.itemFormatter = SerieHelper.GetItemFormatter(serie, null, itemFormatter);
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, null, numericFormatter);
param.columns.Clear();
if (itemFormatter == null) itemFormatter = "";
itemFormatter = itemFormatter.Replace("\\n", "\n");
var temp = itemFormatter.Split('\n');
for (int i = 0; i < temp.Length; i++)
{
var formatter = temp[i];
var param = i == 0 ? serie.context.param : new SerieParams();
param.columns.Add(param.marker);
param.columns.Add("count");
param.columns.Add(ChartCached.NumberToStr(value, param.numericFormatter));
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.dimension = dimension;
param.dataCount = serie.dataCount;
param.serieData = null;
param.color = color;
param.marker = marker;
param.itemFormatter = formatter;
param.numericFormatter = numericFormatter;
param.columns.Clear();
paramList.Add(param);
param.columns.Add(param.marker);
param.columns.Add("count");
param.columns.Add(ChartCached.NumberToStr(value, param.numericFormatter));
paramList.Add(param);
}
}
else
{
@@ -96,24 +108,35 @@ namespace XCharts.Runtime
category = xAxis.GetData((int)serieData.GetData(0));
}
title = serie.serieName;
itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
marker = SerieHelper.GetItemMarker(serie, serieData, marker);
var param = serie.context.param;
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.dimension = dimension;
param.dataCount = serie.dataCount;
param.serieData = serieData;
param.color = serieData.context.color;
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
param.columns.Clear();
if (itemFormatter == null) itemFormatter = "";
itemFormatter = itemFormatter.Replace("\\n", "\n");
var temp = itemFormatter.Split('\n');
for (int i = 0; i < temp.Length; i++)
{
var formatter = temp[i];
var param = i == 0 ? serie.context.param : new SerieParams();
param.columns.Add(param.marker);
param.columns.Add(category);
param.columns.Add(ChartCached.NumberToStr(serieData.GetData(dimension), param.numericFormatter));
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.dimension = dimension;
param.dataCount = serie.dataCount;
param.serieData = serieData;
param.color = serieData.context.color;
param.marker = marker;
param.itemFormatter = formatter;
param.numericFormatter = numericFormatter;
param.columns.Clear();
paramList.Add(param);
param.columns.Add(param.marker);
param.columns.Add(category);
param.columns.Add(ChartCached.NumberToStr(serieData.GetData(dimension), param.numericFormatter));
paramList.Add(param);
}
}
}
@@ -236,7 +259,7 @@ namespace XCharts.Runtime
var xValue = serieData.GetData(0);
var yValue = serieData.GetData(1);
var i = AxisHelper.GetAxisValueSplitIndex(xAxis, xValue, true, xCount);
var j = AxisHelper.GetAxisValueSplitIndex(yAxis, yValue,true, yCount);
var j = AxisHelper.GetAxisValueSplitIndex(yAxis, yValue, true, yCount);
if (serie.IsIgnoreValue(serieData, dimension))
{
@@ -368,7 +391,7 @@ namespace XCharts.Runtime
var xValue = serieData.GetData(0);
var yValue = serieData.GetData(1);
var i = AxisHelper.GetAxisValueSplitIndex(xAxis, xValue, true, xCount);
var j = AxisHelper.GetAxisValueSplitIndex(yAxis, yValue,true, yCount);
var j = AxisHelper.GetAxisValueSplitIndex(yAxis, yValue, true, yCount);
var key = GetGridKey(i, j);
var count = 0;

View File

@@ -59,31 +59,63 @@ namespace XCharts.Runtime
var colorIndex = serie.colorByData ? chart.GetLegendRealShowNameIndex(serieData.legendName) : serie.context.colorIndex;
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal);
title = serieData.name;
for (int i = 0; i < serieData.data.Count; i++)
itemFormatter = SerieHelper.GetItemFormatter(serie, null, itemFormatter);
numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
marker = SerieHelper.GetItemMarker(serie, serieData, marker);
if (string.IsNullOrEmpty(itemFormatter))
{
var indicator = radar.GetIndicator(i);
if (indicator == null) continue;
for (int i = 0; i < serieData.data.Count; i++)
{
var indicator = radar.GetIndicator(i);
if (indicator == null) continue;
var param = new SerieParams();
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.dimension = i;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(i);
param.total = indicator.max;
param.color = color;
param.category = radar.GetIndicatorName(i);
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
param.columns.Clear();
var param = new SerieParams();
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.dimension = i;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(i);
param.total = indicator.max;
param.color = color;
param.category = radar.GetIndicatorName(i);
param.marker = marker;
param.itemFormatter = itemFormatter;
param.numericFormatter = numericFormatter;
param.columns.Clear();
param.columns.Add(param.marker);
param.columns.Add(indicator.name);
param.columns.Add(ChartCached.NumberToStr(serieData.GetData(i), param.numericFormatter));
param.columns.Add(param.marker);
param.columns.Add(indicator.name);
param.columns.Add(ChartCached.NumberToStr(serieData.GetData(i), param.numericFormatter));
paramList.Add(param);
paramList.Add(param);
}
}
else
{
itemFormatter = itemFormatter.Replace("\\n", "\n");
var temp = itemFormatter.Split('\n');
for (int i = 0; i < temp.Length; i++)
{
var formatter = temp[i];
var param = i == 0 ? serie.context.param : new SerieParams();
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.dimension = i;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(i);
param.total = serie.yTotal;
param.color = color;
param.category = radar.GetIndicatorName(i);
param.marker = marker;
param.itemFormatter = formatter;
param.numericFormatter = numericFormatter;
param.columns.Clear();
paramList.Add(param);
}
}
}
@@ -284,7 +316,7 @@ namespace XCharts.Runtime
}
}
if (max - min == 0) continue;
var radius = (float) (m_RadarCoord.context.dataRadius * (value - min) / (max - min));
var radius = (float)(m_RadarCoord.context.dataRadius * (value - min) / (max - min));
var currAngle = startAngle + (n + (m_RadarCoord.positionType == RadarCoord.PositionType.Between ? 0.5f : 0)) * angle;
radius *= rate;
if (n == 0)
@@ -415,7 +447,7 @@ namespace XCharts.Runtime
{
lineColor = m_RadarCoord.outRangeColor;
}
var radius = (float) (max < 0 ? m_RadarCoord.context.dataRadius - m_RadarCoord.context.dataRadius * value / max :
var radius = (float)(max < 0 ? m_RadarCoord.context.dataRadius - m_RadarCoord.context.dataRadius * value / max :
m_RadarCoord.context.dataRadius * value / max);
var currAngle = startAngle + (index + (m_RadarCoord.positionType == RadarCoord.PositionType.Between ? 0.5f : 0)) * angle;
radius *= rate;

View File

@@ -86,27 +86,37 @@ namespace XCharts.Runtime
return;
Color32 color, toColor;
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, dataIndex);
itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
marker = SerieHelper.GetItemMarker(serie, serieData, marker);
var param = serie.context.param;
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.category = category;
param.dimension = defaultDimension;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(0);
param.total = serieData.GetData(1);
param.color = color;
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
param.columns.Clear();
if (itemFormatter == null) itemFormatter = "";
itemFormatter = itemFormatter.Replace("\\n", "\n");
var temp = itemFormatter.Split('\n');
for (int i = 0; i < temp.Length; i++)
{
var formatter = temp[i];
var param = i == 0 ? serie.context.param : new SerieParams();
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.category = category;
param.dimension = defaultDimension;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(0);
param.total = serieData.GetData(1);
param.color = color;
param.marker = marker;
param.itemFormatter = formatter;
param.numericFormatter = numericFormatter;
param.columns.Clear();
param.columns.Add(param.marker);
param.columns.Add(serieData.name);
param.columns.Add(ChartCached.NumberToStr(param.value, param.numericFormatter));
param.columns.Add(param.marker);
param.columns.Add(serieData.name);
param.columns.Add(ChartCached.NumberToStr(param.value, param.numericFormatter));
paramList.Add(param);
paramList.Add(param);
}
}
private Vector3 GetLabelLineEndPosition(Serie serie, SerieData serieData, LabelLine labelLine)

View File

@@ -29,25 +29,38 @@ namespace XCharts.Runtime
title = serie.serieName;
var param = serie.context.param;
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.category = category;
param.dimension = 1;
param.dataCount = serie.dataCount;
param.serieData = serieData;
param.color = chart.GetMarkColor(serie, serieData);
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
param.columns.Clear();
itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
marker = SerieHelper.GetItemMarker(serie, serieData, marker);
var color = chart.GetMarkColor(serie, serieData);
param.columns.Add(param.marker);
if (!string.IsNullOrEmpty(serieData.name))
param.columns.Add(serieData.name);
param.columns.Add(ChartCached.NumberToStr(serieData.GetData(1), param.numericFormatter));
if (itemFormatter == null) itemFormatter = "";
itemFormatter = itemFormatter.Replace("\\n", "\n");
var temp = itemFormatter.Split('\n');
for (int i = 0; i < temp.Length; i++)
{
var formatter = temp[i];
var param = i == 0 ? serie.context.param : new SerieParams();
paramList.Add(param);
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.category = category;
param.dimension = 1;
param.dataCount = serie.dataCount;
param.serieData = serieData;
param.color = color;
param.marker = marker;
param.itemFormatter = formatter;
param.numericFormatter = numericFormatter;
param.columns.Clear();
param.columns.Add(param.marker);
if (!string.IsNullOrEmpty(serieData.name))
param.columns.Add(serieData.name);
param.columns.Add(ChartCached.NumberToStr(serieData.GetData(1), param.numericFormatter));
paramList.Add(param);
}
}
public override void DrawSerie(VertexHelper vh)

View File

@@ -497,7 +497,7 @@ namespace XCharts.Runtime
{
serieData.SetLabelActive(false);
continue;
};
}
var currLabel = SerieHelper.GetSerieLabel(serie, serieData);
var isIgnore = serie.IsIgnoreIndex(serieData.index, defaultDimension);
if (serie.show &&
@@ -669,28 +669,35 @@ namespace XCharts.Runtime
itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
if (serie.placeHolder || TooltipHelper.IsIgnoreFormatter(itemFormatter))
return;
if (itemFormatter == null) itemFormatter = "";
var newItemFormatter = itemFormatter.Replace("\\n", "\n");
var newNumericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
var temp = newItemFormatter.Split('\n');
for (int i = 0; i < temp.Length; i++)
{
var formatter = temp[i];
var param = i == 0 ? serie.context.param : new SerieParams();
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.category = category;
param.dimension = dimension;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(dimension);
param.ignore = ignore;
param.total = serie.yTotal;
param.color = chart.GetMarkColor(serie, serieData);
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
param.itemFormatter = formatter;
param.numericFormatter = newNumericFormatter;
param.columns.Clear();
var param = serie.context.param;
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.category = category;
param.dimension = dimension;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(dimension);
param.ignore = ignore;
param.total = serie.yTotal;
param.color = chart.GetMarkColor(serie, serieData);
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
param.itemFormatter = itemFormatter;
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
param.columns.Clear();
param.columns.Add(param.marker);
param.columns.Add(showCategory ? category : serie.serieName);
param.columns.Add(ignore ? ignoreDataDefaultContent : ChartCached.NumberToStr(param.value, param.numericFormatter));
param.columns.Add(param.marker);
param.columns.Add(showCategory ? category : serie.serieName);
param.columns.Add(ignore ? ignoreDataDefaultContent : ChartCached.NumberToStr(param.value, param.numericFormatter));
paramList.Add(param);
paramList.Add(param);
}
}
protected void UpdateItemSerieParams(ref List<SerieParams> paramList, ref string title,
@@ -721,29 +728,40 @@ namespace XCharts.Runtime
Color32 color, toColor;
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal);
var param = serie.context.param;
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.category = category;
param.dimension = dimension;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(param.dimension);
param.ignore = ignore;
param.total = serie.multiDimensionLabel ? serieData.GetTotalData() : serie.GetDataTotal(defaultDimension);
param.color = color;
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
param.itemFormatter = itemFormatter;
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
param.columns.Clear();
if (itemFormatter == null) itemFormatter = "";
var newItemFormatter = itemFormatter.Replace("\\n", "\n");
var newNumericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
var temp = newItemFormatter.Split('\n');
var mark = SerieHelper.GetItemMarker(serie, serieData, marker);
var total = serie.multiDimensionLabel ? serieData.GetTotalData() : serie.GetDataTotal(defaultDimension);
for (int i = 0; i < temp.Length; i++)
{
var formatter = temp[i];
var param = i == 0 ? serie.context.param : new SerieParams();
param.serieName = serie.serieName;
param.serieIndex = serie.index;
param.columns.Add(param.marker);
param.columns.Add(serieData.name);
param.category = category;
param.dimension = dimension;
param.serieData = serieData;
param.dataCount = serie.dataCount;
param.value = serieData.GetData(param.dimension);
param.ignore = ignore;
param.total = total;
param.color = color;
param.marker = mark;
param.itemFormatter = formatter;
param.numericFormatter = newNumericFormatter;
param.columns.Clear();
param.columns.Add(ignore ? ignoreDataDefaultContent : ChartCached.NumberToStr(param.value, param.numericFormatter));
param.columns.Add(param.marker);
param.columns.Add(serieData.name);
paramList.Add(param);
param.columns.Add(ignore ? ignoreDataDefaultContent : ChartCached.NumberToStr(param.value, param.numericFormatter));
paramList.Add(param);
}
}
public void DrawLabelLineSymbol(VertexHelper vh, LabelLine labelLine, Vector3 startPos, Vector3 endPos, Color32 defaultColor)