public void Select(Guid id, int selectionStartOffset, int selectionEndOffset)
        {
            if (Selections.Count == 0)
            {
                return;
            }

            if (selectionStartOffset == 0 && selectionEndOffset == 0)
            {
                Selections[id].Lines = null;
                return;
            }

            TextLocation start, end;

            if (selectionStartOffset < selectionEndOffset)
            {
                start = Editor.Document.GetLocation(selectionStartOffset);
                end   = Editor.Document.GetLocation(selectionEndOffset);
            }
            else
            {
                start = Editor.Document.GetLocation(selectionEndOffset);
                end   = Editor.Document.GetLocation(selectionStartOffset);
            }

            var lines = new List <LineSelection>();

            if (start.Line == end.Line)
            {
                //just get that one rectangle
                var startPos = GetVisualPosition(start);
                var endPos   = GetVisualPosition(end);
                int width    = (int)(endPos.X - startPos.X);

                lines.Add(new LineSelection(width, startPos, Selections[id].Color));
            }
            else
            {
                //first line
                var topStartPos = GetVisualPosition(start);
                var topEndPos   = GetVisualPosition(Editor.Document.Lines[start.Line - 1].EndOffset);
                int topWidth    = (int)(topEndPos.X - topStartPos.X);

                lines.Add(new LineSelection(topWidth, topStartPos, Selections[id].Color));

                //last line
                var bottomStartPos = GetVisualPosition(Editor.Document.Lines[end.Line - 1].Offset);
                var bottomEndPos   = GetVisualPosition(end);
                int bottomWidth    = (int)(bottomEndPos.X - bottomStartPos.X);

                lines.Add(new LineSelection(bottomWidth, bottomStartPos, Selections[id].Color));

                for (int i = start.Line; i < end.Line - 1; i++)
                {
                    int offset    = Editor.TextArea.Document.Lines[i].Offset;
                    int endOffset = Editor.TextArea.Document.Lines[i].EndOffset;
                    var lineStart = GetVisualPosition(offset);
                    var lineEnd   = GetVisualPosition(endOffset);
                    int width     = (int)(lineEnd.X - lineStart.X);

                    var lineSelection = new LineSelection(width, lineStart, Selections[id].Color);
                    lines.Add(lineSelection);
                }
            }

            Selections[id].Lines = lines;
        }
Beispiel #2
0
 private static void AdjustLine(LineSelection line)
 {
     Canvas.SetLeft(line.Box, line.Position.X);
     Canvas.SetTop(line.Box, line.Position.Y);
 }