Browse Source

Fixed inaccuracy in GetVisualLineElementFromPosition (was incorrect by up to a half visual column)

pull/1/head
Daniel Grunwald 15 years ago
parent
commit
4f2269751f
  1. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs
  2. 12
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs

@ -1307,10 +1307,10 @@ namespace ICSharpCode.AvalonEdit.Rendering @@ -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;
}

12
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs

@ -306,6 +306,7 @@ namespace ICSharpCode.AvalonEdit.Rendering @@ -306,6 +306,7 @@ namespace ICSharpCode.AvalonEdit.Rendering
/// <summary>
/// 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.
/// </summary>
public int GetVisualColumn(Point point)
{
@ -314,6 +315,17 @@ namespace ICSharpCode.AvalonEdit.Rendering @@ -314,6 +315,17 @@ namespace ICSharpCode.AvalonEdit.Rendering
return ch.FirstCharacterIndex + ch.TrailingLength;
}
/// <summary>
/// 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.
/// </summary>
public int GetVisualColumnFloor(Point point)
{
TextLine textLine = GetTextLineByVisualYPosition(point.Y);
CharacterHit ch = textLine.GetCharacterHitFromDistance(point.X);
return ch.FirstCharacterIndex;
}
/// <summary>
/// Gets whether the visual line was disposed.
/// </summary>

Loading…
Cancel
Save