protected void DragMouseDelta(double dx, double dy)
{
IInputElement res = _mainWin.InputHitTest(Mouse.GetPosition(_mainWin));
// Raise CardOverEvent
if (res != null)
{
foreach (CardDragAdorner overlay in OverlayElements) overlay.OnHoverRequestInverted = false;
var overArgs = new CardsEventArgs(Card, DraggedCards, CardOverEvent, this) { MouseOffset = _mouseOffset, Adorners = OverlayElements };
res.RaiseEvent(overArgs);
// Collapse/Expand multiple cards when inside/outside of table
DragCollapseSelection(_lastDragTarget, overArgs.Handler);
// Keep track of previous target and raise CardOutEvent
if (overArgs.Handler != _lastDragTarget && _lastDragTarget != null)
_lastDragTarget.RaiseEvent(new CardsEventArgs(Card, DraggedCards, CardOutEvent, this));
_lastDragTarget = overArgs.Handler;
if (overArgs.CanDrop)
{
if (!overArgs.FaceUp.HasValue)
overArgs.FaceUp = (Keyboard.Modifiers & ModifierKeys.Shift) == 0;
try
{
foreach (CardDragAdorner overlay in OverlayElements)
{
var crd = overArgs.Cards.IndexOf(overArgs.Cards.FirstOrDefault(x => x.Id == overlay.SourceCard.Card.Id));
overlay.SetState(dx, dy, true, overArgs.CardSizes[crd], overArgs.FaceUp.Value, overlay.OnHoverRequestInverted);
}
}
catch (Exception e)
{
Log.Info("DragMouseDelta", e);
}
return;
}
}
else if (_lastDragTarget != null)
{
_lastDragTarget.RaiseEvent(new CardsEventArgs(Card, DraggedCards, CardOutEvent, this));
_lastDragTarget = null;
}
// Update the visual feedback (can't drop)
foreach (CardDragAdorner overlay in OverlayElements)
overlay.SetState(dx, dy, false, Size.Empty, false, false);
}