From bf978fe98db51c411fe7eedc0951b9ebc42a976d Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Mon, 5 Feb 2024 07:58:33 +0400 Subject: layout/tile: Return Iterator of render elements Avoid a Vec. --- src/layout/tile.rs | 53 +++++++++++++++++++++++------------------------------ 1 file changed, 23 insertions(+), 30 deletions(-) (limited to 'src/layout/tile.rs') diff --git a/src/layout/tile.rs b/src/layout/tile.rs index 1c25fa4a..99c4876b 100644 --- a/src/layout/tile.rs +++ b/src/layout/tile.rs @@ -244,36 +244,30 @@ impl Tile { renderer: &mut R, location: Point, scale: Scale, - ) -> Vec> + ) -> impl Iterator> where ::TextureId: 'static, { - let mut rv = Vec::new(); - let window_pos = location + self.window_loc(); - rv.extend( - self.window - .render(renderer, window_pos, scale) - .into_iter() - .map(Into::into), - ); - - if self.effective_border_width().is_some() { - rv.extend( - self.border - .render(scale) - .map(|elem| { - RelocateRenderElement::from_element( - elem, - location.to_physical_precise_round(scale), - Relocate::Relative, - ) - }) - .map(Into::into), - ); - } - - if self.is_fullscreen { + let rv = self + .window + .render(renderer, window_pos, scale) + .into_iter() + .map(Into::into); + + let elem = self.effective_border_width().map(|_| { + self.border.render(scale).map(move |elem| { + RelocateRenderElement::from_element( + elem, + location.to_physical_precise_round(scale), + Relocate::Relative, + ) + .into() + }) + }); + let rv = rv.chain(elem.into_iter().flatten()); + + let elem = self.is_fullscreen.then(|| { let elem = SolidColorRenderElement::from_buffer( &self.fullscreen_backdrop, location.to_physical_precise_round(scale), @@ -281,9 +275,8 @@ impl Tile { 1., Kind::Unspecified, ); - rv.push(RelocateRenderElement::from_element(elem, (0, 0), Relocate::Relative).into()); - } - - rv + RelocateRenderElement::from_element(elem, (0, 0), Relocate::Relative).into() + }); + rv.chain(elem) } } -- cgit