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 '')
| -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(); | 
