summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2023-09-18 13:39:47 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2023-09-18 13:39:47 +0200
commitd1440ceca6340d045e556eb05354c254881732f0 (patch)
tree7f90ee5c78f67bbd64ed8d4b70fc2bc60cd29736 /graphics
parent8f8528a4ccee049aba779fe86cda786a52afac30 (diff)
downloadiced-d1440ceca6340d045e556eb05354c254881732f0.tar.gz
iced-d1440ceca6340d045e556eb05354c254881732f0.tar.bz2
iced-d1440ceca6340d045e556eb05354c254881732f0.zip
Find correct `last_visible_line` in `Editor::highlight`
Diffstat (limited to 'graphics')
-rw-r--r--graphics/src/text/editor.rs26
1 files changed, 21 insertions, 5 deletions
diff --git a/graphics/src/text/editor.rs b/graphics/src/text/editor.rs
index 95061c3c..18c9b572 100644
--- a/graphics/src/text/editor.rs
+++ b/graphics/src/text/editor.rs
@@ -538,11 +538,27 @@ impl editor::Editor for Editor {
let internal = self.internal();
let buffer = internal.editor.buffer();
- let scroll = buffer.scroll();
- let visible_lines = buffer.visible_lines();
- let last_visible_line = ((scroll + visible_lines) as usize)
- .min(buffer.lines.len())
- .saturating_sub(1);
+ let mut window = buffer.scroll() + buffer.visible_lines();
+
+ let last_visible_line = buffer
+ .lines
+ .iter()
+ .enumerate()
+ .find_map(|(i, line)| {
+ let visible_lines = line
+ .layout_opt()
+ .as_ref()
+ .expect("Line layout should be cached")
+ .len() as i32;
+
+ if window > visible_lines {
+ window -= visible_lines;
+ None
+ } else {
+ Some(i)
+ }
+ })
+ .unwrap_or(buffer.lines.len());
let current_line = highlighter.current_line();