aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPolesznyák Márk <contact@pml68.dev>2025-10-21 19:58:20 +0200
committerPolesznyák Márk <contact@pml68.dev>2025-10-21 19:59:43 +0200
commit58fe7987198e001f2ab1bc27406130f2c581961d (patch)
treea1108ab2e7afd54ee453ed80badf139c5bf5b467
parentfeat: implement triple-click + drag by-line selection (diff)
downloadiced_selection-58fe7987198e001f2ab1bc27406130f2c581961d.tar.gz
fix: triple-click + drag edge cases
-rw-r--r--src/selection.rs29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/selection.rs b/src/selection.rs
index 2c1e43d..d3cdb76 100644
--- a/src/selection.rs
+++ b/src/selection.rs
@@ -215,6 +215,12 @@ impl Selection {
new_line: usize,
paragraph: &Paragraph,
) {
+ if self.active_end().line == new_line {
+ return;
+ }
+
+ let old_direction = self.direction;
+
if new_line < self.start.line {
self.direction = Direction::Left;
} else if new_line > self.end.line {
@@ -224,9 +230,28 @@ impl Selection {
let (start, end) = if self.direction == Direction::Right {
let value = Value::new(paragraph.buffer().lines[new_line].text());
- (self.start, SelectionEnd::new(new_line, value.len()))
+ let start = if self.direction == old_direction {
+ self.start
+ } else {
+ SelectionEnd::new(self.end.line, 0)
+ };
+
+ let end = SelectionEnd::new(new_line, value.len());
+
+ (start, end)
} else {
- (SelectionEnd::new(new_line, 0), self.end)
+ let start = SelectionEnd::new(new_line, 0);
+ let end = if self.direction == old_direction {
+ self.end
+ } else {
+ let value = Value::new(
+ paragraph.buffer().lines[self.start.line].text(),
+ );
+
+ SelectionEnd::new(self.start.line, value.len())
+ };
+
+ (start, end)
};
self.moving_line_index = None;