diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs index 2149bdfe03..e1da701371 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs @@ -102,7 +102,7 @@ namespace ICSharpCode.AvalonEdit.Editing /// public TextLocation Location { get { - return position; + return position.Location; } set { this.Position = new TextViewPosition(value); @@ -174,7 +174,7 @@ namespace ICSharpCode.AvalonEdit.Editing if (document == null) { return 0; } else { - return document.GetOffset(position); + return document.GetOffset(position.Location); } } set { @@ -279,7 +279,7 @@ namespace ICSharpCode.AvalonEdit.Editing // mark column as validated visualColumnValid = true; - int caretOffset = textView.Document.GetOffset(position); + int caretOffset = textView.Document.GetOffset(position.Location); int firstDocumentLineOffset = visualLine.FirstDocumentLine.Offset; position.VisualColumn = visualLine.ValidateVisualColumn(position, textArea.Selection.EnableVirtualSpace); diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs index c201780ead..387ae39560 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs @@ -45,8 +45,8 @@ namespace ICSharpCode.AvalonEdit.Editing this.endLine = end.Line; this.startXPos = GetXPos(textArea, start); this.endXPos = GetXPos(textArea, end); - this.startOffset = document.GetOffset(start); - this.endOffset = document.GetOffset(end); + this.startOffset = document.GetOffset(start.Location); + this.endOffset = document.GetOffset(end.Location); CalculateSegments(); } @@ -59,7 +59,7 @@ namespace ICSharpCode.AvalonEdit.Editing this.startXPos = startXPos; this.endXPos = GetXPos(textArea, end); this.startOffset = startOffset; - this.endOffset = document.GetOffset(end); + this.endOffset = document.GetOffset(end.Location); CalculateSegments(); } @@ -71,7 +71,7 @@ namespace ICSharpCode.AvalonEdit.Editing this.endLine = endLine; this.startXPos = GetXPos(textArea, start); this.endXPos = endXPos; - this.startOffset = document.GetOffset(start); + this.startOffset = document.GetOffset(start.Location); this.endOffset = endOffset; CalculateSegments(); } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Selection.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Selection.cs index 0a119379d7..4826775f25 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Selection.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Selection.cs @@ -35,7 +35,7 @@ namespace ICSharpCode.AvalonEdit.Editing { if (textArea == null) throw new ArgumentNullException("textArea"); - if (textArea.Document.GetOffset(start) == textArea.Document.GetOffset(end) && start.VisualColumn == end.VisualColumn) + if (textArea.Document.GetOffset(start.Location) == textArea.Document.GetOffset(end.Location) && start.VisualColumn == end.VisualColumn) return textArea.emptySelection; else return new SimpleSelection(textArea, start, end); @@ -112,6 +112,9 @@ namespace ICSharpCode.AvalonEdit.Editing get { return Length == 0; } } + /// + /// Gets whether virtual space is enabled for this selection. + /// public virtual bool EnableVirtualSpace { get { return textArea.Options.EnableVirtualSpace; } } @@ -128,8 +131,8 @@ namespace ICSharpCode.AvalonEdit.Editing public abstract Selection SetEndpoint(TextViewPosition endPosition); /// - /// If this selection is empty, starts a new selection from to - /// , otherwise, changes the endpoint of this selection. + /// If this selection is empty, starts a new selection from to + /// , otherwise, changes the endpoint of this selection. /// public abstract Selection StartSelectionOrSetEndpoint(TextViewPosition startPosition, TextViewPosition endPosition); diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs index f6ac5e1737..c49607f61f 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs @@ -65,6 +65,9 @@ namespace ICSharpCode.AvalonEdit.Rendering /// public int VisualLength { get; private set; } + /// + /// Length in visual line coordinates including the end of line marker, if TextEditorOptions.ShowEndOfLine is enabled. + /// public int VisualLengthWithEndOfLineMarker { get { int length = VisualLength; @@ -346,11 +349,19 @@ namespace ICSharpCode.AvalonEdit.Rendering return GetVisualColumn(point, textView.Options.EnableVirtualSpace); } + /// + /// Gets the visual column from a document position (relative to top left of the document). + /// If the user clicks between two visual columns, rounds to the nearest column. + /// public int GetVisualColumn(Point point, bool allowVirtualSpace) { return GetVisualColumn(GetTextLineByVisualYPosition(point.Y), point.X, allowVirtualSpace); } + /// + /// Gets the visual column from a document position (relative to top left of the document). + /// If the user clicks between two visual columns, rounds to the nearest column. + /// public int GetVisualColumn(TextLine textLine, double xPos, bool allowVirtualSpace) { if (xPos > textLine.WidthIncludingTrailingWhitespace) { @@ -363,11 +374,17 @@ namespace ICSharpCode.AvalonEdit.Rendering return ch.FirstCharacterIndex + ch.TrailingLength; } + /// + /// Validates the visual column and returns the correct one. + /// public int ValidateVisualColumn(TextViewPosition position, bool allowVirtualSpace) { - return ValidateVisualColumn(Document.GetOffset(position), position.VisualColumn, allowVirtualSpace); + return ValidateVisualColumn(Document.GetOffset(position.Location), position.VisualColumn, allowVirtualSpace); } + /// + /// Validates the visual column and returns the correct one. + /// public int ValidateVisualColumn(int offset, int visualColumn, bool allowVirtualSpace) { int firstDocumentLineOffset = this.FirstDocumentLine.Offset; @@ -396,6 +413,10 @@ namespace ICSharpCode.AvalonEdit.Rendering return GetVisualColumnFloor(point, textView.Options.EnableVirtualSpace); } + /// + /// Gets the visual column from a document position (relative to top left of the document). + /// If the user clicks between two visual columns, returns the first of those columns. + /// public int GetVisualColumnFloor(Point point, bool allowVirtualSpace) { TextLine textLine = GetTextLineByVisualYPosition(point.Y);