selection.dart 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import 'package:xterm/mouse/position.dart';
  2. class Selection {
  3. Position? _start;
  4. Position? _end;
  5. var _endFixed = false;
  6. Position? get start => _start;
  7. Position? get end => _end;
  8. void init(Position position) {
  9. _start = position;
  10. _end = position;
  11. _endFixed = false;
  12. }
  13. void update(Position position) {
  14. final start = _start;
  15. if (start == null) {
  16. return;
  17. }
  18. if (position.isBefore(start) && !_endFixed) {
  19. _endFixed = true;
  20. _end = _start;
  21. }
  22. if (position.isAfter(start) && _endFixed) {
  23. _endFixed = false;
  24. _start = _end;
  25. }
  26. if (_endFixed) {
  27. _start = position;
  28. } else {
  29. _end = position;
  30. }
  31. // print('($_start, $end');
  32. }
  33. void clear() {
  34. _start = null;
  35. _end = null;
  36. _endFixed = false;
  37. }
  38. bool contains(Position position) {
  39. if (isEmpty) {
  40. return false;
  41. }
  42. return _start!.isBeforeOrSame(position) && _end!.isAfterOrSame(position);
  43. }
  44. bool get isEmpty {
  45. return _start == null || _end == null;
  46. }
  47. }