aboutsummaryrefslogtreecommitdiff
path: root/src/layout/mod.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-05-01 19:02:22 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-05-01 19:04:11 +0400
commit9309b3be61bb1e7d4ef3f9350b2646413850119b (patch)
tree08e5d2d13b34366fcd907eaf835dc120c17c4fa2 /src/layout/mod.rs
parentc5be2dd5494fc33eb2e3bb7a28c5834c8f60078c (diff)
downloadniri-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.rs32
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) {