|
|
|
@ -25,7 +25,8 @@ namespace Avalonia.Controls.DragDrop |
|
|
|
private IDataObject _draggedData; |
|
|
|
private IInputElement _lastRoot; |
|
|
|
private Point _lastPosition; |
|
|
|
private object _lastCursor; |
|
|
|
private StandardCursorType _lastCursorType; |
|
|
|
private object _originalCursor; |
|
|
|
private InputModifiers? _initialInputModifiers; |
|
|
|
|
|
|
|
public DragSource() |
|
|
|
@ -81,15 +82,15 @@ namespace Avalonia.Controls.DragDrop |
|
|
|
return DragDropEffects.Move; |
|
|
|
} |
|
|
|
|
|
|
|
private Cursor GetCursorForDropEffect(DragDropEffects effects) |
|
|
|
private StandardCursorType GetCursorForDropEffect(DragDropEffects effects) |
|
|
|
{ |
|
|
|
if (effects.HasFlag(DragDropEffects.Copy)) |
|
|
|
return new Cursor(StandardCursorType.DragCopy); |
|
|
|
return StandardCursorType.DragCopy; |
|
|
|
if (effects.HasFlag(DragDropEffects.Move)) |
|
|
|
return new Cursor(StandardCursorType.DragMove); |
|
|
|
return StandardCursorType.DragMove; |
|
|
|
if (effects.HasFlag(DragDropEffects.Link)) |
|
|
|
return new Cursor(StandardCursorType.DragLink); |
|
|
|
return new Cursor(StandardCursorType.No); |
|
|
|
return StandardCursorType.DragLink; |
|
|
|
return StandardCursorType.No; |
|
|
|
} |
|
|
|
|
|
|
|
private void UpdateCursor(IInputElement root, DragDropEffects effect) |
|
|
|
@ -98,27 +99,35 @@ namespace Avalonia.Controls.DragDrop |
|
|
|
{ |
|
|
|
if (_lastRoot is InputElement ieLast) |
|
|
|
{ |
|
|
|
if (_lastCursor == AvaloniaProperty.UnsetValue) |
|
|
|
if (_originalCursor == AvaloniaProperty.UnsetValue) |
|
|
|
ieLast.ClearValue(InputElement.CursorProperty); |
|
|
|
else |
|
|
|
ieLast.Cursor = _lastCursor as Cursor; |
|
|
|
ieLast.Cursor = _originalCursor as Cursor; |
|
|
|
} |
|
|
|
|
|
|
|
if (root is InputElement ieNew) |
|
|
|
{ |
|
|
|
if (!ieNew.IsSet(InputElement.CursorProperty)) |
|
|
|
_lastCursor = AvaloniaProperty.UnsetValue; |
|
|
|
_originalCursor = AvaloniaProperty.UnsetValue; |
|
|
|
else |
|
|
|
_lastCursor = root.Cursor; |
|
|
|
_originalCursor = root.Cursor; |
|
|
|
} |
|
|
|
else |
|
|
|
_lastCursor = null; |
|
|
|
_originalCursor = null; |
|
|
|
|
|
|
|
_lastCursorType = StandardCursorType.Arrow; |
|
|
|
_lastRoot = root; |
|
|
|
} |
|
|
|
|
|
|
|
if (root is InputElement ie) |
|
|
|
ie.Cursor = GetCursorForDropEffect(effect); |
|
|
|
{ |
|
|
|
var ct = GetCursorForDropEffect(effect); |
|
|
|
if (ct != _lastCursorType) |
|
|
|
{ |
|
|
|
_lastCursorType = ct; |
|
|
|
ie.Cursor = new Cursor(ct); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void CancelDragging() |
|
|
|
|