mirror of
https://github.com/YaLTeR/niri.git
synced 2024-09-20 16:58:36 +03:00
layout: Add TileRenderElement
This commit is contained in:
parent
da826e42aa
commit
57521c69c3
@ -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
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user