diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/layout/tile.rs | 53 | ||||
| -rw-r--r-- | src/layout/workspace.rs | 1 |
2 files changed, 23 insertions, 31 deletions
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<W: LayoutElement> Tile<W> { renderer: &mut R, location: Point<i32, Logical>, scale: Scale<f64>, - ) -> Vec<TileRenderElement<R>> + ) -> impl Iterator<Item = TileRenderElement<R>> where <R as Renderer>::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<W: LayoutElement> Tile<W> { 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) } } diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index f9f786a9..09c53ecf 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -1095,7 +1095,6 @@ impl<W: LayoutElement> Workspace<W> { // Draw the window itself. rv.extend( tile.render(renderer, tile_pos, output_scale) - .into_iter() .map(Into::into), ); |
