From 7b21eefd29e8eacffa36b9bd992b7553cbf88cf5 Mon Sep 17 00:00:00 2001 From: Alan Mantoux Date: Fri, 16 Aug 2024 19:55:28 +0200 Subject: [PATCH] Editable elements are a repaint boundary (#396) * EditableTextLine is a repaint boundary * Repaint editor when floating cursor changes --- packages/fleather/lib/src/rendering/editable_text_block.dart | 3 +++ packages/fleather/lib/src/rendering/editable_text_line.dart | 3 +++ packages/fleather/lib/src/rendering/editor.dart | 1 + packages/fleather/lib/src/rendering/embed_proxy.dart | 3 +++ 4 files changed, 10 insertions(+) diff --git a/packages/fleather/lib/src/rendering/editable_text_block.dart b/packages/fleather/lib/src/rendering/editable_text_block.dart index 5dfe79cc..09de4b24 100644 --- a/packages/fleather/lib/src/rendering/editable_text_block.dart +++ b/packages/fleather/lib/src/rendering/editable_text_block.dart @@ -273,6 +273,9 @@ class RenderEditableTextBlock extends RenderEditableContainerBox // End RenderEditableBox implementation + @override + bool isRepaintBoundary = true; + @override void detach() { _painter?.dispose(); diff --git a/packages/fleather/lib/src/rendering/editable_text_line.dart b/packages/fleather/lib/src/rendering/editable_text_line.dart index 32303c8c..e3073a88 100644 --- a/packages/fleather/lib/src/rendering/editable_text_line.dart +++ b/packages/fleather/lib/src/rendering/editable_text_line.dart @@ -519,6 +519,9 @@ class RenderEditableTextLine extends RenderEditableBox { bool _attachedToCursorController = false; + @override + bool isRepaintBoundary = true; + @override void attach(covariant PipelineOwner owner) { super.attach(owner); diff --git a/packages/fleather/lib/src/rendering/editor.dart b/packages/fleather/lib/src/rendering/editor.dart index ce069de5..371c90fb 100644 --- a/packages/fleather/lib/src/rendering/editor.dart +++ b/packages/fleather/lib/src/rendering/editor.dart @@ -862,6 +862,7 @@ class RenderEditor extends RenderEditableContainerBox _floatingCursorRect = null; _cursorController.setFloatingCursorTextPosition(null); } + markNeedsPaint(); } void _paintFloatingCursor(PaintingContext context, Offset offset) { diff --git a/packages/fleather/lib/src/rendering/embed_proxy.dart b/packages/fleather/lib/src/rendering/embed_proxy.dart index aebc7c38..ede2c4c6 100644 --- a/packages/fleather/lib/src/rendering/embed_proxy.dart +++ b/packages/fleather/lib/src/rendering/embed_proxy.dart @@ -9,6 +9,9 @@ import 'editable_box.dart'; class RenderEmbedProxy extends RenderProxyBox implements RenderContentProxyBox { RenderEmbedProxy({RenderBox? child}) : super(child); + @override + bool isRepaintBoundary = true; + @override List getBoxesForSelection(TextSelection selection) { if (selection.isCollapsed) {