Esempio n. 1
0
        SimpleSegment GetTextLineSegment(MouseEventArgs e)
        {
            Point pos = e.GetPosition(TextView);

            pos.X  = 0;
            pos.Y += TextView.VerticalOffset;
            VisualLine vl = TextView.GetVisualLineFromVisualTop(pos.Y);

            if (vl == null)
            {
                return(SimpleSegment.Invalid);
            }
            TextLine tl = vl.GetTextLineByVisualYPosition(pos.Y);
            int      visualStartColumn = vl.GetTextLineVisualStartColumn(tl);
            int      visualEndColumn   = visualStartColumn + tl.Length;
            int      relStart          = vl.FirstDocumentLine.Offset;
            int      startOffset       = vl.GetRelativeOffset(visualStartColumn) + relStart;
            int      endOffset         = vl.GetRelativeOffset(visualEndColumn) + relStart;

            if (endOffset == vl.LastDocumentLine.Offset + vl.LastDocumentLine.Length)
            {
                endOffset += vl.LastDocumentLine.DelimiterLength;
            }
            return(new SimpleSegment(startOffset, endOffset - startOffset));
        }
Esempio n. 2
0
        static void SetCaretPosition(TextArea textArea, VisualLine targetVisualLine, TextLine targetLine,
                                     CharacterHit ch, bool allowWrapToNextLine)
        {
            int newVisualColumn    = ch.FirstCharacterIndex + ch.TrailingLength;
            int targetLineStartCol = targetVisualLine.GetTextLineVisualStartColumn(targetLine);

            if (!allowWrapToNextLine && newVisualColumn >= targetLineStartCol + targetLine.Length)
            {
                newVisualColumn = targetLineStartCol + targetLine.Length - 1;
            }
            int newOffset = targetVisualLine.GetRelativeOffset(newVisualColumn) + targetVisualLine.FirstDocumentLine.Offset;

            SetCaretPosition(textArea, newVisualColumn, newOffset);
        }