| 
														
															@@ -1,10 +1,11 @@ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import 'package:flowy_editor/flowy_cursor_widget.dart'; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import 'package:flowy_editor/render/selection/flowy_cursor_widget.dart'; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import 'package:flowy_editor/render/selection/flowy_selection_widget.dart'; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import 'package:flutter/gestures.dart'; 
														 | 
														
														 | 
														
															 import 'package:flutter/gestures.dart'; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import 'package:flutter/material.dart'; 
														 | 
														
														 | 
														
															 import 'package:flutter/material.dart'; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import 'editor_state.dart'; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import 'document/node.dart'; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import '../render/selectable.dart'; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import '../editor_state.dart'; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import '../document/node.dart'; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import '../render/selection/selectable.dart'; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 /// Process selection and cursor 
														 | 
														
														 | 
														
															 /// Process selection and cursor 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 mixin _FlowySelectionService<T extends StatefulWidget> on State<T> { 
														 | 
														
														 | 
														
															 mixin _FlowySelectionService<T extends StatefulWidget> on State<T> { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -51,8 +52,8 @@ mixin _FlowySelectionService<T extends StatefulWidget> on State<T> { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   ); 
														 | 
														
														 | 
														
															   ); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-class FlowySelectionWidget extends StatefulWidget { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  const FlowySelectionWidget({ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+class FlowySelectionService extends StatefulWidget { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  const FlowySelectionService({ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     Key? key, 
														 | 
														
														 | 
														
															     Key? key, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     required this.editorState, 
														 | 
														
														 | 
														
															     required this.editorState, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     required this.child, 
														 | 
														
														 | 
														
															     required this.child, 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -62,14 +63,15 @@ class FlowySelectionWidget extends StatefulWidget { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   final Widget child; 
														 | 
														
														 | 
														
															   final Widget child; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															   @override 
														 | 
														
														 | 
														
															   @override 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  State<FlowySelectionWidget> createState() => _FlowySelectionWidgetState(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  State<FlowySelectionService> createState() => _FlowySelectionServiceState(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-class _FlowySelectionWidgetState extends State<FlowySelectionWidget> 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+class _FlowySelectionServiceState extends State<FlowySelectionService> 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     with _FlowySelectionService { 
														 | 
														
														 | 
														
															     with _FlowySelectionService { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   final _cursorKey = GlobalKey(debugLabel: 'cursor'); 
														 | 
														
														 | 
														
															   final _cursorKey = GlobalKey(debugLabel: 'cursor'); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  List<OverlayEntry> selectionOverlays = []; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  final List<OverlayEntry> _selectionOverlays = []; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  final List<OverlayEntry> _cursorOverlays = []; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															   EditorState get editorState => widget.editorState; 
														 | 
														
														 | 
														
															   EditorState get editorState => widget.editorState; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -102,7 +104,7 @@ class _FlowySelectionWidgetState extends State<FlowySelectionWidget> 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															   @override 
														 | 
														
														 | 
														
															   @override 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   void updateSelection(Offset start, Offset end) { 
														 | 
														
														 | 
														
															   void updateSelection(Offset start, Offset end) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    _clearOverlay(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    _clearAllOverlayEntries(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     final nodes = selectedNodes; 
														 | 
														
														 | 
														
															     final nodes = selectedNodes; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     editorState.selectedNodes = nodes; 
														 | 
														
														 | 
														
															     editorState.selectedNodes = nodes; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -115,26 +117,24 @@ class _FlowySelectionWidgetState extends State<FlowySelectionWidget> 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         continue; 
														 | 
														
														 | 
														
															         continue; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       } 
														 | 
														
														 | 
														
															       } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       final selectable = node.key?.currentState as Selectable; 
														 | 
														
														 | 
														
															       final selectable = node.key?.currentState as Selectable; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-      final selectionRects = 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-          selectable.getSelectionRectsInSelection(start, end); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      final selectionRects = selectable.getSelectionRectsInRange(start, end); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       for (final rect in selectionRects) { 
														 | 
														
														 | 
														
															       for (final rect in selectionRects) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         final overlay = OverlayEntry( 
														 | 
														
														 | 
														
															         final overlay = OverlayEntry( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-          builder: ((context) => Positioned.fromRect( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+          builder: ((context) => FlowySelectionWidget( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                color: Colors.yellow.withAlpha(100), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                layerLink: node.layerLink, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 rect: rect, 
														 | 
														
														 | 
														
															                 rect: rect, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                child: Container( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                  color: Colors.yellow.withAlpha(100), 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                ), 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															               )), 
														 | 
														
														 | 
														
															               )), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         ); 
														 | 
														
														 | 
														
															         ); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        selectionOverlays.add(overlay); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        _selectionOverlays.add(overlay); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       } 
														 | 
														
														 | 
														
															       } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    Overlay.of(context)?.insertAll(selectionOverlays); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    Overlay.of(context)?.insertAll(_selectionOverlays); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   } 
														 | 
														
														 | 
														
															   } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															   @override 
														 | 
														
														 | 
														
															   @override 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   void updateCursor(Offset offset) { 
														 | 
														
														 | 
														
															   void updateCursor(Offset offset) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    _clearOverlay(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    _clearAllOverlayEntries(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     final nodes = selectedNodes; 
														 | 
														
														 | 
														
															     final nodes = selectedNodes; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     editorState.selectedNodes = nodes; 
														 | 
														
														 | 
														
															     editorState.selectedNodes = nodes; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -156,8 +156,8 @@ class _FlowySelectionWidgetState extends State<FlowySelectionWidget> 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             layerLink: selectedNode.layerLink, 
														 | 
														
														 | 
														
															             layerLink: selectedNode.layerLink, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															           )), 
														 | 
														
														 | 
														
															           )), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     ); 
														 | 
														
														 | 
														
															     ); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    selectionOverlays.add(cursor); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    Overlay.of(context)?.insertAll(selectionOverlays); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    _cursorOverlays.add(cursor); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    Overlay.of(context)?.insertAll(_cursorOverlays); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   } 
														 | 
														
														 | 
														
															   } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															   @override 
														 | 
														
														 | 
														
															   @override 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -271,8 +271,19 @@ class _FlowySelectionWidgetState extends State<FlowySelectionWidget> 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     // do nothing 
														 | 
														
														 | 
														
															     // do nothing 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   } 
														 | 
														
														 | 
														
															   } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  void _clearOverlay() { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    selectionOverlays 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  void _clearAllOverlayEntries() { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    _clearSelection(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    _clearCursor(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  void _clearSelection() { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    _selectionOverlays 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      ..forEach((overlay) => overlay.remove()) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      ..clear(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  void _clearCursor() { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    _cursorOverlays 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       ..forEach((overlay) => overlay.remove()) 
														 | 
														
														 | 
														
															       ..forEach((overlay) => overlay.remove()) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       ..clear(); 
														 | 
														
														 | 
														
															       ..clear(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   } 
														 | 
														
														 | 
														
															   } 
														 |