Пример #1
0
        static void MoveCaret(TextArea textArea, CaretMovementType direction)
        {
            DocumentLine     caretLine     = textArea.Document.GetLineByNumber(textArea.Caret.Line);
            VisualLine       visualLine    = textArea.TextView.GetOrConstructVisualLine(caretLine);
            TextViewPosition caretPosition = textArea.Caret.Position;
            TextLine         textLine      = visualLine.GetTextLine(caretPosition.VisualColumn);

            switch (direction)
            {
            case CaretMovementType.CharLeft:
                MoveCaretLeft(textArea, caretPosition, visualLine, CaretPositioningMode.Normal);
                break;

            case CaretMovementType.CharRight:
                MoveCaretRight(textArea, caretPosition, visualLine, CaretPositioningMode.Normal);
                break;

            case CaretMovementType.WordLeft:
                MoveCaretLeft(textArea, caretPosition, visualLine, CaretPositioningMode.WordStart);
                break;

            case CaretMovementType.WordRight:
                MoveCaretRight(textArea, caretPosition, visualLine, CaretPositioningMode.WordStart);
                break;

            case CaretMovementType.LineUp:
            case CaretMovementType.LineDown:
            case CaretMovementType.PageUp:
            case CaretMovementType.PageDown:
                MoveCaretUpDown(textArea, direction, visualLine, textLine, caretPosition.VisualColumn);
                break;

            case CaretMovementType.DocumentStart:
                SetCaretPosition(textArea, 0, 0);
                break;

            case CaretMovementType.DocumentEnd:
                SetCaretPosition(textArea, -1, textArea.Document.TextLength);
                break;

            case CaretMovementType.LineStart:
                MoveCaretToStartOfLine(textArea, visualLine);
                break;

            case CaretMovementType.LineEnd:
                MoveCaretToEndOfLine(textArea, visualLine);
                break;

            default:
                throw new NotSupportedException(direction.ToString());
            }
        }
Пример #2
0
        int GetTextLineIndexFromOffset(List <TextLine> textLines, int offset)
        {
            int        lineNumber = TextView.Document.GetLineByOffset(offset).LineNumber;
            VisualLine vl         = TextView.GetVisualLine(lineNumber);

            if (vl != null)
            {
                int      relOffset = offset - vl.FirstDocumentLine.Offset;
                TextLine line      = vl.GetTextLine(vl.GetVisualColumn(relOffset));
                return(textLines.IndexOf(line));
            }
            return(-1);
        }
Пример #3
0
        Rect CalcCaretRectangle(VisualLine visualLine)
        {
            if (!visualColumnValid)
            {
                RevalidateVisualColumn(visualLine);
            }

            TextLine textLine   = visualLine.GetTextLine(position.VisualColumn);
            double   xPos       = textLine.GetDistanceFromCharacterHit(new CharacterHit(position.VisualColumn, 0));
            double   lineTop    = visualLine.GetTextLineVisualYPosition(textLine, VisualYPosition.TextTop);
            double   lineBottom = visualLine.GetTextLineVisualYPosition(textLine, VisualYPosition.LineBottom);

            return(new Rect(xPos,
                            lineTop,
                            SystemParameters.CaretWidth,
                            lineBottom - lineTop));
        }