Browse Source

Turn TextArea.OverstrikeMode into a dependency property.

pull/331/head
Daniel Grunwald 12 years ago
parent
commit
1abea58fb2
  1. 17
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs
  2. 3
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretLayer.cs
  3. 30
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs
  4. 14
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs

17
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs

@ -53,6 +53,13 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -53,6 +53,13 @@ namespace ICSharpCode.AvalonEdit.Editing
textView.ScrollOffsetChanged += TextView_ScrollOffsetChanged;
}
internal void UpdateIfVisible()
{
if (visible) {
Show();
}
}
void TextView_VisualLinesChanged(object sender, EventArgs e)
{
if (visible) {
@ -414,8 +421,7 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -414,8 +421,7 @@ namespace ICSharpCode.AvalonEdit.Editing
{
if (textView != null && textView.Document != null) {
VisualLine visualLine = textView.GetOrConstructVisualLine(textView.Document.GetLineByNumber(position.Line));
return (this.textView.Options.AllowOverstrikeMode && this.textArea.OverstrikeMode)
? CalcCaretOverstrikeRectangle(visualLine) : CalcCaretRectangle(visualLine);
return textArea.OverstrikeMode ? CalcCaretOverstrikeRectangle(visualLine) : CalcCaretRectangle(visualLine);
} else {
return Rect.Empty;
}
@ -470,12 +476,7 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -470,12 +476,7 @@ namespace ICSharpCode.AvalonEdit.Editing
if (caretAdorner != null && textView != null) {
VisualLine visualLine = textView.GetVisualLine(position.Line);
if (visualLine != null) {
Rect caretRect;
if (this.textView.Options.AllowOverstrikeMode && this.textArea.OverstrikeMode) {
caretRect = CalcCaretOverstrikeRectangle(visualLine);
} else {
caretRect = CalcCaretRectangle(visualLine);
}
Rect caretRect = this.textArea.OverstrikeMode ? CalcCaretOverstrikeRectangle(visualLine) : CalcCaretRectangle(visualLine);
// Create Win32 caret so that Windows knows where our managed caret is. This is necessary for
// features like 'Follow text editing' in the Windows Magnifier.
if (!hasWin32Caret) {

3
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretLayer.cs

@ -94,12 +94,13 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -94,12 +94,13 @@ namespace ICSharpCode.AvalonEdit.Editing
if (caretBrush == null)
caretBrush = (Brush)textView.GetValue(TextBlock.ForegroundProperty);
if (this.textArea.Options.AllowOverstrikeMode && this.textArea.OverstrikeMode) {
if (this.textArea.OverstrikeMode) {
SolidColorBrush scBrush = caretBrush as SolidColorBrush;
if (scBrush != null) {
Color brushColor = scBrush.Color;
Color newColor = Color.FromArgb(100, brushColor.R, brushColor.G, brushColor.B);
caretBrush = new SolidColorBrush(newColor);
caretBrush.Freeze();
}
}

30
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs

@ -25,6 +25,7 @@ using System.Linq; @@ -25,6 +25,7 @@ using System.Linq;
using System.Windows;
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;
@ -882,8 +883,8 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -882,8 +883,8 @@ namespace ICSharpCode.AvalonEdit.Editing
if (e.Text == "\n" || e.Text == "\r" || e.Text == "\r\n")
ReplaceSelectionWithNewLine();
else {
if (overstrikeMode && Selection.IsEmpty && Document.GetLineByNumber(Caret.Line).EndOffset > Caret.Offset)
Selection = Selection.Create(this, Caret.Offset, Caret.Offset+e.Text.Length);
if (OverstrikeMode && Selection.IsEmpty && Document.GetLineByNumber(Caret.Line).EndOffset > Caret.Offset)
EditingCommands.SelectRightByCharacter.Execute(null, this);
ReplaceSelectionWithText(e.Text);
}
OnTextEntered(e);
@ -971,11 +972,8 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -971,11 +972,8 @@ namespace ICSharpCode.AvalonEdit.Editing
{
base.OnPreviewKeyDown(e);
if (!this.Options.AllowOverstrikeMode) {
this.overstrikeMode = false;
} else if (!e.Handled && e.Key == Key.Insert) {
this.overstrikeMode = !this.overstrikeMode;
this.caret.Show();
if (!e.Handled && e.Key == Key.Insert && this.Options.AllowToggleOverstrikeMode) {
this.OverstrikeMode = !this.OverstrikeMode;
e.Handled = true;
return;
}
@ -1047,11 +1045,19 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -1047,11 +1045,19 @@ namespace ICSharpCode.AvalonEdit.Editing
#region Overstrike mode
bool overstrikeMode = false;
/// <summary>
/// The <see cref="OverstrikeMode"/> dependency property.
/// </summary>
public static readonly DependencyProperty OverstrikeModeProperty =
DependencyProperty.Register("OverstrikeMode", typeof(bool), typeof(TextArea),
new FrameworkPropertyMetadata(Boxes.False));
public bool OverstrikeMode
{
get { return this.overstrikeMode; }
/// <summary>
/// Gets/Sets whether overstrike mode is active.
/// </summary>
public bool OverstrikeMode {
get { return (bool)GetValue(OverstrikeModeProperty); }
set { SetValue(OverstrikeModeProperty, value); }
}
#endregion
@ -1073,6 +1079,8 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -1073,6 +1079,8 @@ namespace ICSharpCode.AvalonEdit.Editing
|| e.Property == SelectionCornerRadiusProperty)
{
textView.Redraw();
} else if (e.Property == OverstrikeModeProperty) {
caret.UpdateIfVisible();
}
}

14
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs

@ -478,18 +478,18 @@ namespace ICSharpCode.AvalonEdit @@ -478,18 +478,18 @@ namespace ICSharpCode.AvalonEdit
}
}
bool allowOverstrikeMode = false;
bool allowToggleOverstrikeMode = false;
/// <summary>
/// Gets/Sets if the user is allowed to switch to overstrike mode.
/// Gets/Sets if the user is allowed to enable/disable overstrike mode.
/// </summary>
[DefaultValue(false)]
public bool AllowOverstrikeMode {
get { return allowOverstrikeMode; }
public bool AllowToggleOverstrikeMode {
get { return allowToggleOverstrikeMode; }
set {
if (allowOverstrikeMode != value) {
allowOverstrikeMode = value;
OnPropertyChanged("AllowOverstrikeMode");
if (allowToggleOverstrikeMode != value) {
allowToggleOverstrikeMode = value;
OnPropertyChanged("AllowToggleOverstrikeMode");
}
}
}

Loading…
Cancel
Save