Browse Source

Use SetCurrentValue and StringBuilder in TextBoxTextInputMethodClient

pull/10617/head
Tom Edwards 4 years ago
parent
commit
3e87a344e3
  1. 17
      src/Avalonia.Controls/TextBoxTextInputMethodClient.cs

17
src/Avalonia.Controls/TextBoxTextInputMethodClient.cs

@ -106,7 +106,7 @@ namespace Avalonia.Controls
{ {
if (_presenter != null && _textEditable != null) if (_presenter != null && _textEditable != null)
{ {
_presenter.CompositionRegion = new TextRange(_textEditable.CompositionStart, _textEditable.CompositionEnd); _presenter.SetCurrentValue(TextPresenter.CompositionRegionProperty, new TextRange(_textEditable.CompositionStart, _textEditable.CompositionEnd));
} }
} }
@ -179,7 +179,7 @@ namespace Avalonia.Controls
_presenter.SetCurrentValue(TextPresenter.TextProperty, text); _presenter.SetCurrentValue(TextPresenter.TextProperty, text);
_presenter.PreeditText = preeditText; _presenter.SetCurrentValue(TextPresenter.PreeditTextProperty, preeditText);
_presenter.UpdateCaret(new CharacterHit(_compositionStart + (preeditText != null ? preeditText.Length : 0)), false); _presenter.UpdateCaret(new CharacterHit(_compositionStart + (preeditText != null ? preeditText.Length : 0)), false);
@ -201,9 +201,12 @@ namespace Avalonia.Controls
return preeditText; return preeditText;
} }
var text = _presenterText.Substring(0, _compositionStart) + preeditText + _presenterText.Substring(_compositionStart); var sb = StringBuilderCache.Acquire(_presenterText.Length + preeditText.Length);
return text; sb.Append(_presenterText);
sb.Insert(_compositionStart, preeditText);
return StringBuilderCache.GetStringAndRelease(sb);
} }
public void SetComposingRegion(TextRange? region) public void SetComposingRegion(TextRange? region)
@ -213,7 +216,7 @@ namespace Avalonia.Controls
return; return;
} }
_presenter.CompositionRegion = region; _presenter.SetCurrentValue(TextPresenter.CompositionRegionProperty, region);
} }
public void SelectInSurroundingText(int start, int end) public void SelectInSurroundingText(int start, int end)
@ -252,9 +255,9 @@ namespace Avalonia.Controls
if (_presenter != null) if (_presenter != null)
{ {
_presenter.PreeditText = null; _presenter.ClearValue(TextPresenter.PreeditTextProperty);
_presenter.CompositionRegion = null; _presenter.ClearValue(TextPresenter.CompositionRegionProperty);
_presenter.CaretBoundsChanged -= OnCaretBoundsChanged; _presenter.CaretBoundsChanged -= OnCaretBoundsChanged;
} }

Loading…
Cancel
Save