From c62cfbcad7850eb4c2db47ee088500580c5a18f1 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 4 Jun 2009 19:58:19 +0000 Subject: [PATCH] AvalonEdit: allow setting the caret color. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4233 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../ICSharpCode.AvalonEdit/Editing/Caret.cs | 14 +++++++++++-- .../Editing/CaretLayer.cs | 8 +++++++- .../Rendering/TextView.cs | 20 +++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs index cdeed6b49b..e7b903edae 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs @@ -5,15 +5,17 @@ // $Revision$ // -using ICSharpCode.AvalonEdit.Utils; using System; using System.Diagnostics; using System.Windows; using System.Windows.Documents; +using System.Windows.Media; using System.Windows.Media.TextFormatting; using System.Windows.Threading; + using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Rendering; +using ICSharpCode.AvalonEdit.Utils; namespace ICSharpCode.AvalonEdit.Editing { @@ -24,7 +26,7 @@ namespace ICSharpCode.AvalonEdit.Editing { readonly TextArea textArea; readonly TextView textView; - CaretLayer caretAdorner; + readonly CaretLayer caretAdorner; bool visible; internal Caret(TextArea textArea) @@ -346,5 +348,13 @@ namespace ICSharpCode.AvalonEdit.Editing caretAdorner.Hide(); } } + + /// + /// Gets/Sets the color of the caret. + /// + public Brush CaretBrush { + get { return caretAdorner.CaretBrush; } + set { caretAdorner.CaretBrush = value; } + } } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretLayer.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretLayer.cs index 383904a576..2b46b687bf 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretLayer.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretLayer.cs @@ -7,6 +7,7 @@ using System; using System.Windows; +using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Animation; @@ -65,11 +66,16 @@ namespace ICSharpCode.AvalonEdit.Editing BeginAnimation(OpacityProperty, null); } + internal Brush CaretBrush; + protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); if (isVisible) { - drawingContext.DrawRectangle(Brushes.Black, null, + Brush caretBrush = this.CaretBrush; + if (caretBrush == null) + caretBrush = (Brush)textView.GetValue(TextBlock.ForegroundProperty); + drawingContext.DrawRectangle(caretBrush, null, new Rect(caretRectangle.X - textView.HorizontalOffset, caretRectangle.Y - textView.VerticalOffset, caretRectangle.Width, diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs index 703d12fa75..7f7399f2ca 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs @@ -304,6 +304,11 @@ namespace ICSharpCode.AvalonEdit.Rendering { return layers[index]; } + + /// + protected override System.Collections.IEnumerator LogicalChildren { + get { return layers.GetEnumerator(); } + } #endregion #region Redraw methods / VisualLine invalidation @@ -1456,5 +1461,20 @@ namespace ICSharpCode.AvalonEdit.Rendering throw ThrowUtil.NoDocumentAssigned(); return heightTree.GetLineByVisualPosition(visualTop); } + + /// + protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) + { + base.OnPropertyChanged(e); + if (e.Property == Control.ForegroundProperty + || e.Property == Control.FontFamilyProperty + || e.Property == Control.FontSizeProperty + || e.Property == Control.FontStretchProperty + || e.Property == Control.FontStyleProperty + || e.Property == Control.FontWeightProperty) + { + Redraw(); + } + } } }