diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-04 22:52:11 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-04 22:52:11 +0400 |
| commit | 57521c69c3a406789f38d8aa672b0bc15c947819 (patch) | |
| tree | 64e22533709d443ba2c77282ba9823d48cc87e2d /src | |
| parent | da826e42aaaa6dc559db67f4708db8bc23754f46 (diff) | |
| download | niri-57521c69c3a406789f38d8aa672b0bc15c947819.tar.gz niri-57521c69c3a406789f38d8aa672b0bc15c947819.tar.bz2 niri-57521c69c3a406789f38d8aa672b0bc15c947819.zip | |
layout: Add TileRenderElement
Diffstat (limited to 'src')
| -rw-r--r-- | src/layout/tile.rs | 15 | ||||
| -rw-r--r-- | src/layout/workspace.rs | 14 |
2 files changed, 19 insertions, 10 deletions
diff --git a/src/layout/tile.rs b/src/layout/tile.rs index 7fa6deb2..1c25fa4a 100644 --- a/src/layout/tile.rs +++ b/src/layout/tile.rs @@ -6,11 +6,11 @@ use smithay::backend::renderer::element::solid::{SolidColorBuffer, SolidColorRen use smithay::backend::renderer::element::utils::{Relocate, RelocateRenderElement}; use smithay::backend::renderer::element::Kind; use smithay::backend::renderer::{ImportAll, Renderer}; +use smithay::render_elements; use smithay::utils::{Logical, Point, Rectangle, Scale, Size}; use super::focus_ring::FocusRing; -use super::workspace::WorkspaceRenderElement; -use super::{LayoutElement, Options}; +use super::{LayoutElement, LayoutElementRenderElement, Options}; /// Toplevel window with decorations. #[derive(Debug)] @@ -37,6 +37,13 @@ pub struct Tile<W: LayoutElement> { options: Rc<Options>, } +render_elements! { + #[derive(Debug)] + pub TileRenderElement<R> where R: ImportAll; + LayoutElement = LayoutElementRenderElement<R>, + SolidColor = RelocateRenderElement<SolidColorRenderElement>, +} + impl<W: LayoutElement> Tile<W> { pub fn new(window: W, options: Rc<Options>) -> Self { Self { @@ -237,7 +244,7 @@ impl<W: LayoutElement> Tile<W> { renderer: &mut R, location: Point<i32, Logical>, scale: Scale<f64>, - ) -> Vec<WorkspaceRenderElement<R>> + ) -> Vec<TileRenderElement<R>> where <R as Renderer>::TextureId: 'static, { @@ -274,7 +281,7 @@ impl<W: LayoutElement> Tile<W> { 1., Kind::Unspecified, ); - rv.push(elem.into()); + rv.push(RelocateRenderElement::from_element(elem, (0, 0), Relocate::Relative).into()); } rv diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index 900175a1..f9f786a9 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::utils::RelocateRenderElement; use smithay::backend::renderer::{ImportAll, Renderer}; use smithay::desktop::space::SpaceElement; use smithay::desktop::{layer_map_for_output, Window}; @@ -15,8 +14,8 @@ use smithay::render_elements; use smithay::utils::{Logical, Point, Rectangle, Scale, Size}; use super::focus_ring::{FocusRing, FocusRingRenderElement}; -use super::tile::Tile; -use super::{LayoutElement, LayoutElementRenderElement, Options}; +use super::tile::{Tile, TileRenderElement}; +use super::{LayoutElement, Options}; use crate::animation::Animation; use crate::utils::output_size; @@ -82,9 +81,8 @@ pub struct OutputId(String); render_elements! { #[derive(Debug)] pub WorkspaceRenderElement<R> where R: ImportAll; - LayoutElement = LayoutElementRenderElement<R>, + Tile = TileRenderElement<R>, FocusRing = FocusRingRenderElement, - Border = RelocateRenderElement<FocusRingRenderElement>, } /// Width of a column. @@ -1095,7 +1093,11 @@ impl<W: LayoutElement> Workspace<W> { self.with_tiles_in_render_order(|tile, tile_pos| { // Draw the window itself. - rv.extend(tile.render(renderer, tile_pos, output_scale)); + rv.extend( + tile.render(renderer, tile_pos, output_scale) + .into_iter() + .map(Into::into), + ); // For the active tile (which comes first), draw the focus ring. if first { |
