修复Tooltip在特殊情况下可能会超出屏幕显示不完整的问题

This commit is contained in:
monitor1394
2024-11-26 23:18:49 +08:00
parent 756df47fe3
commit d5647a448d
3 changed files with 16 additions and 3 deletions

View File

@@ -77,6 +77,7 @@ slug: /changelog
## master
* (2024.11.26) 修复`Tooltip`在特殊情况下可能会超出屏幕显示不完整的问题
* (2024.11.24) 修复`UITable`在拖拽时也会点选的问题
* (2024.11.22) 修复`Time`时间轴在开启`Animation`时动态变更效果异常的问题
* (2024.11.18) 优化`Line`在数据点过密时有更好的绘制效果

View File

@@ -546,7 +546,7 @@ namespace XCharts.Runtime
tooltip.SetActive(m_ShowTooltip);
tooltip.view.Refresh();
TooltipHelper.LimitInRect(tooltip, chart.chartRect);
TooltipHelper.LimitInRect(chart, tooltip, chart.chartRect);
return true;
}
@@ -633,7 +633,7 @@ namespace XCharts.Runtime
tooltip.SetActive(m_ShowTooltip);
if (tooltip.view != null)
tooltip.view.Refresh();
TooltipHelper.LimitInRect(tooltip, chart.chartRect);
TooltipHelper.LimitInRect(chart, tooltip, chart.chartRect);
return true;
}
return false;

View File

@@ -58,7 +58,7 @@ namespace XCharts.Runtime
return "-".Equals(itemFormatter) ||"{i}".Equals(itemFormatter, StringComparison.CurrentCultureIgnoreCase);
}
public static void LimitInRect(Tooltip tooltip, Rect chartRect)
public static void LimitInRect(BaseChart chart, Tooltip tooltip, Rect chartRect)
{
if (tooltip.view == null)
return;
@@ -78,6 +78,18 @@ namespace XCharts.Runtime
}
if (pos.y > chartRect.y + chartRect.height)
pos.y = chartRect.y + chartRect.height;
var screenGap = 10;
var screenPos = chart.LocalPointToScreenPoint(pos);
if (screenPos.x < screenGap)
pos.x += Mathf.Abs(screenPos.x) + screenGap;
if (screenPos.x + tooltip.context.width > Screen.width - screenGap)
pos.x -= Mathf.Abs(screenPos.x + tooltip.context.width - Screen.width) + screenGap;
if (screenPos.y < tooltip.context.height + screenGap)
pos.y += Mathf.Abs(screenPos.y - tooltip.context.height) + screenGap;
if (screenPos.y > Screen.height - screenGap)
pos.y -= Mathf.Abs(screenPos.y - Screen.height) + screenGap;
tooltip.UpdateContentPos(pos, chartRect.width / 2, chartRect.height / 2);
}