|
|
|
@ -163,9 +163,15 @@ namespace ICSharpCode.AvalonEdit.Editing |
|
|
|
VisualLine vl = textView.GetVisualLine(pos.Line); |
|
|
|
VisualLine vl = textView.GetVisualLine(pos.Line); |
|
|
|
if (vl == null) return EMPTY_RECT; |
|
|
|
if (vl == null) return EMPTY_RECT; |
|
|
|
TextLine line = vl.GetTextLine(pos.VisualColumn); |
|
|
|
TextLine line = vl.GetTextLine(pos.VisualColumn); |
|
|
|
double offset = vl.GetTextLineVisualYPosition(line, VisualYPosition.LineTop) - textView.ScrollOffset.Y; |
|
|
|
double offset = vl.GetTextLineVisualYPosition(line, VisualYPosition.TextTop) - textView.ScrollOffset.Y; |
|
|
|
Rect r = line.GetTextBounds(pos.VisualColumn, 1).First().Rectangle; |
|
|
|
Rect r; |
|
|
|
r.Offset(-textView.ScrollOffset.X, offset); |
|
|
|
if (pos.VisualColumn < vl.VisualLengthWithEndOfLineMarker) { |
|
|
|
|
|
|
|
r = line.GetTextBounds(pos.VisualColumn, 1).First().Rectangle; |
|
|
|
|
|
|
|
r.Offset(-textView.ScrollOffset.X, offset); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
r = new Rect(vl.GetVisualPosition(pos.VisualColumn, VisualYPosition.TextTop), new Size(textView.WideSpaceWidth, textView.DefaultLineHeight)); |
|
|
|
|
|
|
|
r.Offset(-textView.ScrollOffset); |
|
|
|
|
|
|
|
} |
|
|
|
// this may happen during layout changes in AvalonDock, so we just return an empty rectangle
|
|
|
|
// this may happen during layout changes in AvalonDock, so we just return an empty rectangle
|
|
|
|
// in those cases. It should be refreshed immediately.
|
|
|
|
// in those cases. It should be refreshed immediately.
|
|
|
|
if (!source.RootVisual.IsAncestorOf(textView)) return EMPTY_RECT; |
|
|
|
if (!source.RootVisual.IsAncestorOf(textView)) return EMPTY_RECT; |
|
|
|
|