Browse Source

Merge branch 'master' into add-transition-delay

pull/4052/head
danwalmsley 6 years ago
committed by GitHub
parent
commit
e6effde2ee
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 32
      src/Avalonia.Controls/TextBox.cs

32
src/Avalonia.Controls/TextBox.cs

@ -347,7 +347,7 @@ namespace Avalonia.Controls
if (IsFocused) if (IsFocused)
{ {
DecideCaretVisibility(); _presenter?.ShowCaret();
} }
} }
@ -364,14 +364,7 @@ namespace Avalonia.Controls
{ {
SelectAll(); SelectAll();
} }
else
{
DecideCaretVisibility();
}
}
private void DecideCaretVisibility()
{
_presenter?.ShowCaret(); _presenter?.ShowCaret();
} }
@ -580,15 +573,15 @@ namespace Avalonia.Controls
switch (e.Key) switch (e.Key)
{ {
case Key.Left: case Key.Left:
MoveHorizontal(-1, hasWholeWordModifiers);
movement = true;
selection = DetectSelection(); selection = DetectSelection();
MoveHorizontal(-1, hasWholeWordModifiers, selection);
movement = true;
break; break;
case Key.Right: case Key.Right:
MoveHorizontal(1, hasWholeWordModifiers);
movement = true;
selection = DetectSelection(); selection = DetectSelection();
MoveHorizontal(1, hasWholeWordModifiers, selection);
movement = true;
break; break;
case Key.Up: case Key.Up:
@ -833,13 +826,21 @@ namespace Avalonia.Controls
return result; return result;
} }
private void MoveHorizontal(int direction, bool wholeWord) private void MoveHorizontal(int direction, bool wholeWord, bool isSelecting)
{ {
var text = Text ?? string.Empty; var text = Text ?? string.Empty;
var caretIndex = CaretIndex; var caretIndex = CaretIndex;
if (!wholeWord) if (!wholeWord)
{ {
if (SelectionStart != SelectionEnd && !isSelecting)
{
var start = Math.Min(SelectionStart, SelectionEnd);
var end = Math.Max(SelectionStart, SelectionEnd);
CaretIndex = direction < 0 ? start : end;
return;
}
var index = caretIndex + direction; var index = caretIndex + direction;
if (index < 0 || index > text.Length) if (index < 0 || index > text.Length)
@ -975,6 +976,7 @@ namespace Avalonia.Controls
{ {
SelectionStart = 0; SelectionStart = 0;
SelectionEnd = Text?.Length ?? 0; SelectionEnd = Text?.Length ?? 0;
CaretIndex = SelectionEnd;
} }
private bool DeleteSelection() private bool DeleteSelection()
@ -1055,14 +1057,14 @@ namespace Avalonia.Controls
private void SetSelectionForControlBackspace() private void SetSelectionForControlBackspace()
{ {
SelectionStart = CaretIndex; SelectionStart = CaretIndex;
MoveHorizontal(-1, true); MoveHorizontal(-1, true, false);
SelectionEnd = CaretIndex; SelectionEnd = CaretIndex;
} }
private void SetSelectionForControlDelete() private void SetSelectionForControlDelete()
{ {
SelectionStart = CaretIndex; SelectionStart = CaretIndex;
MoveHorizontal(1, true); MoveHorizontal(1, true, false);
SelectionEnd = CaretIndex; SelectionEnd = CaretIndex;
} }

Loading…
Cancel
Save