diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-04 22:29:09 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-04 22:31:44 +0400 |
| commit | da826e42aaaa6dc559db67f4708db8bc23754f46 (patch) | |
| tree | d4f91d3ac79e922d29b3cf917364649dd42378d7 /src | |
| parent | b824cf90ab10f4ba5e1e0b23e0b2cf840814c02a (diff) | |
| download | niri-da826e42aaaa6dc559db67f4708db8bc23754f46.tar.gz niri-da826e42aaaa6dc559db67f4708db8bc23754f46.tar.bz2 niri-da826e42aaaa6dc559db67f4708db8bc23754f46.zip | |
layout: Add LayoutElementRenderElement
Allows for testing layout rendering without Wayland windows.
Diffstat (limited to 'src')
| -rw-r--r-- | src/layout/mod.rs | 20 | ||||
| -rw-r--r-- | src/layout/tile.rs | 7 | ||||
| -rw-r--r-- | src/layout/workspace.rs | 5 |
3 files changed, 22 insertions, 10 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 6b648816..2a551b82 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -35,6 +35,8 @@ use std::rc::Rc; use std::time::Duration; use niri_config::{self, CenterFocusedColumn, Config, SizeChange, Struts}; +use smithay::backend::renderer::element::solid::SolidColorRenderElement; +use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement; use smithay::backend::renderer::element::AsRenderElements; use smithay::backend::renderer::{ImportAll, Renderer}; use smithay::desktop::space::SpaceElement; @@ -43,15 +45,14 @@ use smithay::output::Output; use smithay::reexports::wayland_protocols::xdg::decoration::zv1::server::zxdg_toplevel_decoration_v1; use smithay::reexports::wayland_protocols::xdg::shell::server::xdg_toplevel; use smithay::reexports::wayland_server::protocol::wl_surface::WlSurface; +use smithay::render_elements; use smithay::utils::{Logical, Point, Rectangle, Scale, Size, Transform}; use smithay::wayland::compositor::{send_surface_state, with_states}; use smithay::wayland::shell::xdg::SurfaceCachedState; pub use self::monitor::MonitorRenderElement; use self::monitor::{Monitor, WorkspaceSwitch, WorkspaceSwitchGesture}; -use self::workspace::{ - compute_working_area, Column, ColumnWidth, OutputId, Workspace, WorkspaceRenderElement, -}; +use self::workspace::{compute_working_area, Column, ColumnWidth, OutputId, Workspace}; use crate::animation::Animation; use crate::utils::output_size; @@ -60,6 +61,13 @@ mod monitor; mod tile; mod workspace; +render_elements! { + #[derive(Debug)] + pub LayoutElementRenderElement<R> where R: ImportAll; + Wayland = WaylandSurfaceRenderElement<R>, + SolidColor = SolidColorRenderElement, +} + pub trait LayoutElement: PartialEq { /// Visual size of the element. /// @@ -86,7 +94,7 @@ pub trait LayoutElement: PartialEq { renderer: &mut R, location: Point<i32, Logical>, scale: Scale<f64>, - ) -> Vec<WorkspaceRenderElement<R>> + ) -> Vec<LayoutElementRenderElement<R>> where <R as Renderer>::TextureId: 'static; @@ -224,7 +232,7 @@ impl LayoutElement for Window { renderer: &mut R, location: Point<i32, Logical>, scale: Scale<f64>, - ) -> Vec<WorkspaceRenderElement<R>> + ) -> Vec<LayoutElementRenderElement<R>> where <R as Renderer>::TextureId: 'static, { @@ -1667,7 +1675,7 @@ mod tests { _renderer: &mut R, _location: Point<i32, Logical>, _scale: Scale<f64>, - ) -> Vec<WorkspaceRenderElement<R>> { + ) -> Vec<LayoutElementRenderElement<R>> { vec![] } diff --git a/src/layout/tile.rs b/src/layout/tile.rs index 4f668c17..7fa6deb2 100644 --- a/src/layout/tile.rs +++ b/src/layout/tile.rs @@ -244,7 +244,12 @@ impl<W: LayoutElement> Tile<W> { let mut rv = Vec::new(); let window_pos = location + self.window_loc(); - rv.extend(self.window.render(renderer, window_pos, scale)); + rv.extend( + self.window + .render(renderer, window_pos, scale) + .into_iter() + .map(Into::into), + ); if self.effective_border_width().is_some() { rv.extend( diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index 70237f06..900175a1 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -5,7 +5,6 @@ use std::rc::Rc; use std::time::Duration; use niri_config::{CenterFocusedColumn, PresetWidth, SizeChange, Struts}; -use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement; use smithay::backend::renderer::element::utils::RelocateRenderElement; use smithay::backend::renderer::{ImportAll, Renderer}; use smithay::desktop::space::SpaceElement; @@ -17,7 +16,7 @@ use smithay::utils::{Logical, Point, Rectangle, Scale, Size}; use super::focus_ring::{FocusRing, FocusRingRenderElement}; use super::tile::Tile; -use super::{LayoutElement, Options}; +use super::{LayoutElement, LayoutElementRenderElement, Options}; use crate::animation::Animation; use crate::utils::output_size; @@ -83,7 +82,7 @@ pub struct OutputId(String); render_elements! { #[derive(Debug)] pub WorkspaceRenderElement<R> where R: ImportAll; - Wayland = WaylandSurfaceRenderElement<R>, + LayoutElement = LayoutElementRenderElement<R>, FocusRing = FocusRingRenderElement, Border = RelocateRenderElement<FocusRingRenderElement>, } |
