private void ExecuteKeyboard(KeyEventArgs keyboardEvent) { var endingPosition = algorithm.GetSelectionPosition(keyboardEvent); if (!selectionView.HasSelection()) { selectionView.Select(new TextPosition(column: caretView.CaretPosition.Column, line: caretView.CaretPosition.Line)); } selectionView.Select(endingPosition); caretView.MoveCursor(endingPosition); }
public void Execute(object parameter) { var keyboardEvent = parameter as KeyEventArgs; var mouseEvent = parameter as MouseButtonEventArgs; TextPosition newPos = null; if (keyboardEvent != null) { newPos = caretView.GetNextPosition(keyboardEvent.Key); keyboardEvent.Handled = true; } else if (mouseEvent != null) { newPos = mouseEvent.GetPosition(caretView).GetDocumentPosition(TextConfiguration.GetCharSize()); } if (newPos == null) { return; } int column = -1, line = -1; if (newPos.Column > textViewReader.GetLineLength(newPos.Line)) { column = textViewReader.GetLineLength(newPos.Line); } if (newPos.Line >= textViewReader.LinesCount) { line = textViewReader.LinesCount - 1; } var moveDir = GetMoveDirection(newPos, caretView.CaretPosition); newPos = new TextPosition(column > -1 ? column : newPos.Column, line > -1 ? line : newPos.Line); newPos = textViewReader.AdjustStep(newPos, moveDir); caretView.MoveCursor(newPos); }