Octgn.Play.Gui.CardControl.DragMouseDelta C# (CSharp) Method

DragMouseDelta() protected method

protected DragMouseDelta ( double dx, double dy ) : void
dx double
dy double
return void
        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);
        }