public static MouseLocation Create(IWpfTextView wpfTextView, MouseEventArgs e, bool insertionPosition) {
ITextViewLine textViewLine;
VirtualSnapshotPoint position;
var point = GetTextPoint(wpfTextView, e);
var line = wpfTextView.TextViewLines.GetTextViewLineContainingYCoordinate(point.Y);
if (line != null)
textViewLine = line;
else if (point.Y <= wpfTextView.ViewportTop)
textViewLine = wpfTextView.TextViewLines.FirstVisibleLine;
else
textViewLine = wpfTextView.TextViewLines.LastVisibleLine;
if (insertionPosition)
position = textViewLine.GetInsertionBufferPositionFromXCoordinate(point.X);
else
position = textViewLine.GetVirtualBufferPositionFromXCoordinate(point.X);
return new MouseLocation(textViewLine, position, point);
}