修复运行时框选绘制覆盖层太多的问题,修复事件层太靠上导致预制体收不到事件的问题

This commit is contained in:
2026-07-29 15:46:39 +08:00
parent 71f5004484
commit c5fa82150f
6 changed files with 78 additions and 91 deletions
@@ -0,0 +1,39 @@
using UnityEngine;
using UnityEngine.EventSystems;
namespace XericUI.XTable.Rendering.Component
{
[RequireComponent(typeof(RectTransform))]
internal sealed class XTableSelectionInput : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler, IEndDragHandler
{
private XericUIActionTable m_Table;
private bool m_Dragging;
internal void Configure(XericUIActionTable table) => m_Table = table;
public void OnPointerDown(PointerEventData eventData)
{
if (m_Table == null || !m_Table.TryGetCellFromScreenPoint((RectTransform)transform, eventData.position,
eventData.pressEventCamera, true, out int row, out int col)) return;
m_Dragging = true;
m_Table.BeginSelection(row, col);
}
public void OnDrag(PointerEventData eventData)
{
if (!m_Dragging || m_Table == null) return;
m_Table.UpdateSelectionDrag((RectTransform)transform, eventData.position, eventData.pressEventCamera);
}
public void OnPointerUp(PointerEventData eventData) => EndSelection();
public void OnEndDrag(PointerEventData eventData) => EndSelection();
private void OnDisable() => EndSelection();
private void EndSelection()
{
if (!m_Dragging) return;
m_Dragging = false;
m_Table?.EndSelection();
}
}
}