diff options
author | 2024-07-28 14:17:59 +0200 | |
---|---|---|
committer | 2024-07-28 14:17:59 +0200 | |
commit | 2e4c55bbffb45e7112e753fd77d78071acb252b1 (patch) | |
tree | 5f186b0cd591639abb9c40dc7889f2b2ccf6ca76 /graphics | |
parent | 2d69464846e6e1a7c59f78d894d8801ff82c5929 (diff) | |
download | iced-2e4c55bbffb45e7112e753fd77d78071acb252b1.tar.gz iced-2e4c55bbffb45e7112e753fd77d78071acb252b1.tar.bz2 iced-2e4c55bbffb45e7112e753fd77d78071acb252b1.zip |
Use `for` loop instead of `fold` in `span_bounds`
Diffstat (limited to 'graphics')
-rw-r--r-- | graphics/src/text/paragraph.rs | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/graphics/src/text/paragraph.rs b/graphics/src/text/paragraph.rs index 540e669b..b9f9c833 100644 --- a/graphics/src/text/paragraph.rs +++ b/graphics/src/text/paragraph.rs @@ -254,9 +254,10 @@ impl core::text::Paragraph for Paragraph { fn span_bounds(&self, index: usize) -> Vec<Rectangle> { let internal = self.internal(); + let mut bounds = Vec::new(); let mut current_bounds = None; - let mut bounds = internal + let glyphs = internal .buffer .layout_runs() .flat_map(|run| { @@ -268,35 +269,34 @@ impl core::text::Paragraph for Paragraph { .map(move |glyph| (line_top, line_height, glyph)) }) .skip_while(|(_, _, glyph)| glyph.metadata != index) - .take_while(|(_, _, glyph)| glyph.metadata == index) - .fold(vec![], |mut spans, (line_top, line_height, glyph)| { - let y = line_top + glyph.y; - - let new_bounds = || { - Rectangle::new( - Point::new(glyph.x, y), - Size::new( - glyph.w, - glyph.line_height_opt.unwrap_or(line_height), - ), - ) - }; - - match current_bounds.as_mut() { - None => { - current_bounds = Some(new_bounds()); - } - Some(bounds) if y != bounds.y => { - spans.push(*bounds); - *bounds = new_bounds(); - } - Some(bounds) => { - bounds.width += glyph.w; - } + .take_while(|(_, _, glyph)| glyph.metadata == index); + + for (line_top, line_height, glyph) in glyphs { + let y = line_top + glyph.y; + + let new_bounds = || { + Rectangle::new( + Point::new(glyph.x, y), + Size::new( + glyph.w, + glyph.line_height_opt.unwrap_or(line_height), + ), + ) + }; + + match current_bounds.as_mut() { + None => { + current_bounds = Some(new_bounds()); } - - spans - }); + Some(current_bounds) if y != current_bounds.y => { + bounds.push(*current_bounds); + *current_bounds = new_bounds(); + } + Some(current_bounds) => { + current_bounds.width += glyph.w; + } + } + } bounds.extend(current_bounds); bounds |