@ -13,6 +13,7 @@ namespace Avalonia.Controls
private TextPresenter ? _ presenter ;
private TextPresenter ? _ presenter ;
private bool _ selectionChanged ;
private bool _ selectionChanged ;
private bool _ isInChange ;
private bool _ isInChange ;
private ITextInputMethodImpl ? _ im ;
public override Visual TextViewVisual = > _ presenter ! ;
public override Visual TextViewVisual = > _ presenter ! ;
@ -24,7 +25,7 @@ namespace Avalonia.Controls
{
{
return "" ;
return "" ;
}
}
if ( _ parent . CaretIndex ! = _ presenter . CaretIndex )
if ( _ parent . CaretIndex ! = _ presenter . CaretIndex )
{
{
_ presenter . SetCurrentValue ( TextPresenter . CaretIndexProperty , _ parent . CaretIndex ) ;
_ presenter . SetCurrentValue ( TextPresenter . CaretIndexProperty , _ parent . CaretIndex ) ;
@ -34,7 +35,7 @@ namespace Avalonia.Controls
{
{
_ presenter . SetCurrentValue ( TextPresenter . TextProperty , _ parent . Text ) ;
_ presenter . SetCurrentValue ( TextPresenter . TextProperty , _ parent . Text ) ;
}
}
var lineIndex = _ presenter . TextLayout . GetLineIndexFromCharacterIndex ( _ presenter . CaretIndex , false ) ;
var lineIndex = _ presenter . TextLayout . GetLineIndexFromCharacterIndex ( _ presenter . CaretIndex , false ) ;
var textLine = _ presenter . TextLayout . TextLines [ lineIndex ] ;
var textLine = _ presenter . TextLayout . TextLines [ lineIndex ] ;
@ -125,6 +126,11 @@ namespace Avalonia.Controls
if ( _ parent ! = null )
if ( _ parent ! = null )
{
{
_ parent . PropertyChanged + = OnParentPropertyChanged ;
_ parent . PropertyChanged + = OnParentPropertyChanged ;
_ im = ( _ parent . VisualRoot as ITextInputMethodRoot ) ? . InputMethod ;
}
else
{
_ im = null ;
}
}
var oldPresenter = _ presenter ;
var oldPresenter = _ presenter ;
@ -133,7 +139,7 @@ namespace Avalonia.Controls
{
{
oldPresenter . ClearValue ( TextPresenter . PreeditTextProperty ) ;
oldPresenter . ClearValue ( TextPresenter . PreeditTextProperty ) ;
oldPresenter . CaretBoundsChanged - = ( s , e ) = > RaiseCursorRectangleChanged ( ) ;
oldPresenter . CaretBoundsChanged - = ( s , e ) = > RaiseCursorRectangleChanged ( ) ;
}
}
_ presenter = presenter ;
_ presenter = presenter ;
@ -161,6 +167,17 @@ namespace Avalonia.Controls
_ presenter . SetCurrentValue ( TextPresenter . PreeditTextCursorPositionProperty , cursorPos ) ;
_ presenter . SetCurrentValue ( TextPresenter . PreeditTextCursorPositionProperty , cursorPos ) ;
}
}
public override void ShowInputPanel ( )
{
base . ShowInputPanel ( ) ;
if ( _ parent is { } & & _ im is { } )
{
_ im . SetOptions ( TextInputOptions . FromStyledElement ( _ parent ) ) ;
_ im . SetClient ( this ) ;
}
}
private static string GetTextLineText ( TextLine textLine )
private static string GetTextLineText ( TextLine textLine )
{
{
var builder = StringBuilderCache . Acquire ( textLine . Length ) ;
var builder = StringBuilderCache . Acquire ( textLine . Length ) ;