selection.dart 1019 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. if (_start == null) {
  15. return;
  16. }
  17. if (position.isBefore(_start) && !_endFixed) {
  18. _endFixed = true;
  19. _end = _start;
  20. }
  21. if (position.isAfter(_start) && _endFixed) {
  22. _endFixed = false;
  23. _start = _end;
  24. }
  25. if (_endFixed) {
  26. _start = position;
  27. } else {
  28. _end = position;
  29. }
  30. // print('($_start, $end');
  31. }
  32. void clear() {
  33. _start = null;
  34. _end = null;
  35. _endFixed = false;
  36. }
  37. bool contains(Position position) {
  38. if (isEmpty) {
  39. return false;
  40. }
  41. return _start.isBeforeOrSame(position) && _end.isAfterOrSame(position);
  42. }
  43. bool get isEmpty {
  44. return _start == null || _end == null;
  45. }
  46. }