diff options
author | 2023-09-18 13:39:47 +0200 | |
---|---|---|
committer | 2023-09-18 13:39:47 +0200 | |
commit | d1440ceca6340d045e556eb05354c254881732f0 (patch) | |
tree | 7f90ee5c78f67bbd64ed8d4b70fc2bc60cd29736 /graphics | |
parent | 8f8528a4ccee049aba779fe86cda786a52afac30 (diff) | |
download | iced-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.rs | 26 |
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(); |