From c813915ac4a78c938f297c3ac5dc37574d13ae23 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer <siegfriedpammer@gmail.com> Date: Mon, 16 Dec 2013 00:24:44 +0100 Subject: [PATCH] fix some weird problems with InsertWithCursor --- .../Project/Src/Refactoring/EditorScript.cs | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs index 564658ad5a..96739edd3d 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs @@ -248,6 +248,7 @@ namespace CSharpBinding.Refactoring this.insertionPoints = insertionPoints.ToArray(); this.editor.ActiveInputHandler = new InputHandler(this); this.editor.TextView.InsertLayer(this, KnownLayer.Text, LayerInsertionPosition.Above); + this.editor.TextView.ScrollOffsetChanged += TextViewScrollOffsetChanged; } static readonly Pen markerPen = new Pen(Brushes.Blue, 1); @@ -257,7 +258,12 @@ namespace CSharpBinding.Refactoring var currentInsertionPoint = insertionPoints[CurrentInsertionPoint]; var pos = editor.TextView.GetVisualPosition(new TextViewPosition(currentInsertionPoint.Location), VisualYPosition.LineMiddle); var endPos = new Point(pos.X + editor.TextView.ActualWidth * 0.6, pos.Y); - drawingContext.DrawLine(markerPen, pos, endPos); + drawingContext.DrawLine(markerPen, pos - editor.TextView.ScrollOffset, endPos - editor.TextView.ScrollOffset); + } + + void TextViewScrollOffsetChanged(object sender, EventArgs e) + { + InvalidateVisual(); } class InputHandler : TextAreaDefaultInputHandler @@ -290,19 +296,30 @@ namespace CSharpBinding.Refactoring { editor.TextView.Layers.Remove(this); editor.ActiveInputHandler = editor.DefaultInputHandler; + editor.TextView.ScrollOffsetChanged -= TextViewScrollOffsetChanged; } void InsertCode(object sender, ExecutedRoutedEventArgs e) { - if (Exited != null) { - Exited(this, new InsertionCursorEventArgs(insertionPoints[CurrentInsertionPoint], true)); - } + FireExited(true); } void Cancel(object sender, ExecutedRoutedEventArgs e) + { + FireExited(false); + } + /// <summary> + /// call this somewhere useful, please... :) + /// </summary> + public void EndMode() + { + FireExited(false); + } + + void FireExited(bool success) { if (Exited != null) { - Exited(this, new InsertionCursorEventArgs(insertionPoints[CurrentInsertionPoint], false)); + Exited(this, new InsertionCursorEventArgs(insertionPoints[CurrentInsertionPoint], success)); } } }