Explorar o código

Use visual root coordinate space for caret rect instead of screen coordinates

Benedikt Stebner %!s(int64=2) %!d(string=hai) anos
pai
achega
648b9bc3dc

+ 1 - 3
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)
                 {

+ 12 - 1
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)