From 7e3a96eb53f07654b31d59d2acf40bd65f968f9a Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Thu, 8 Jun 2023 21:50:16 +0200 Subject: [PATCH] shell: refactor unnecessary bounds --- src/backend/render/mod.rs | 11 -- src/shell/element/mod.rs | 7 +- src/shell/element/stack.rs | 188 ++-------------------- src/shell/element/window.rs | 183 ++------------------- src/shell/layout/floating/grabs/moving.rs | 9 +- src/wayland/handlers/screencopy.rs | 9 +- 6 files changed, 27 insertions(+), 380 deletions(-) diff --git a/src/backend/render/mod.rs b/src/backend/render/mod.rs index 7931ad39..a530e4bf 100644 --- a/src/backend/render/mod.rs +++ b/src/backend/render/mod.rs @@ -11,7 +11,6 @@ use std::{ use crate::{ config::WorkspaceLayout, shell::{ - element::{stack::CosmicStackRenderElement, window::CosmicWindowRenderElement}, focus::target::WindowGroup, layout::{floating::SeatMoveGrabState, tiling::ANIMATION_DURATION}, CosmicMapped, CosmicMappedRenderElement, WorkspaceRenderElement, @@ -363,8 +362,6 @@ where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, ::TextureId: Clone + 'static, CosmicMappedRenderElement: RenderElement, - CosmicWindowRenderElement: RenderElement, - CosmicStackRenderElement: RenderElement, E: From> + From>, { #[cfg(feature = "debug")] @@ -434,8 +431,6 @@ where ::TextureId: Clone + 'static, ::Error: From, CosmicMappedRenderElement: RenderElement, - CosmicWindowRenderElement: RenderElement, - CosmicStackRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, { #[cfg(feature = "debug")] @@ -642,7 +637,6 @@ where ::TextureId: Clone + 'static, ::Error: From, CosmicMappedRenderElement: RenderElement, - CosmicWindowRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, { let layer_map = layer_map_for_output(output); @@ -687,7 +681,6 @@ where ::TextureId: Clone + 'static, ::Error: From, CosmicMappedRenderElement: RenderElement, - CosmicWindowRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, { let layer_map = layer_map_for_output(output); @@ -741,8 +734,6 @@ where ::Error: From, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, - CosmicWindowRenderElement: RenderElement, - CosmicStackRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, Source: Clone, { @@ -801,8 +792,6 @@ where ::Error: From, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, - CosmicWindowRenderElement: RenderElement, - CosmicStackRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, Source: Clone, { diff --git a/src/shell/element/mod.rs b/src/shell/element/mod.rs index 39ba4c7c..38d42ce4 100644 --- a/src/shell/element/mod.rs +++ b/src/shell/element/mod.rs @@ -53,7 +53,6 @@ pub mod stack; pub use self::stack::CosmicStack; pub mod window; pub use self::window::CosmicWindow; -use self::{stack::CosmicStackRenderElement, window::CosmicWindowRenderElement}; #[cfg(feature = "debug")] use egui::plot::{Corner, Legend, Plot, PlotPoints, Polygon}; @@ -727,7 +726,7 @@ impl From for CosmicMapped { pub enum CosmicMappedRenderElement where - R: AsGlowRenderer + Renderer + ImportAll + ImportMem, + R: Renderer + ImportAll + ImportMem, ::TextureId: 'static, { Stack(self::stack::CosmicStackRenderElement), @@ -749,7 +748,7 @@ where impl Element for CosmicMappedRenderElement where - R: AsGlowRenderer + Renderer + ImportAll + ImportMem, + R: Renderer + ImportAll + ImportMem, ::TextureId: 'static, { fn id(&self) -> &smithay::backend::renderer::element::Id { @@ -1004,8 +1003,6 @@ where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, ::TextureId: 'static, CosmicMappedRenderElement: RenderElement, - CosmicWindowRenderElement: RenderElement, - CosmicStackRenderElement: RenderElement, { type RenderElement = CosmicMappedRenderElement; fn render_elements>( diff --git a/src/shell/element/stack.rs b/src/shell/element/stack.rs index cc962992..b115e2b0 100644 --- a/src/shell/element/stack.rs +++ b/src/shell/element/stack.rs @@ -1,9 +1,5 @@ use crate::{ - backend::render::{ - element::{AsGlowFrame, AsGlowRenderer}, - GlMultiError, GlMultiFrame, GlMultiRenderer, - }, - shell::focus::FocusDirection, + shell::{focus::FocusDirection, Shell}, state::State, utils::iced::{IcedElement, Program}, utils::prelude::SeatExt, @@ -24,10 +20,8 @@ use smithay::{ renderer::{ element::{ memory::MemoryRenderBufferRenderElement, surface::WaylandSurfaceRenderElement, - AsRenderElements, Element, Id, RenderElement, + AsRenderElements, }, - glow::GlowRenderer, - utils::CommitCounter, ImportAll, ImportMem, Renderer, }, }, @@ -38,7 +32,9 @@ use smithay::{ Seat, }, output::Output, - utils::{IsAlive, Logical, Physical, Point, Rectangle, Scale, Serial, Size, Transform}, + render_elements, + utils::{IsAlive, Logical, Physical, Point, Rectangle, Scale, Serial, Size}, + wayland::seat::WaylandFocus, }; use std::{ fmt, @@ -1057,169 +1053,16 @@ impl PointerTarget for CosmicStack { } } -pub enum CosmicStackRenderElement -where - R: ImportAll + ImportMem + AsGlowRenderer + Renderer, - ::TextureId: 'static, -{ - Header(MemoryRenderBufferRenderElement), - Window(WaylandSurfaceRenderElement), -} - -impl From> for CosmicStackRenderElement -where - R: ImportAll + ImportMem + AsGlowRenderer + Renderer, - ::TextureId: 'static, -{ - fn from(elem: WaylandSurfaceRenderElement) -> Self { - CosmicStackRenderElement::Window(elem) - } -} - -impl From> for CosmicStackRenderElement -where - R: ImportAll + ImportMem + AsGlowRenderer + Renderer, - ::TextureId: 'static, -{ - fn from(elem: MemoryRenderBufferRenderElement) -> Self { - CosmicStackRenderElement::Header(elem) - } -} - -impl Element for CosmicStackRenderElement -where - R: AsGlowRenderer + Renderer + ImportAll + ImportMem, - ::TextureId: 'static, -{ - fn id(&self) -> &Id { - match self { - CosmicStackRenderElement::Header(h) => h.id(), - CosmicStackRenderElement::Window(w) => w.id(), - } - } - - fn current_commit(&self) -> CommitCounter { - match self { - CosmicStackRenderElement::Header(h) => h.current_commit(), - CosmicStackRenderElement::Window(w) => w.current_commit(), - } - } - - fn src(&self) -> Rectangle { - match self { - CosmicStackRenderElement::Header(h) => h.src(), - CosmicStackRenderElement::Window(w) => w.src(), - } - } - - fn geometry(&self, scale: Scale) -> Rectangle { - match self { - CosmicStackRenderElement::Header(h) => h.geometry(scale), - CosmicStackRenderElement::Window(w) => w.geometry(scale), - } - } - - fn location(&self, scale: Scale) -> Point { - match self { - CosmicStackRenderElement::Header(h) => h.location(scale), - CosmicStackRenderElement::Window(w) => w.location(scale), - } - } - - fn transform(&self) -> Transform { - match self { - CosmicStackRenderElement::Header(h) => h.transform(), - CosmicStackRenderElement::Window(w) => w.transform(), - } - } - - fn damage_since( - &self, - scale: Scale, - commit: Option, - ) -> Vec> { - match self { - CosmicStackRenderElement::Header(h) => h.damage_since(scale, commit), - CosmicStackRenderElement::Window(w) => w.damage_since(scale, commit), - } - } - - fn opaque_regions(&self, scale: Scale) -> Vec> { - match self { - CosmicStackRenderElement::Header(h) => h.opaque_regions(scale), - CosmicStackRenderElement::Window(w) => w.opaque_regions(scale), - } - } - - fn alpha(&self) -> f32 { - match self { - CosmicStackRenderElement::Header(h) => h.alpha(), - CosmicStackRenderElement::Window(w) => w.alpha(), - } - } -} - -impl RenderElement for CosmicStackRenderElement { - fn draw<'a>( - &self, - frame: &mut ::Frame<'a>, - src: Rectangle, - dst: Rectangle, - damage: &[Rectangle], - ) -> Result<(), ::Error> { - match self { - CosmicStackRenderElement::Header(h) => h.draw(frame, src, dst, damage), - CosmicStackRenderElement::Window(w) => w.draw(frame, src, dst, damage), - } - } - - fn underlying_storage( - &self, - renderer: &mut GlowRenderer, - ) -> Option { - match self { - CosmicStackRenderElement::Header(h) => h.underlying_storage(renderer), - CosmicStackRenderElement::Window(w) => w.underlying_storage(renderer), - } - } -} - -impl<'a, 'b> RenderElement> - for CosmicStackRenderElement> -{ - fn draw<'c>( - &self, - frame: &mut GlMultiFrame<'a, 'b, 'c>, - src: Rectangle, - dst: Rectangle, - damage: &[Rectangle], - ) -> Result<(), GlMultiError> { - match self { - CosmicStackRenderElement::Header(h) => h - .draw(frame.glow_frame_mut(), src, dst, damage) - .map_err(|err| GlMultiError::Render(err)), - CosmicStackRenderElement::Window(w) => w.draw(frame, src, dst, damage), - } - } - - fn underlying_storage( - &self, - renderer: &mut GlMultiRenderer<'a, 'b>, - ) -> Option { - match self { - CosmicStackRenderElement::Header(h) => { - h.underlying_storage(renderer.glow_renderer_mut()) - } - CosmicStackRenderElement::Window(w) => w.underlying_storage(renderer), - } - } +render_elements! { + pub CosmicStackRenderElement where R: ImportAll + ImportMem; + Header = MemoryRenderBufferRenderElement, + Window = WaylandSurfaceRenderElement, } impl AsRenderElements for CosmicStack where - R: Renderer + ImportAll + ImportMem + AsGlowRenderer, + R: Renderer + ImportAll + ImportMem, ::TextureId: 'static, - CosmicStackRenderElement: RenderElement, { type RenderElement = CosmicStackRenderElement; fn render_elements>( @@ -1240,14 +1083,9 @@ where .to_physical_precise_round(scale); let window_loc = location + Point::from((0, (TAB_HEIGHT as f64 * scale.y) as i32)); - let mut elements = - AsRenderElements::::render_elements::>( - &self.0, - renderer.glow_renderer_mut(), - stack_loc, - scale, - alpha, - ); + let mut elements = AsRenderElements::::render_elements::>( + &self.0, renderer, stack_loc, scale, alpha, + ); elements.extend(self.0.with_program(|p| { AsRenderElements::::render_elements::>( diff --git a/src/shell/element/window.rs b/src/shell/element/window.rs index 81518b28..79eaa116 100644 --- a/src/shell/element/window.rs +++ b/src/shell/element/window.rs @@ -1,8 +1,4 @@ use crate::{ - backend::render::{ - element::{AsGlowFrame, AsGlowRenderer}, - GlMultiError, GlMultiFrame, GlMultiRenderer, - }, shell::Shell, state::State, utils::{ @@ -20,10 +16,8 @@ use smithay::{ renderer::{ element::{ memory::MemoryRenderBufferRenderElement, surface::WaylandSurfaceRenderElement, - AsRenderElements, Element, Id, RenderElement, + AsRenderElements, }, - glow::GlowRenderer, - utils::CommitCounter, ImportAll, ImportMem, Renderer, }, }, @@ -34,9 +28,9 @@ use smithay::{ Seat, }, output::Output, + render_elements, utils::{ Buffer as BufferCoords, IsAlive, Logical, Physical, Point, Rectangle, Scale, Serial, Size, - Transform, }, wayland::seat::WaylandFocus, }; @@ -570,169 +564,16 @@ impl PointerTarget for CosmicWindow { } } -pub enum CosmicWindowRenderElement -where - R: ImportAll + ImportMem + AsGlowRenderer + Renderer, - ::TextureId: 'static, -{ - Header(MemoryRenderBufferRenderElement), - Window(WaylandSurfaceRenderElement), -} - -impl From> for CosmicWindowRenderElement -where - R: ImportAll + ImportMem + AsGlowRenderer + Renderer, - ::TextureId: 'static, -{ - fn from(elem: WaylandSurfaceRenderElement) -> Self { - CosmicWindowRenderElement::Window(elem) - } -} - -impl From> for CosmicWindowRenderElement -where - R: ImportAll + ImportMem + AsGlowRenderer + Renderer, - ::TextureId: 'static, -{ - fn from(elem: MemoryRenderBufferRenderElement) -> Self { - CosmicWindowRenderElement::Header(elem) - } -} - -impl Element for CosmicWindowRenderElement -where - R: AsGlowRenderer + Renderer + ImportAll + ImportMem, - ::TextureId: 'static, -{ - fn id(&self) -> &Id { - match self { - CosmicWindowRenderElement::Header(h) => h.id(), - CosmicWindowRenderElement::Window(w) => w.id(), - } - } - - fn current_commit(&self) -> CommitCounter { - match self { - CosmicWindowRenderElement::Header(h) => h.current_commit(), - CosmicWindowRenderElement::Window(w) => w.current_commit(), - } - } - - fn src(&self) -> Rectangle { - match self { - CosmicWindowRenderElement::Header(h) => h.src(), - CosmicWindowRenderElement::Window(w) => w.src(), - } - } - - fn geometry(&self, scale: Scale) -> Rectangle { - match self { - CosmicWindowRenderElement::Header(h) => h.geometry(scale), - CosmicWindowRenderElement::Window(w) => w.geometry(scale), - } - } - - fn location(&self, scale: Scale) -> Point { - match self { - CosmicWindowRenderElement::Header(h) => h.location(scale), - CosmicWindowRenderElement::Window(w) => w.location(scale), - } - } - - fn transform(&self) -> Transform { - match self { - CosmicWindowRenderElement::Header(h) => h.transform(), - CosmicWindowRenderElement::Window(w) => w.transform(), - } - } - - fn damage_since( - &self, - scale: Scale, - commit: Option, - ) -> Vec> { - match self { - CosmicWindowRenderElement::Header(h) => h.damage_since(scale, commit), - CosmicWindowRenderElement::Window(w) => w.damage_since(scale, commit), - } - } - - fn opaque_regions(&self, scale: Scale) -> Vec> { - match self { - CosmicWindowRenderElement::Header(h) => h.opaque_regions(scale), - CosmicWindowRenderElement::Window(w) => w.opaque_regions(scale), - } - } - - fn alpha(&self) -> f32 { - match self { - CosmicWindowRenderElement::Header(h) => h.alpha(), - CosmicWindowRenderElement::Window(w) => w.alpha(), - } - } -} - -impl RenderElement for CosmicWindowRenderElement { - fn draw<'a>( - &self, - frame: &mut ::Frame<'a>, - src: Rectangle, - dst: Rectangle, - damage: &[Rectangle], - ) -> Result<(), ::Error> { - match self { - CosmicWindowRenderElement::Header(h) => h.draw(frame, src, dst, damage), - CosmicWindowRenderElement::Window(w) => w.draw(frame, src, dst, damage), - } - } - - fn underlying_storage( - &self, - renderer: &mut GlowRenderer, - ) -> Option { - match self { - CosmicWindowRenderElement::Header(h) => h.underlying_storage(renderer), - CosmicWindowRenderElement::Window(w) => w.underlying_storage(renderer), - } - } -} - -impl<'a, 'b> RenderElement> - for CosmicWindowRenderElement> -{ - fn draw<'c>( - &self, - frame: &mut GlMultiFrame<'a, 'b, 'c>, - src: Rectangle, - dst: Rectangle, - damage: &[Rectangle], - ) -> Result<(), GlMultiError> { - match self { - CosmicWindowRenderElement::Header(h) => h - .draw(frame.glow_frame_mut(), src, dst, damage) - .map_err(|err| GlMultiError::Render(err)), - CosmicWindowRenderElement::Window(w) => w.draw(frame, src, dst, damage), - } - } - - fn underlying_storage( - &self, - renderer: &mut GlMultiRenderer<'a, 'b>, - ) -> Option { - match self { - CosmicWindowRenderElement::Header(h) => { - h.underlying_storage(renderer.glow_renderer_mut()) - } - CosmicWindowRenderElement::Window(w) => w.underlying_storage(renderer), - } - } +render_elements! { + pub CosmicWindowRenderElement where R: ImportAll + ImportMem; + Header = MemoryRenderBufferRenderElement, + Window = WaylandSurfaceRenderElement, } impl AsRenderElements for CosmicWindow where - R: Renderer + ImportAll + ImportMem + AsGlowRenderer, + R: Renderer + ImportAll + ImportMem, ::TextureId: 'static, - CosmicWindowRenderElement: RenderElement, { type RenderElement = CosmicWindowRenderElement; fn render_elements>( @@ -761,15 +602,9 @@ where .0 .with_program(|p| p.window.geometry().loc) .to_physical_precise_round(scale); - elements.extend(AsRenderElements::::render_elements::< + elements.extend(AsRenderElements::::render_elements::< CosmicWindowRenderElement, - >( - &self.0, - renderer.glow_renderer_mut(), - ssd_loc, - scale, - alpha, - )) + >(&self.0, renderer, ssd_loc, scale, alpha)) } elements.into_iter().map(C::from).collect() diff --git a/src/shell/layout/floating/grabs/moving.rs b/src/shell/layout/floating/grabs/moving.rs index d5f40656..a0e76164 100644 --- a/src/shell/layout/floating/grabs/moving.rs +++ b/src/shell/layout/floating/grabs/moving.rs @@ -3,12 +3,9 @@ use crate::{ backend::render::{element::AsGlowRenderer, IndicatorShader}, shell::{ - element::{ - stack::CosmicStackRenderElement, window::CosmicWindowRenderElement, CosmicMapped, - CosmicMappedRenderElement, - }, + element::CosmicMappedRenderElement, focus::target::{KeyboardFocusTarget, PointerFocusTarget}, - CosmicSurface, + CosmicMapped, CosmicSurface, }, utils::prelude::*, }; @@ -47,8 +44,6 @@ impl MoveGrabState { R: Renderer + ImportAll + ImportMem + AsGlowRenderer, ::TextureId: 'static, CosmicMappedRenderElement: RenderElement, - CosmicWindowRenderElement: RenderElement, - CosmicStackRenderElement: RenderElement, I: From>, { #[cfg(feature = "debug")] diff --git a/src/wayland/handlers/screencopy.rs b/src/wayland/handlers/screencopy.rs index 08c62492..b7c6ae66 100644 --- a/src/wayland/handlers/screencopy.rs +++ b/src/wayland/handlers/screencopy.rs @@ -48,10 +48,7 @@ use crate::{ element::{AsGlowRenderer, CosmicElement}, render_output, render_workspace, CursorMode, CLEAR_COLOR, }, - shell::{ - element::{stack::CosmicStackRenderElement, window::CosmicWindowRenderElement}, - CosmicMappedRenderElement, CosmicSurface, WorkspaceRenderElement, - }, + shell::{CosmicMappedRenderElement, CosmicSurface, WorkspaceRenderElement}, state::{BackendData, ClientState, Common, Data, State}, utils::prelude::OutputExt, wayland::protocols::{ @@ -671,8 +668,6 @@ pub fn render_output_to_buffer( ::Error: From, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, - CosmicWindowRenderElement: RenderElement, - CosmicStackRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, { let cursor_mode = match session.cursor_mode() { @@ -805,8 +800,6 @@ pub fn render_workspace_to_buffer( ::Error: From, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, - CosmicWindowRenderElement: RenderElement, - CosmicStackRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, { let cursor_mode = match session.cursor_mode() {