use crate::{ backend::renderer::{ element::{ surface::{render_elements_from_surface_tree, WaylandSurfaceRenderElement}, AsRenderElements, Kind, }, ImportAll, Renderer, }, desktop::{LayerSurface, PopupManager}, utils::{Physical, Point, Scale}, }; impl AsRenderElements for LayerSurface where R: Renderer + ImportAll, R::TextureId: Clone + 'static, { type RenderElement = WaylandSurfaceRenderElement; #[profiling::function] fn render_elements>>( &self, renderer: &mut R, location: Point, scale: Scale, alpha: f32, ) -> Vec { let surface = self.wl_surface(); let mut render_elements: Vec = Vec::new(); let popup_render_elements = PopupManager::popups_for_surface(surface).flat_map(|(popup, popup_offset)| { let offset = (popup_offset - popup.geometry().loc) .to_f64() .to_physical(scale) .to_i32_round(); render_elements_from_surface_tree( renderer, popup.wl_surface(), location + offset, scale, alpha, Kind::Unspecified, ) }); render_elements.extend(popup_render_elements); render_elements.extend(render_elements_from_surface_tree( renderer, surface, location, scale, alpha, Kind::Unspecified, )); render_elements } }