From 648b9bc3dc0333b2f4075c2ffb3460a85d38ab06 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Tue, 21 Mar 2023 13:26:30 +0100 Subject: [PATCH] Use visual root coordinate space for caret rect instead of screen coordinates --- .../TextBoxTextInputMethodClient.cs | 4 +--- .../AvaloniaNativeTextInputMethod.cs | 13 ++++++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs b/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs index 4a6ff3ae35..e999d0bb74 100644 --- a/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs +++ b/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs @@ -30,9 +30,7 @@ namespace Avalonia.Controls return default; } - var visualRoot = _presenter.VisualRoot!; - - var transform = _presenter.TransformToVisual((Visual)visualRoot); + var transform = _presenter.TransformToVisual(_parent); if (transform == null) { diff --git a/src/Avalonia.Native/AvaloniaNativeTextInputMethod.cs b/src/Avalonia.Native/AvaloniaNativeTextInputMethod.cs index b216970af3..796a0ced37 100644 --- a/src/Avalonia.Native/AvaloniaNativeTextInputMethod.cs +++ b/src/Avalonia.Native/AvaloniaNativeTextInputMethod.cs @@ -60,7 +60,18 @@ namespace Avalonia.Native return; } - _inputMethod.SetCursorRect(_client.CursorRectangle.ToAvnRect()); + var visualRoot = _client.TextViewVisual.VisualRoot; + + var transform = _client.TextViewVisual.TransformToVisual((Visual)visualRoot); + + if (transform == null) + { + return; + } + + var rect = _client.CursorRectangle.TransformToAABB(transform.Value); + + _inputMethod.SetCursorRect(rect.ToAvnRect()); } private void OnSurroundingTextChanged(object sender, EventArgs e)