diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs index ed5338030b..ea3e74fe00 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs @@ -1307,10 +1307,10 @@ namespace ICSharpCode.AvalonEdit.Rendering { VisualLine vl = GetVisualLineFromVisualTop(visualPosition.Y); if (vl != null) { - int column = vl.GetVisualColumn(visualPosition); + int column = vl.GetVisualColumnFloor(visualPosition); // Debug.WriteLine(vl.FirstDocumentLine.LineNumber + " vc " + column); foreach (VisualLineElement element in vl.Elements) { - if (element.VisualColumn + element.VisualLength < column) + if (element.VisualColumn + element.VisualLength <= column) continue; return element; } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs index fb153a8366..29ff6c1629 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs @@ -306,6 +306,7 @@ namespace ICSharpCode.AvalonEdit.Rendering /// /// 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) { @@ -314,6 +315,17 @@ namespace ICSharpCode.AvalonEdit.Rendering return ch.FirstCharacterIndex + ch.TrailingLength; } + /// + /// 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) + { + TextLine textLine = GetTextLineByVisualYPosition(point.Y); + CharacterHit ch = textLine.GetCharacterHitFromDistance(point.X); + return ch.FirstCharacterIndex; + } + /// /// Gets whether the visual line was disposed. ///