using System;
using UnityEngine.UIElements;
namespace RosettaUI.UIToolkit
{
///
/// 範囲外でのドラッグを検知するためのユーティリティ
///
public static class PointerDrag
{
public static void RegisterCallback(VisualElement target,
EventCallback onPointerMoveOnPanel,
EventCallback onPointerUpOnPanel = null,
Func checkPointerIsValid = null,
bool callMoveEventOnPointerDown = false)
{
VisualElement root;
target.RegisterCallback((evt) =>
{
if (checkPointerIsValid?.Invoke(evt) ?? true)
{
root = target.panel.visualTree;
root.RegisterCallback(onPointerMoveOnPanel);
root.RegisterCallback(OnPointerUpOnPanel);
if (callMoveEventOnPointerDown)
{
onPointerMoveOnPanel?.Invoke( PointerMoveEvent.GetPooled(evt));
}
evt.StopPropagation();
}
});
return;
void OnPointerUpOnPanel(PointerUpEvent evt)
{
onPointerUpOnPanel?.Invoke(evt);
root.UnregisterCallback(onPointerMoveOnPanel);
root.UnregisterCallback(OnPointerUpOnPanel);
evt.StopPropagation();
}
}
}
}