From 404042e3ce872aa722b8fef64e8f2451882f9fa9 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Tue, 19 Jan 2010 13:54:33 +0000 Subject: [PATCH] Fixed SD2-1597 - Double click selection does not select entire word with error highlighting git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5412 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Document/ITextSource.cs | 1 + .../Document/TextUtilities.cs | 4 ++-- .../ICSharpCode.AvalonEdit/Document/UndoStack.cs | 3 +-- .../Rendering/VisualLine.cs | 12 +++++++++++- .../Rendering/VisualLineText.cs | 15 ++++++--------- .../ICSharpCode.AvalonEdit/Utils/Deque.cs | 1 + 6 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/ITextSource.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/ITextSource.cs index 42bdc4f5c5..5f25b65e99 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/ITextSource.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/ITextSource.cs @@ -78,6 +78,7 @@ namespace ICSharpCode.AvalonEdit.Document /// Implements the ITextSource interface by wrapping another TextSource /// and viewing only a part of the text. /// + [Obsolete("This class will be removed in a future version of AvalonEdit")] public sealed class TextSourceView : ITextSource { readonly ITextSource baseTextSource; diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs index 17ec1f309a..ad3389c3fb 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs @@ -243,8 +243,8 @@ namespace ICSharpCode.AvalonEdit.Document /// in the text source. /// /// This method is NOT equivalent to the actual caret movement when using VisualLine.GetNextCaretPosition. - /// In real caret movement, there are additional caret stops at line starts and ends. However, this method - /// doesn't know anything about lines: it is often called with a textSource that represents only a single VisualTextElement. + /// In real caret movement, there are additional caret stops at line starts and ends. This method + /// treats linefeeds as simple whitespace. /// public static int GetNextCaretPosition(ITextSource textSource, int offset, LogicalDirection direction, CaretPositioningMode mode) { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/UndoStack.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/UndoStack.cs index a7a153d4ff..57d9967302 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/UndoStack.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/UndoStack.cs @@ -22,7 +22,7 @@ namespace ICSharpCode.AvalonEdit.Document Deque undostack = new Deque(); Deque redostack = new Deque(); - int sizeLimit = 1000; + int sizeLimit = int.MaxValue; bool acceptChanges = true; /// @@ -51,7 +51,6 @@ namespace ICSharpCode.AvalonEdit.Document /// /// Gets/Sets the limit on the number of items on the undo stack. - /// The default value is 1000. /// /// The size limit is enforced only on the number of stored top-level undo groups. /// Elements within undo groups do not count towards the size limit. diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs index c61394b326..eae09fe65a 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs @@ -52,6 +52,16 @@ namespace ICSharpCode.AvalonEdit.Rendering /// public ReadOnlyCollection TextLines { get; private set; } + /// + /// Gets the start offset of the VisualLine inside the document. + /// This is equivalent to FirstDocumentLine.Offset. + /// + public int StartOffset { + get { + return FirstDocumentLine.Offset; + } + } + /// /// Length in visual line coordinates. /// @@ -334,7 +344,7 @@ namespace ICSharpCode.AvalonEdit.Rendering if (direction == LogicalDirection.Backward) { // Search Backwards: // If the last element doesn't handle line borders, return the line end as caret stop - // (we don't check the mode here: we treat a line end as word start, border, etc. + if (visualColumn > this.VisualLength && !elements[elements.Count-1].HandlesLineBorders && HasImplicitStopAtLineEnd(mode)) { return this.VisualLength; } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineText.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineText.cs index ed909c010a..b4876d6889 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineText.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineText.cs @@ -90,21 +90,18 @@ namespace ICSharpCode.AvalonEdit.Rendering /// public override int GetVisualColumn(int relativeTextOffset) { - return VisualColumn + relativeTextOffset - this.RelativeTextOffset; + return this.VisualColumn + relativeTextOffset - this.RelativeTextOffset; } /// public override int GetNextCaretPosition(int visualColumn, LogicalDirection direction, CaretPositioningMode mode) { - int textOffset = parentVisualLine.FirstDocumentLine.Offset + this.RelativeTextOffset; - TextSourceView view = new TextSourceView( - parentVisualLine.Document, - new SimpleSegment(textOffset, this.DocumentLength)); - int pos = TextUtilities.GetNextCaretPosition(view, visualColumn - this.VisualColumn, direction, mode); - if (pos < 0) - return pos; + int textOffset = parentVisualLine.StartOffset + this.RelativeTextOffset; + int pos = TextUtilities.GetNextCaretPosition(parentVisualLine.Document, textOffset + visualColumn - this.VisualColumn, direction, mode); + if (pos < textOffset || pos > textOffset + this.DocumentLength) + return -1; else - return this.VisualColumn + pos; + return this.VisualColumn + pos - textOffset; } } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs index e249378d2e..8b108ef163 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs @@ -15,6 +15,7 @@ namespace ICSharpCode.AvalonEdit.Utils /// Double-ended queue. /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")] + [Serializable] public class Deque : ICollection { T[] arr = Empty.Array;