public IDisposable CaptureMouse(Action <MouseEventArgs> onMouseMove, Action <MouseButtonEventArgs> onMouseLeftButtonUp, Action onLostMouseCapture, Cursor cursor = null) { _currentCapture = _currentCapture?.DisposeExchange(); var canvas = _canvasPool.GetObject(); canvas.Cursor = cursor; var isCaptured = canvas.CaptureMouse(); if (isCaptured == false) { return(null); } var dragProxyImpl = new DragProxyImpl(canvas, onMouseMove, onMouseLeftButtonUp, d => { _canvasPool.Release(d.Canvas); if (ReferenceEquals(_currentCapture, d)) { onLostMouseCapture(); } }, OnDisposed); return(_currentCapture = dragProxyImpl); }
private void OnDisposed(DragProxyImpl proxy) { if (ReferenceEquals(proxy, _currentCapture) == false) { return; } _currentCapture = null; proxy.Canvas.ReleaseMouseCapture(); }