diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-01 19:02:22 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-01 19:04:11 +0400 |
| commit | 9309b3be61bb1e7d4ef3f9350b2646413850119b (patch) | |
| tree | 08e5d2d13b34366fcd907eaf835dc120c17c4fa2 /src/layout/mod.rs | |
| parent | c5be2dd5494fc33eb2e3bb7a28c5834c8f60078c (diff) | |
| download | niri-9309b3be61bb1e7d4ef3f9350b2646413850119b.tar.gz niri-9309b3be61bb1e7d4ef3f9350b2646413850119b.tar.bz2 niri-9309b3be61bb1e7d4ef3f9350b2646413850119b.zip | |
Split rendering between popups and window surface
Diffstat (limited to 'src/layout/mod.rs')
| -rw-r--r-- | src/layout/mod.rs | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 5ca48ad6..83715364 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -51,7 +51,7 @@ use self::workspace::{compute_working_area, Column, ColumnWidth, OutputId, Works use crate::niri_render_elements; use crate::render_helpers::renderer::NiriRenderer; use crate::render_helpers::snapshot::RenderSnapshot; -use crate::render_helpers::{BakedBuffer, RenderTarget}; +use crate::render_helpers::{BakedBuffer, RenderTarget, SplitElements}; use crate::utils::output_size; use crate::window::ResolvedWindowRules; @@ -108,7 +108,31 @@ pub trait LayoutElement { scale: Scale<f64>, alpha: f32, target: RenderTarget, - ) -> Vec<LayoutElementRenderElement<R>>; + ) -> SplitElements<LayoutElementRenderElement<R>>; + + /// Renders the non-popup parts of the element. + fn render_normal<R: NiriRenderer>( + &self, + renderer: &mut R, + location: Point<i32, Logical>, + scale: Scale<f64>, + alpha: f32, + target: RenderTarget, + ) -> Vec<LayoutElementRenderElement<R>> { + self.render(renderer, location, scale, alpha, target).normal + } + + /// Renders the popups of the element. + fn render_popups<R: NiriRenderer>( + &self, + renderer: &mut R, + location: Point<i32, Logical>, + scale: Scale<f64>, + alpha: f32, + target: RenderTarget, + ) -> Vec<LayoutElementRenderElement<R>> { + self.render(renderer, location, scale, alpha, target).popups + } fn request_size(&mut self, size: Size<i32, Logical>, animate: bool); fn request_fullscreen(&self, size: Size<i32, Logical>); @@ -1984,8 +2008,8 @@ mod tests { _scale: Scale<f64>, _alpha: f32, _target: RenderTarget, - ) -> Vec<LayoutElementRenderElement<R>> { - vec![] + ) -> SplitElements<LayoutElementRenderElement<R>> { + SplitElements::default() } fn request_size(&mut self, size: Size<i32, Logical>, _animate: bool) { |
