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.
///