| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import 'package:xterm/mouse/position.dart';
- class Selection {
- Position? _start;
- Position? _end;
- var _endFixed = false;
- Position? get start => _start;
- Position? get end => _end;
- void init(Position position) {
- _start = position;
- _end = position;
- _endFixed = false;
- }
- void update(Position position) {
- final start = _start;
- if (start == null) {
- return;
- }
- if (position.isBefore(start) && !_endFixed) {
- _endFixed = true;
- _end = _start;
- }
- if (position.isAfter(start) && _endFixed) {
- _endFixed = false;
- _start = _end;
- }
- if (_endFixed) {
- _start = position;
- } else {
- _end = position;
- }
- // print('($_start, $end');
- }
- void clear() {
- _start = null;
- _end = null;
- _endFixed = false;
- }
- bool contains(Position position) {
- if (isEmpty) {
- return false;
- }
- return _start!.isBeforeOrSame(position) && _end!.isAfterOrSame(position);
- }
- bool get isEmpty {
- return _start == null || _end == null;
- }
- }
|