diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
index 271774a21f..b23f443ea4 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
@@ -94,10 +94,6 @@
-
- CaretHighlight.xaml
- Code
-
@@ -165,7 +161,6 @@
-
SharpDevelopCompletionWindow.cs
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretHighlight.xaml b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretHighlight.xaml
deleted file mode 100644
index dd7e1d8f37..0000000000
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretHighlight.xaml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretHighlight.xaml.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretHighlight.xaml.cs
deleted file mode 100644
index c21facf7b8..0000000000
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretHighlight.xaml.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
-// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-
-namespace ICSharpCode.AvalonEdit.AddIn
-{
- ///
- /// Interaction logic for CaretHighlight.xaml
- ///
- public partial class CaretHighlight : UserControl
- {
- public CaretHighlight()
- {
- InitializeComponent();
- }
- }
-}
\ No newline at end of file
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretHighlightAdorner.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretHighlightAdorner.cs
index fcc8f5b6ed..98baf58d3e 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretHighlightAdorner.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretHighlightAdorner.cs
@@ -3,10 +3,12 @@
using System;
using System.Windows;
+using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.Animation;
-using System.Windows.Threading;
+
+using ICSharpCode.AvalonEdit.Editing;
namespace ICSharpCode.AvalonEdit.AddIn
{
@@ -15,71 +17,37 @@ namespace ICSharpCode.AvalonEdit.AddIn
///
public class CaretHighlightAdorner : Adorner
{
- CaretHighlight highlight;
+ const double SizeFactor = 0.5;
- public CaretHighlightAdorner(UIElement adornedElement, Point origin)
- : base(adornedElement)
- {
- this.Highlight = new CaretHighlight() {
- RenderTransform = new TranslateTransform(origin.X, origin.Y),
- };
- }
+ Rect min, max;
+ Pen blackPen;
- ///
- /// Gets/sets the visual child.
- ///
- protected CaretHighlight Highlight {
- get { return highlight; }
- set {
- RemoveVisualChild(highlight);
- highlight = value;
- AddVisualChild(highlight);
- InvalidateMeasure();
- }
- }
-
- ///
- /// Gets the visual child.
- ///
- protected override Visual GetVisualChild(int index)
- {
- if (index == 0 && highlight != null)
- return highlight;
- else
- throw new ArgumentOutOfRangeException("index");
- }
-
- ///
- /// Gets the number of visual children.
- ///
- protected override int VisualChildrenCount {
- get { return highlight != null ? 1 : 0; }
- }
-
- ///
- /// Measure the visual child.
- ///
- protected override Size MeasureOverride(Size availableSize)
+ public CaretHighlightAdorner(TextArea textArea)
+ : base(textArea.TextView)
{
- if (highlight != null) {
- highlight.Measure(availableSize);
- return availableSize;
- } else {
- return base.MeasureOverride(availableSize);
- }
+ Rect caret = textArea.Caret.CalculateCaretRectangle();
+
+ this.min = caret;
+ this.max = new Rect(caret.Location, new Size(caret.Width + Math.Max(caret.Width, caret.Height) * SizeFactor, caret.Height + Math.Max(caret.Width, caret.Height) * SizeFactor));
+
+ Vector centerOffset = new Vector(caret.Width / 2, caret.Height / 2);
+
+ min.Offset(-textArea.TextView.ScrollOffset);
+ max.Offset(-textArea.TextView.ScrollOffset);
+
+ max.Offset(-centerOffset);
+
+ blackPen = new Pen(TextBlock.GetForeground(textArea.TextView).Clone(), 1);
}
-
- ///
- /// Arrange the visual child.
- ///
- protected override Size ArrangeOverride(Size finalSize)
+
+ protected override void OnRender(DrawingContext drawingContext)
{
- if (highlight != null) {
- highlight.Arrange(new Rect(new Point(0, 0), finalSize));
- return finalSize;
- } else {
- return base.ArrangeOverride(finalSize);
- }
+ var geometry = new RectangleGeometry(max, 2, 2);
+
+ geometry.BeginAnimation(RectangleGeometry.RectProperty, new RectAnimation(max, min, new Duration(TimeSpan.FromMilliseconds(400))) { AutoReverse = true });
+ blackPen.Brush.BeginAnimation(Brush.OpacityProperty, new DoubleAnimation(1, 0, new Duration(TimeSpan.FromMilliseconds(600))) { BeginTime = TimeSpan.FromMilliseconds(200), AutoReverse = true });
+
+ drawingContext.DrawGeometry(null, blackPen, geometry);
}
}
}
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
index 46d650734a..be2069c483 100755
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
@@ -13,8 +13,8 @@ using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Documents;
using System.Windows.Input;
-using System.Windows.Media;
using System.Windows.Threading;
+
using ICSharpCode.AvalonEdit.AddIn.Options;
using ICSharpCode.AvalonEdit.AddIn.Snippets;
using ICSharpCode.AvalonEdit.Editing;
@@ -463,7 +463,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
return;
AdornerLayer layer = AdornerLayer.GetAdornerLayer(textArea.TextView);
- CaretHighlightAdorner adorner = new CaretHighlightAdorner(textArea.TextView, textArea.Caret.CalculateCaretRectangle().Location - textArea.TextView.ScrollOffset - new Vector(3, 6.75));
+ CaretHighlightAdorner adorner = new CaretHighlightAdorner(textArea);
layer.Add(adorner);
WorkbenchSingleton.CallLater(TimeSpan.FromSeconds(1), (Action)(() => layer.Remove(adorner)));