From 28047a4407b1e7a022b8adf9d869e2a68073037e Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 29 Jun 2012 20:28:35 +0200 Subject: [PATCH] fix SD-1910 - IME support crashes when caret is in virtual space --- .../Editing/ImeNativeWrapper.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeNativeWrapper.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeNativeWrapper.cs index 1e81993239..4cd8d0919b 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeNativeWrapper.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeNativeWrapper.cs @@ -163,9 +163,15 @@ namespace ICSharpCode.AvalonEdit.Editing VisualLine vl = textView.GetVisualLine(pos.Line); if (vl == null) return EMPTY_RECT; TextLine line = vl.GetTextLine(pos.VisualColumn); - double offset = vl.GetTextLineVisualYPosition(line, VisualYPosition.LineTop) - textView.ScrollOffset.Y; - Rect r = line.GetTextBounds(pos.VisualColumn, 1).First().Rectangle; - r.Offset(-textView.ScrollOffset.X, offset); + double offset = vl.GetTextLineVisualYPosition(line, VisualYPosition.TextTop) - textView.ScrollOffset.Y; + Rect r; + 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 // in those cases. It should be refreshed immediately. if (!source.RootVisual.IsAncestorOf(textView)) return EMPTY_RECT;