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)
{
_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.PreeditText = preeditText;
_presenter.SetCurrentValue(TextPresenter.PreeditTextProperty, preeditText);
_presenter.UpdateCaret(new CharacterHit(_compositionStart + (preeditText != null ? preeditText.Length : 0)), false);
@ -201,9 +201,12 @@ namespace Avalonia.Controls
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)
@ -213,7 +216,7 @@ namespace Avalonia.Controls
return;
}
_presenter.CompositionRegion = region;
_presenter.SetCurrentValue(TextPresenter.CompositionRegionProperty, region);
}
public void SelectInSurroundingText(int start, int end)
@ -252,9 +255,9 @@ namespace Avalonia.Controls
if (_presenter != null)
{
_presenter.PreeditText = null;
_presenter.ClearValue(TextPresenter.PreeditTextProperty);
_presenter.CompositionRegion = null;
_presenter.ClearValue(TextPresenter.CompositionRegionProperty);
_presenter.CaretBoundsChanged -= OnCaretBoundsChanged;
}

Loading…
Cancel
Save