Skip to content

Commit 151c556

Browse files
Fixed shat code completion position takes LineNumber list into account
1 parent cee4351 commit 151c556

File tree

3 files changed

+28
-21
lines changed

3 files changed

+28
-21
lines changed

FreePIE.GUI.CodeCompletion/AvalonEdit/AvalonAdapter.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Linq;
33
using System.Windows;
4+
using System.Windows.Controls;
45
using System.Windows.Input;
56
using ICSharpCode.AvalonEdit.Editing;
67
using ICSharpCode.AvalonEdit.Search;
@@ -10,11 +11,13 @@ namespace FreePIE.GUI.CodeCompletion.AvalonEdit
1011
public class AvalonEditorAdapter : EditorAdapterBase
1112
{
1213
private readonly TextArea textArea;
14+
private ScrollViewer scroll;
1315
private SearchPanel searchPanel;
1416

1517
public AvalonEditorAdapter(TextArea textArea)
1618
{
1719
this.textArea = textArea;
20+
1821
textArea.Caret.PositionChanged += OnCaretPositionChanged;
1922
textArea.PreviewKeyDown += OnTextAreaPreviewKeyDown;
2023
textArea.KeyDown += OnKeyDown;
@@ -81,6 +84,13 @@ protected virtual void OnSelectionChanged(object sender, EventArgs e)
8184
public override event KeyEventHandler KeyDown;
8285
public override event KeyEventHandler KeyUp;
8386
public override event TextCompositionEventHandler PreviewTextInput;
87+
public override Point GetOffset()
88+
{
89+
var s = scroll ?? (scroll = FindScrollAncestor(textArea));
90+
91+
var trans = textArea.TextView.TransformToAncestor(textArea);
92+
return trans.Transform(new Point(-s.HorizontalOffset, -s.VerticalOffset));
93+
}
8494

8595
public override Rect GetVisualPosition()
8696
{
@@ -118,5 +128,17 @@ public override void Focus()
118128
{
119129
textArea.Focus();
120130
}
131+
132+
private ScrollViewer FindScrollAncestor(UIElement element)
133+
{
134+
DependencyObject obj = element;
135+
while ((obj = LogicalTreeHelper.GetParent(obj)) != null)
136+
{
137+
if (obj is ScrollViewer)
138+
return obj as ScrollViewer;
139+
}
140+
141+
return null;
142+
}
121143
}
122144
}

FreePIE.GUI.CodeCompletion/EditorAdapterBase.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ public abstract class EditorAdapterBase : DependencyObject
1717
public abstract event KeyEventHandler KeyDown;
1818
public abstract event KeyEventHandler KeyUp;
1919
public abstract event TextCompositionEventHandler PreviewTextInput;
20+
public abstract Point GetOffset();
2021
}
2122
}

FreePIE.GUI.CodeCompletion/Event/Actions/PositionAction.cs

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Linq;
33
using System.Windows;
44
using System.Windows.Controls;
5+
using Caliburn.Micro;
56

67
namespace FreePIE.GUI.CodeCompletion.Event.Actions
78
{
@@ -24,30 +25,13 @@ public void Handle(IEnumerable<IPopupEvent> events, CompletionPopupView view)
2425
return;
2526

2627
Rect rect = view.Target.GetVisualPosition();
27-
28-
view.PlacementRectangle = rect.IsEmpty ? default(Rect) : new Rect(CalculatePoint(rect, view.Target.UIElement), new Size(rect.Width, rect.Height));
28+
view.PlacementRectangle = rect.IsEmpty ? default(Rect) : new Rect(CalculatePoint(rect, view), new Size(rect.Width, rect.Height));
2929
}
3030

31-
private ScrollViewer FindScrollAncestor(UIElement element)
31+
Point CalculatePoint(Rect rect, CompletionPopupView view)
3232
{
33-
DependencyObject obj = element;
34-
while((obj = LogicalTreeHelper.GetParent(obj)) != null)
35-
{
36-
if (obj is ScrollViewer)
37-
return obj as ScrollViewer;
38-
}
39-
40-
return null;
41-
}
42-
43-
Point CalculatePoint(Rect rect, UIElement textArea)
44-
{
45-
var scroll = FindScrollAncestor(textArea);
46-
47-
if(scroll == null)
48-
return new Point(rect.X, rect.Y + 1);
49-
50-
return new Point(rect.X - scroll.HorizontalOffset, rect.Y - scroll.VerticalOffset + 1);
33+
var offset = view.Target.GetOffset();
34+
return new Point(rect.X + offset.X, rect.Y + offset.Y + 1);
5135
}
5236
}
5337
}

0 commit comments

Comments
 (0)