|
|
|
@ -19,11 +19,11 @@ namespace Avalonia.Input |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
private DragDropEffects RaiseDragEvent(Interactive target, IInputElement inputRoot, Point point, RoutedEvent<DragEventArgs> routedEvent, DragDropEffects operation, IDataObject data) |
|
|
|
private DragDropEffects RaiseDragEvent(Interactive target, IInputElement inputRoot, Point point, RoutedEvent<DragEventArgs> routedEvent, DragDropEffects operation, IDataObject data, InputModifiers modifiers) |
|
|
|
{ |
|
|
|
if (target == null) |
|
|
|
return DragDropEffects.None; |
|
|
|
var args = new DragEventArgs(routedEvent, data, target, inputRoot.TranslatePoint(point, target)) |
|
|
|
var args = new DragEventArgs(routedEvent, data, target, inputRoot.TranslatePoint(point, target), modifiers) |
|
|
|
{ |
|
|
|
RoutedEvent = routedEvent, |
|
|
|
DragEffects = operation |
|
|
|
@ -32,24 +32,24 @@ namespace Avalonia.Input |
|
|
|
return args.DragEffects; |
|
|
|
} |
|
|
|
|
|
|
|
private DragDropEffects DragEnter(IInputElement inputRoot, Point point, IDataObject data, DragDropEffects effects) |
|
|
|
private DragDropEffects DragEnter(IInputElement inputRoot, Point point, IDataObject data, DragDropEffects effects, InputModifiers modifiers) |
|
|
|
{ |
|
|
|
_lastTarget = GetTarget(inputRoot, point); |
|
|
|
return RaiseDragEvent(_lastTarget, inputRoot, point, DragDrop.DragEnterEvent, effects, data); |
|
|
|
return RaiseDragEvent(_lastTarget, inputRoot, point, DragDrop.DragEnterEvent, effects, data, modifiers); |
|
|
|
} |
|
|
|
|
|
|
|
private DragDropEffects DragOver(IInputElement inputRoot, Point point, IDataObject data, DragDropEffects effects) |
|
|
|
private DragDropEffects DragOver(IInputElement inputRoot, Point point, IDataObject data, DragDropEffects effects, InputModifiers modifiers) |
|
|
|
{ |
|
|
|
var target = GetTarget(inputRoot, point); |
|
|
|
|
|
|
|
if (target == _lastTarget) |
|
|
|
return RaiseDragEvent(target, inputRoot, point, DragDrop.DragOverEvent, effects, data); |
|
|
|
return RaiseDragEvent(target, inputRoot, point, DragDrop.DragOverEvent, effects, data, modifiers); |
|
|
|
|
|
|
|
try |
|
|
|
{ |
|
|
|
if (_lastTarget != null) |
|
|
|
_lastTarget.RaiseEvent(new RoutedEventArgs(DragDrop.DragLeaveEvent)); |
|
|
|
return RaiseDragEvent(target, inputRoot, point, DragDrop.DragEnterEvent, effects, data); |
|
|
|
return RaiseDragEvent(target, inputRoot, point, DragDrop.DragEnterEvent, effects, data, modifiers); |
|
|
|
} |
|
|
|
finally |
|
|
|
{ |
|
|
|
@ -71,11 +71,11 @@ namespace Avalonia.Input |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private DragDropEffects Drop(IInputElement inputRoot, Point point, IDataObject data, DragDropEffects effects) |
|
|
|
private DragDropEffects Drop(IInputElement inputRoot, Point point, IDataObject data, DragDropEffects effects, InputModifiers modifiers) |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
return RaiseDragEvent(_lastTarget, inputRoot, point, DragDrop.DropEvent, effects, data); |
|
|
|
return RaiseDragEvent(_lastTarget, inputRoot, point, DragDrop.DropEvent, effects, data, modifiers); |
|
|
|
} |
|
|
|
finally |
|
|
|
{ |
|
|
|
@ -94,16 +94,16 @@ namespace Avalonia.Input |
|
|
|
switch (e.Type) |
|
|
|
{ |
|
|
|
case RawDragEventType.DragEnter: |
|
|
|
e.Effects = DragEnter(e.InputRoot, e.Location, e.Data, e.Effects); |
|
|
|
e.Effects = DragEnter(e.InputRoot, e.Location, e.Data, e.Effects, e.Modifiers); |
|
|
|
break; |
|
|
|
case RawDragEventType.DragOver: |
|
|
|
e.Effects = DragOver(e.InputRoot, e.Location, e.Data, e.Effects); |
|
|
|
e.Effects = DragOver(e.InputRoot, e.Location, e.Data, e.Effects, e.Modifiers); |
|
|
|
break; |
|
|
|
case RawDragEventType.DragLeave: |
|
|
|
DragLeave(e.InputRoot); |
|
|
|
break; |
|
|
|
case RawDragEventType.Drop: |
|
|
|
e.Effects = Drop(e.InputRoot, e.Location, e.Data, e.Effects); |
|
|
|
e.Effects = Drop(e.InputRoot, e.Location, e.Data, e.Effects, e.Modifiers); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|