public void UpdatePastePoint(Point newMousePosition, Point mouseDelta)
        {
            if (!Chords.Any())
            {
                return;
            }

            var mouseString = Owner.SnapToString(newMousePosition.Y);

            var offset = new Point(FirstChordOffset.X - mousePointBegin.X, mouseStringBegin - MinSelectionString);


            if (Owner.GridSnap)
            {
                var screenPoint = Owner.GetClientPointFromTick(Chords.GetTickPair());

                var offsetPointLeft  = new Point(newMousePosition.X + offset.X, mouseString - offset.Y);
                var offsetPointRight = new Point(newMousePosition.X + offset.X + screenPoint.TickLength, mouseString - offset.Y);

                int snapLeft;
                var snappedLeft = Owner.GetGridSnapPointFromClientPoint(offsetPointLeft, out snapLeft);
                int snapRight;
                var snappedRight = Owner.GetGridSnapPointFromClientPoint(offsetPointRight, out snapRight);

                if (snappedLeft && snappedRight)
                {
                    if (mouseDelta.X < 0)// Math.Abs(offsetPointLeft.X - snapLeft) < Math.Abs(offsetPointRight.X - snapRight))
                    {
                        newMousePosition.X = snapLeft - offset.X;
                    }
                    else
                    {
                        newMousePosition.X = snapRight - screenPoint.TickLength - offset.X;
                    }
                }
                else if (snappedLeft)
                {
                    newMousePosition.X = snapLeft - offset.X;
                }
                else if (snappedRight)
                {
                    newMousePosition.X = snapRight - screenPoint.TickLength - offset.X;
                }
            }


            Owner.CurrentPastePoint.MousePos      = new Point(newMousePosition.X, mouseString);
            Owner.CurrentPastePoint.MinChordX     = newMousePosition.X;
            Owner.CurrentPastePoint.Offset        = offset;
            Owner.CurrentPastePoint.MinNoteString = MinSelectionString;

            var pastePoint = Owner.CurrentPastePoint;
            var copyRange  = Chords.GetTickPair();

            var stringOffset = (pastePoint.MousePos.Y) - pastePoint.MinNoteString - pastePoint.Offset.Y;

            var startTick = Owner.GetTickFromClientPoint(pastePoint.MousePos.X + pastePoint.Offset.X);

            var pasteRange = new TickPair(startTick, startTick + copyRange.TickLength);

            var copyTime = Owner.GuitarTrack.TickToTime(copyRange);

            var pasteTime = Owner.GuitarTrack.TickToTime(pasteRange);

            pasteTime.TimeLength = copyTime.TimeLength;
            pasteRange.Up        = Owner.GuitarTrack.TimeToTick(pasteTime.Up);

            pasteRange = Owner.SnapTickPairPro(pasteRange);

            foreach (var c in Chords)
            {
                var noteTime = Owner.GuitarTrack.TickToTime(c.TickPair);

                var delta = noteTime.Down - copyTime.Down;

                var startEndTick = new TickPair(
                    Owner.GuitarTrack.TimeToTick(pasteTime.Down + delta),
                    Owner.GuitarTrack.TimeToTick(pasteTime.Down + delta + c.TimeLength));

                c.SetTicks(startEndTick);
            }
        }