修复运行时框选绘制覆盖层太多的问题,修复事件层太靠上导致预制体收不到事件的问题
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user