|  | @@ -2,33 +2,40 @@ import 'package:flowy_editor/src/document/position.dart';
 | 
	
		
			
				|  |  |  import 'package:flowy_editor/src/document/selection.dart';
 | 
	
		
			
				|  |  |  import 'package:flutter/material.dart';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/// [Selectable] is used for the editor to calculate the position
 | 
	
		
			
				|  |  | +///   and size of the selection.
 | 
	
		
			
				|  |  | +///
 | 
	
		
			
				|  |  | +/// The widget returned by NodeWidgetBuilder must be with [Selectable],
 | 
	
		
			
				|  |  | +///   otherwise the [FlowySelectionService] will not work properly.
 | 
	
		
			
				|  |  |  ///
 | 
	
		
			
				|  |  |  mixin Selectable<T extends StatefulWidget> on State<T> {
 | 
	
		
			
				|  |  | -  /// Returns a [List] of the [Rect] selection surrounded by start and end
 | 
	
		
			
				|  |  | +  /// Returns the [Selection] surrounded by start and end
 | 
	
		
			
				|  |  |    ///   in current widget.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  |    /// [start] and [end] are the offsets under the global coordinate system.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  | -  /// The return result must be a [List] of the [Rect]
 | 
	
		
			
				|  |  | -  ///   under the local coordinate system.
 | 
	
		
			
				|  |  |    Selection getSelectionInRange(Offset start, Offset end);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  /// Returns a [List] of the [Rect] area within selection
 | 
	
		
			
				|  |  | +  ///   in current widget.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// The return result must be a [List] of the [Rect]
 | 
	
		
			
				|  |  | +  ///   under the local coordinate system.
 | 
	
		
			
				|  |  |    List<Rect> getRectsInSelection(Selection selection);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  /// Returns a [Rect] for the offset in current widget.
 | 
	
		
			
				|  |  | +  /// Returns [Position] for the offset in current widget.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  |    /// [start] is the offset of the global coordination system.
 | 
	
		
			
				|  |  | -  ///
 | 
	
		
			
				|  |  | -  /// The return result must be an offset of the local coordinate system.
 | 
	
		
			
				|  |  |    Position getPositionInOffset(Offset start);
 | 
	
		
			
				|  |  | -  Selection? getWorldBoundaryInOffset(Offset start) {
 | 
	
		
			
				|  |  | -    return null;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  /// Returns [Rect] for the position in current widget.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// The return result must be an offset of the local coordinate system.
 | 
	
		
			
				|  |  |    Rect? getCursorRectInPosition(Position position) {
 | 
	
		
			
				|  |  |      return null;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  /// Return global offset from local offset.
 | 
	
		
			
				|  |  |    Offset localToGlobal(Offset offset);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    Position start();
 | 
	
	
		
			
				|  | @@ -36,9 +43,15 @@ mixin Selectable<T extends StatefulWidget> on State<T> {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    /// For [TextNode] only.
 | 
	
		
			
				|  |  |    ///
 | 
	
		
			
				|  |  | -  /// Returns a [TextSelection] or [Null].
 | 
	
		
			
				|  |  | -  ///
 | 
	
		
			
				|  |  |    /// Only the widget rendered by [TextNode] need to implement the detail,
 | 
	
		
			
				|  |  |    ///   and the rest can return null.
 | 
	
		
			
				|  |  |    TextSelection? getTextSelectionInSelection(Selection selection) => null;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /// For [TextNode] only.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// Only the widget rendered by [TextNode] need to implement the detail,
 | 
	
		
			
				|  |  | +  ///   and the rest can return null.
 | 
	
		
			
				|  |  | +  Selection? getWorldBoundaryInOffset(Offset start) {
 | 
	
		
			
				|  |  | +    return null;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  }
 |