From 2b1e3894950af5c4cd66580079734effb4a81dc3 Mon Sep 17 00:00:00 2001 From: dragonn Date: Wed, 19 Jan 2022 21:12:54 +0100 Subject: [PATCH] move DynamicRenderElementMap and it's friends to elements.rs --- src/desktop/space/element.rs | 51 ++++++++++++++++++++++++++++++++++++ src/desktop/space/mod.rs | 50 ----------------------------------- 2 files changed, 51 insertions(+), 50 deletions(-) diff --git a/src/desktop/space/element.rs b/src/desktop/space/element.rs index 287337e..d623e6a 100644 --- a/src/desktop/space/element.rs +++ b/src/desktop/space/element.rs @@ -12,6 +12,7 @@ use wayland_server::protocol::wl_surface::WlSurface; /// Enum for indicating on with layer a render element schould be draw #[derive(Debug, PartialEq, Eq)] +#[non_exhaustive] pub enum RenderLayer { /// Bellow every other elements Bottom, @@ -27,6 +28,56 @@ pub enum RenderLayer { Top, } +/// Elements rendered by [`Space::render_output`] in addition to windows, layers and popups. +pub type DynamicRenderElements = + Box::Frame, ::Error, ::TextureId>>; + +pub(super) type SpaceElem = + dyn SpaceElement::Frame, ::Error, ::TextureId>; + +pub(super) struct DynamicRenderElementMap<'a, R: Renderer>(pub(super) &'a [DynamicRenderElements]); + +impl<'a, R> DynamicRenderElementMap<'a, R> +where + R: Renderer + ImportAll + 'static, + R::TextureId: 'static, + R::Error: 'static, + R::Frame: 'static, +{ + pub fn iter_bottom(&'a self) -> Box> + 'a> { + self.iter_layer(RenderLayer::Bottom) + } + + pub fn iter_above_background(&'a self) -> Box> + 'a> { + self.iter_layer(RenderLayer::AboveBackground) + } + + pub fn iter_before_windows(&'a self) -> Box> + 'a> { + self.iter_layer(RenderLayer::BeforeWindows) + } + + pub fn iter_after_windows(&'a self) -> Box> + 'a> { + self.iter_layer(RenderLayer::AfterWindows) + } + + pub fn iter_before_overlay(&'a self) -> Box> + 'a> { + self.iter_layer(RenderLayer::BeforeOverlay) + } + + pub fn iter_top(&'a self) -> Box> + 'a> { + self.iter_layer(RenderLayer::Top) + } + + pub fn iter_layer(&'a self, layer: RenderLayer) -> Box> + 'a> { + Box::new( + self.0 + .iter() + .filter(move |c| c.layer() == layer) + .map(|c| c as &SpaceElem), + ) + } +} + /// Trait for custom elements to be rendered during [`Space::render_output`]. pub trait RenderElement where diff --git a/src/desktop/space/mod.rs b/src/desktop/space/mod.rs index c193192..93b0ed9 100644 --- a/src/desktop/space/mod.rs +++ b/src/desktop/space/mod.rs @@ -44,56 +44,6 @@ pub struct Space { logger: ::slog::Logger, } -/// Elements rendered by [`Space::render_output`] in addition to windows, layers and popups. -pub type DynamicRenderElements = - Box::Frame, ::Error, ::TextureId>>; - -type SpaceElem = - dyn SpaceElement::Frame, ::Error, ::TextureId>; - -struct DynamicRenderElementMap<'a, R: Renderer>(&'a [DynamicRenderElements]); - -impl<'a, R> DynamicRenderElementMap<'a, R> -where - R: Renderer + ImportAll + 'static, - R::TextureId: 'static, - R::Error: 'static, - R::Frame: 'static, -{ - pub fn iter_bottom(&'a self) -> Box> + 'a> { - self.iter_layer(RenderLayer::Bottom) - } - - pub fn iter_above_background(&'a self) -> Box> + 'a> { - self.iter_layer(RenderLayer::AboveBackground) - } - - pub fn iter_before_windows(&'a self) -> Box> + 'a> { - self.iter_layer(RenderLayer::BeforeWindows) - } - - pub fn iter_after_windows(&'a self) -> Box> + 'a> { - self.iter_layer(RenderLayer::AfterWindows) - } - - pub fn iter_before_overlay(&'a self) -> Box> + 'a> { - self.iter_layer(RenderLayer::BeforeOverlay) - } - - pub fn iter_top(&'a self) -> Box> + 'a> { - self.iter_layer(RenderLayer::Top) - } - - pub fn iter_layer(&'a self, layer: RenderLayer) -> Box> + 'a> { - Box::new( - self.0 - .iter() - .filter(move |c| c.layer() == layer) - .map(|c| c as &SpaceElem), - ) - } -} - impl PartialEq for Space { fn eq(&self, other: &Space) -> bool { self.id == other.id