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(); } } } }