element/window/stack: Use new IcedRenderElement

This commit is contained in:
Victoria Brekenfeld 2026-04-21 18:18:39 +02:00 committed by Victoria Brekenfeld
parent ab9f13b36f
commit 6c76fdaa79
2 changed files with 43 additions and 138 deletions

View file

@ -4,14 +4,8 @@ use super::{
}; };
use crate::{ use crate::{
backend::render::{ backend::render::{
IndicatorShader, Key, Usage, IndicatorShader, Key, Usage, cursor::CursorState, element::AsGlowRenderer,
cursor::CursorState, shadow::ShadowShader, wayland::SurfaceRenderElement,
element::AsGlowRenderer,
shadow::ShadowShader,
wayland::{
SurfaceRenderElement,
blur_effect::{BlurElement, BlurState},
},
}, },
hooks::{Decorations, HOOKS}, hooks::{Decorations, HOOKS},
shell::{ shell::{
@ -22,7 +16,7 @@ use crate::{
}, },
state::State, state::State,
utils::{ utils::{
iced::{IcedElement, Program}, iced::{IcedElement, IcedRenderElement, Program},
prelude::*, prelude::*,
}, },
}; };
@ -47,10 +41,7 @@ use smithay::{
input::KeyState, input::KeyState,
renderer::{ renderer::{
ImportAll, ImportMem, Renderer, ImportAll, ImportMem, Renderer,
element::{ element::{Element, Id as RendererId, Kind, RenderElement, UnderlyingStorage},
Element, Id as RendererId, Kind, RenderElement, UnderlyingStorage,
memory::MemoryRenderBufferRenderElement,
},
gles::element::PixelShaderElement, gles::element::PixelShaderElement,
glow::GlowRenderer, glow::GlowRenderer,
utils::{CommitCounter, DamageSet, OpaqueRegions}, utils::{CommitCounter, DamageSet, OpaqueRegions},
@ -129,7 +120,6 @@ pub struct CosmicStackInternal {
tiled: AtomicBool, tiled: AtomicBool,
theme: Mutex<cosmic::Theme>, theme: Mutex<cosmic::Theme>,
appearance_conf: Mutex<AppearanceConfig>, appearance_conf: Mutex<AppearanceConfig>,
blur_state: Mutex<BlurState>,
} }
impl CosmicStackInternal { impl CosmicStackInternal {
@ -156,9 +146,10 @@ impl CosmicStack {
pub fn new<I: Into<CosmicSurface>>( pub fn new<I: Into<CosmicSurface>>(
windows: impl Iterator<Item = I>, windows: impl Iterator<Item = I>,
handle: LoopHandle<'static, crate::state::State>, handle: LoopHandle<'static, crate::state::State>,
theme: cosmic::Theme, mut theme: cosmic::Theme,
appearance: AppearanceConfig, appearance: AppearanceConfig,
) -> CosmicStack { ) -> CosmicStack {
theme.transparent = theme.cosmic().frosted_windows;
let windows = windows.map(Into::into).collect::<Vec<_>>(); let windows = windows.map(Into::into).collect::<Vec<_>>();
assert!(!windows.is_empty()); assert!(!windows.is_empty());
@ -188,7 +179,6 @@ impl CosmicStack {
tiled: AtomicBool::new(false), tiled: AtomicBool::new(false),
theme: Mutex::new(theme.clone()), theme: Mutex::new(theme.clone()),
appearance_conf: Mutex::new(appearance), appearance_conf: Mutex::new(appearance),
blur_state: Default::default(),
}, },
(width, TAB_HEIGHT), (width, TAB_HEIGHT),
handle, handle,
@ -811,11 +801,6 @@ impl CosmicStack {
}) })
}); });
self.0
.push_render_elements(renderer, stack_loc, scale, alpha, &mut |elem| {
push_above(elem.into())
});
self.0.with_program(|p| { self.0.with_program(|p| {
let windows = p.windows.lock().unwrap(); let windows = p.windows.lock().unwrap();
let active = p.active.load(Ordering::SeqCst); let active = p.active.load(Ordering::SeqCst);
@ -862,31 +847,19 @@ impl CosmicStack {
); );
}); });
if frosted > 0 { self.0.push_render_elements(
let geometry = Rectangle::new( renderer,
stack_loc.to_f64().to_logical(scale), stack_loc,
Size::new( scale,
geometry.size.to_f64().to_logical(scale).w, alpha,
TAB_HEIGHT as f64, radii.map(|[_, b, _, d]| [0, b, 0, d]).unwrap_or([0; 4]),
), &mut |elem| push_above(elem.into()),
); Some(&mut |elem| push_below(elem.into())),
if let Ok(Some(elem)) = self.0.with_program(|p| { );
let mut state = p.blur_state.lock().unwrap();
BlurElement::from_state(
renderer,
&mut state,
geometry,
scale.x,
radii.map(|[_, b, _, d]| [0, b, 0, d]).unwrap_or([0; 4]),
frosted,
)
}) {
push_below(elem.into());
}
}
} }
pub(crate) fn set_theme(&self, theme: cosmic::Theme) { pub(crate) fn set_theme(&self, mut theme: cosmic::Theme) {
theme.transparent = theme.cosmic().frosted_windows;
self.0.with_program(|p| { self.0.with_program(|p| {
*p.theme.lock().unwrap() = theme.clone(); *p.theme.lock().unwrap() = theme.clone();
}); });
@ -1929,27 +1902,20 @@ impl TouchTarget<State> for CosmicStack {
} }
pub enum CosmicStackRenderElement<R: Renderer + ImportAll + ImportMem> { pub enum CosmicStackRenderElement<R: Renderer + ImportAll + ImportMem> {
Header(MemoryRenderBufferRenderElement<R>), Header(IcedRenderElement<R>),
HeaderBlur(BlurElement),
Shadow(PixelShaderElement), Shadow(PixelShaderElement),
Border(PixelShaderElement), Border(PixelShaderElement),
Window(SurfaceRenderElement<R>), Window(SurfaceRenderElement<R>),
} }
impl<R: Renderer + ImportAll + ImportMem> From<MemoryRenderBufferRenderElement<R>> impl<R: Renderer + ImportAll + ImportMem> From<IcedRenderElement<R>>
for CosmicStackRenderElement<R> for CosmicStackRenderElement<R>
{ {
fn from(value: MemoryRenderBufferRenderElement<R>) -> Self { fn from(value: IcedRenderElement<R>) -> Self {
Self::Header(value) Self::Header(value)
} }
} }
impl<R: Renderer + AsGlowRenderer> From<BlurElement> for CosmicStackRenderElement<R> {
fn from(value: BlurElement) -> Self {
Self::HeaderBlur(value)
}
}
impl<R: Renderer + ImportAll + ImportMem> From<SurfaceRenderElement<R>> impl<R: Renderer + ImportAll + ImportMem> From<SurfaceRenderElement<R>>
for CosmicStackRenderElement<R> for CosmicStackRenderElement<R>
{ {
@ -1966,7 +1932,6 @@ where
fn id(&self) -> &RendererId { fn id(&self) -> &RendererId {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.id(), CosmicStackRenderElement::Header(elem) => elem.id(),
CosmicStackRenderElement::HeaderBlur(elem) => elem.id(),
CosmicStackRenderElement::Shadow(elem) => elem.id(), CosmicStackRenderElement::Shadow(elem) => elem.id(),
CosmicStackRenderElement::Border(elem) => elem.id(), CosmicStackRenderElement::Border(elem) => elem.id(),
CosmicStackRenderElement::Window(elem) => elem.id(), CosmicStackRenderElement::Window(elem) => elem.id(),
@ -1976,7 +1941,6 @@ where
fn current_commit(&self) -> CommitCounter { fn current_commit(&self) -> CommitCounter {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.current_commit(), CosmicStackRenderElement::Header(elem) => elem.current_commit(),
CosmicStackRenderElement::HeaderBlur(elem) => elem.current_commit(),
CosmicStackRenderElement::Shadow(elem) => elem.current_commit(), CosmicStackRenderElement::Shadow(elem) => elem.current_commit(),
CosmicStackRenderElement::Border(elem) => elem.current_commit(), CosmicStackRenderElement::Border(elem) => elem.current_commit(),
CosmicStackRenderElement::Window(elem) => elem.current_commit(), CosmicStackRenderElement::Window(elem) => elem.current_commit(),
@ -1986,7 +1950,6 @@ where
fn src(&self) -> Rectangle<f64, Buffer> { fn src(&self) -> Rectangle<f64, Buffer> {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.src(), CosmicStackRenderElement::Header(elem) => elem.src(),
CosmicStackRenderElement::HeaderBlur(elem) => elem.src(),
CosmicStackRenderElement::Shadow(elem) => elem.src(), CosmicStackRenderElement::Shadow(elem) => elem.src(),
CosmicStackRenderElement::Border(elem) => elem.src(), CosmicStackRenderElement::Border(elem) => elem.src(),
CosmicStackRenderElement::Window(elem) => elem.src(), CosmicStackRenderElement::Window(elem) => elem.src(),
@ -1996,7 +1959,6 @@ where
fn geometry(&self, scale: Scale<f64>) -> Rectangle<i32, Physical> { fn geometry(&self, scale: Scale<f64>) -> Rectangle<i32, Physical> {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.geometry(scale), CosmicStackRenderElement::Header(elem) => elem.geometry(scale),
CosmicStackRenderElement::HeaderBlur(elem) => elem.geometry(scale),
CosmicStackRenderElement::Shadow(elem) => elem.geometry(scale), CosmicStackRenderElement::Shadow(elem) => elem.geometry(scale),
CosmicStackRenderElement::Border(elem) => elem.geometry(scale), CosmicStackRenderElement::Border(elem) => elem.geometry(scale),
CosmicStackRenderElement::Window(elem) => elem.geometry(scale), CosmicStackRenderElement::Window(elem) => elem.geometry(scale),
@ -2006,7 +1968,6 @@ where
fn location(&self, scale: Scale<f64>) -> Point<i32, Physical> { fn location(&self, scale: Scale<f64>) -> Point<i32, Physical> {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.location(scale), CosmicStackRenderElement::Header(elem) => elem.location(scale),
CosmicStackRenderElement::HeaderBlur(elem) => elem.location(scale),
CosmicStackRenderElement::Shadow(elem) => elem.location(scale), CosmicStackRenderElement::Shadow(elem) => elem.location(scale),
CosmicStackRenderElement::Border(elem) => elem.location(scale), CosmicStackRenderElement::Border(elem) => elem.location(scale),
CosmicStackRenderElement::Window(elem) => elem.location(scale), CosmicStackRenderElement::Window(elem) => elem.location(scale),
@ -2016,7 +1977,6 @@ where
fn transform(&self) -> Transform { fn transform(&self) -> Transform {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.transform(), CosmicStackRenderElement::Header(elem) => elem.transform(),
CosmicStackRenderElement::HeaderBlur(elem) => elem.transform(),
CosmicStackRenderElement::Shadow(elem) => elem.transform(), CosmicStackRenderElement::Shadow(elem) => elem.transform(),
CosmicStackRenderElement::Border(elem) => elem.transform(), CosmicStackRenderElement::Border(elem) => elem.transform(),
CosmicStackRenderElement::Window(elem) => elem.transform(), CosmicStackRenderElement::Window(elem) => elem.transform(),
@ -2030,7 +1990,6 @@ where
) -> DamageSet<i32, Physical> { ) -> DamageSet<i32, Physical> {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.damage_since(scale, commit), CosmicStackRenderElement::Header(elem) => elem.damage_since(scale, commit),
CosmicStackRenderElement::HeaderBlur(elem) => elem.damage_since(scale, commit),
CosmicStackRenderElement::Shadow(elem) => elem.damage_since(scale, commit), CosmicStackRenderElement::Shadow(elem) => elem.damage_since(scale, commit),
CosmicStackRenderElement::Border(elem) => elem.damage_since(scale, commit), CosmicStackRenderElement::Border(elem) => elem.damage_since(scale, commit),
CosmicStackRenderElement::Window(elem) => elem.damage_since(scale, commit), CosmicStackRenderElement::Window(elem) => elem.damage_since(scale, commit),
@ -2040,7 +1999,6 @@ where
fn opaque_regions(&self, scale: Scale<f64>) -> OpaqueRegions<i32, Physical> { fn opaque_regions(&self, scale: Scale<f64>) -> OpaqueRegions<i32, Physical> {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.opaque_regions(scale), CosmicStackRenderElement::Header(elem) => elem.opaque_regions(scale),
CosmicStackRenderElement::HeaderBlur(elem) => elem.opaque_regions(scale),
CosmicStackRenderElement::Shadow(elem) => elem.opaque_regions(scale), CosmicStackRenderElement::Shadow(elem) => elem.opaque_regions(scale),
CosmicStackRenderElement::Border(elem) => elem.opaque_regions(scale), CosmicStackRenderElement::Border(elem) => elem.opaque_regions(scale),
CosmicStackRenderElement::Window(elem) => elem.opaque_regions(scale), CosmicStackRenderElement::Window(elem) => elem.opaque_regions(scale),
@ -2050,7 +2008,6 @@ where
fn alpha(&self) -> f32 { fn alpha(&self) -> f32 {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.alpha(), CosmicStackRenderElement::Header(elem) => elem.alpha(),
CosmicStackRenderElement::HeaderBlur(elem) => elem.alpha(),
CosmicStackRenderElement::Shadow(elem) => elem.alpha(), CosmicStackRenderElement::Shadow(elem) => elem.alpha(),
CosmicStackRenderElement::Border(elem) => elem.alpha(), CosmicStackRenderElement::Border(elem) => elem.alpha(),
CosmicStackRenderElement::Window(elem) => elem.alpha(), CosmicStackRenderElement::Window(elem) => elem.alpha(),
@ -2060,7 +2017,6 @@ where
fn kind(&self) -> Kind { fn kind(&self) -> Kind {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.kind(), CosmicStackRenderElement::Header(elem) => elem.kind(),
CosmicStackRenderElement::HeaderBlur(elem) => elem.kind(),
CosmicStackRenderElement::Shadow(elem) => elem.kind(), CosmicStackRenderElement::Shadow(elem) => elem.kind(),
CosmicStackRenderElement::Border(elem) => elem.kind(), CosmicStackRenderElement::Border(elem) => elem.kind(),
CosmicStackRenderElement::Window(elem) => elem.kind(), CosmicStackRenderElement::Window(elem) => elem.kind(),
@ -2070,7 +2026,6 @@ where
fn is_framebuffer_effect(&self) -> bool { fn is_framebuffer_effect(&self) -> bool {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.is_framebuffer_effect(), CosmicStackRenderElement::Header(elem) => elem.is_framebuffer_effect(),
CosmicStackRenderElement::HeaderBlur(elem) => elem.is_framebuffer_effect(),
CosmicStackRenderElement::Shadow(elem) => elem.is_framebuffer_effect(), CosmicStackRenderElement::Shadow(elem) => elem.is_framebuffer_effect(),
CosmicStackRenderElement::Border(elem) => elem.is_framebuffer_effect(), CosmicStackRenderElement::Border(elem) => elem.is_framebuffer_effect(),
CosmicStackRenderElement::Window(elem) => elem.is_framebuffer_effect(), CosmicStackRenderElement::Window(elem) => elem.is_framebuffer_effect(),
@ -2096,9 +2051,6 @@ where
CosmicStackRenderElement::Header(elem) => { CosmicStackRenderElement::Header(elem) => {
elem.draw(frame, src, dst, damage, opaque_regions, cache) elem.draw(frame, src, dst, damage, opaque_regions, cache)
} }
CosmicStackRenderElement::HeaderBlur(elem) => {
RenderElement::<R>::draw(elem, frame, src, dst, damage, opaque_regions, cache)
}
CosmicStackRenderElement::Shadow(elem) | CosmicStackRenderElement::Border(elem) => { CosmicStackRenderElement::Shadow(elem) | CosmicStackRenderElement::Border(elem) => {
RenderElement::<GlowRenderer>::draw( RenderElement::<GlowRenderer>::draw(
elem, elem,
@ -2120,7 +2072,6 @@ where
fn underlying_storage(&self, renderer: &mut R) -> Option<UnderlyingStorage<'_>> { fn underlying_storage(&self, renderer: &mut R) -> Option<UnderlyingStorage<'_>> {
match self { match self {
CosmicStackRenderElement::Header(elem) => elem.underlying_storage(renderer), CosmicStackRenderElement::Header(elem) => elem.underlying_storage(renderer),
CosmicStackRenderElement::HeaderBlur(elem) => elem.underlying_storage(renderer),
CosmicStackRenderElement::Shadow(elem) | CosmicStackRenderElement::Border(elem) => { CosmicStackRenderElement::Shadow(elem) | CosmicStackRenderElement::Border(elem) => {
elem.underlying_storage(renderer.glow_renderer_mut()) elem.underlying_storage(renderer.glow_renderer_mut())
} }
@ -2139,9 +2090,6 @@ where
CosmicStackRenderElement::Header(elem) => { CosmicStackRenderElement::Header(elem) => {
elem.capture_framebuffer(frame, src, dst, cache) elem.capture_framebuffer(frame, src, dst, cache)
} }
CosmicStackRenderElement::HeaderBlur(elem) => {
RenderElement::<R>::capture_framebuffer(elem, frame, src, dst, cache)
}
CosmicStackRenderElement::Shadow(elem) | CosmicStackRenderElement::Border(elem) => { CosmicStackRenderElement::Shadow(elem) | CosmicStackRenderElement::Border(elem) => {
RenderElement::<GlowRenderer>::capture_framebuffer( RenderElement::<GlowRenderer>::capture_framebuffer(
elem, elem,

View file

@ -1,13 +1,7 @@
use crate::{ use crate::{
backend::render::{ backend::render::{
IndicatorShader, Key, Usage, IndicatorShader, Key, Usage, cursor::CursorState, element::AsGlowRenderer,
cursor::CursorState, shadow::ShadowShader, wayland::SurfaceRenderElement,
element::AsGlowRenderer,
shadow::ShadowShader,
wayland::{
SurfaceRenderElement,
blur_effect::{BlurElement, BlurState},
},
}, },
hooks::{Decorations, HOOKS}, hooks::{Decorations, HOOKS},
shell::{ shell::{
@ -17,7 +11,7 @@ use crate::{
}, },
state::State, state::State,
utils::{ utils::{
iced::{IcedElement, Program}, iced::{IcedElement, IcedRenderElement, Program},
prelude::*, prelude::*,
}, },
}; };
@ -30,10 +24,7 @@ use smithay::{
input::KeyState, input::KeyState,
renderer::{ renderer::{
ImportAll, ImportMem, Renderer, ImportAll, ImportMem, Renderer,
element::{ element::{Element, Id as RendererId, Kind, RenderElement, UnderlyingStorage},
Element, Id as RendererId, Kind, RenderElement, UnderlyingStorage,
memory::MemoryRenderBufferRenderElement,
},
gles::element::PixelShaderElement, gles::element::PixelShaderElement,
glow::GlowRenderer, glow::GlowRenderer,
utils::{CommitCounter, DamageSet, OpaqueRegions}, utils::{CommitCounter, DamageSet, OpaqueRegions},
@ -99,7 +90,6 @@ pub struct CosmicWindowInternal {
tiled: AtomicBool, tiled: AtomicBool,
theme: Mutex<cosmic::Theme>, theme: Mutex<cosmic::Theme>,
appearance_conf: Mutex<AppearanceConfig>, appearance_conf: Mutex<AppearanceConfig>,
blur_state: Mutex<BlurState>,
} }
#[repr(u8)] #[repr(u8)]
@ -200,12 +190,13 @@ impl CosmicWindow {
pub fn new( pub fn new(
window: impl Into<CosmicSurface>, window: impl Into<CosmicSurface>,
handle: LoopHandle<'static, crate::state::State>, handle: LoopHandle<'static, crate::state::State>,
theme: cosmic::Theme, mut theme: cosmic::Theme,
appearance: AppearanceConfig, appearance: AppearanceConfig,
) -> CosmicWindow { ) -> CosmicWindow {
let window = window.into(); let window = window.into();
let width = window.geometry().size.w; let width = window.geometry().size.w;
let last_title = window.title(); let last_title = window.title();
theme.transparent = theme.cosmic().frosted_windows;
if appearance.clip_floating_windows { if appearance.clip_floating_windows {
window.set_tiled(true); window.set_tiled(true);
@ -220,7 +211,6 @@ impl CosmicWindow {
tiled: AtomicBool::new(false), tiled: AtomicBool::new(false),
theme: Mutex::new(theme.clone()), theme: Mutex::new(theme.clone()),
appearance_conf: Mutex::new(appearance), appearance_conf: Mutex::new(appearance),
blur_state: Mutex::default(),
}, },
(width, SSD_HEIGHT), (width, SSD_HEIGHT),
handle, handle,
@ -558,7 +548,7 @@ impl CosmicWindow {
push_above(elem); push_above(elem);
} }
let frosted = self.0.with_program(|p| { self.0.with_program(|p| {
if has_ssd { if has_ssd {
radii[1] = 0; radii[1] = 0;
radii[3] = 0; radii[3] = 0;
@ -582,8 +572,6 @@ impl CosmicWindow {
&mut |elem| push_above(elem.into()), &mut |elem| push_above(elem.into()),
Some(&mut |elem| push_below(elem.into())), Some(&mut |elem| push_below(elem.into())),
); );
frosted
}); });
if has_ssd { if has_ssd {
@ -591,26 +579,20 @@ impl CosmicWindow {
+ self + self
.0 .0
.with_program(|p| p.window.geometry().loc.to_physical_precise_round(scale)); .with_program(|p| p.window.geometry().loc.to_physical_precise_round(scale));
if frosted > 0 { self.0.push_render_elements(
let geometry = Rectangle::new( renderer,
ssd_loc.to_f64().to_logical(scale), ssd_loc,
Size::new(geo.size.w, SSD_HEIGHT as f64), scale,
); alpha,
if let Ok(Some(elem)) = self.0.with_program(|p| { radii,
let mut state = p.blur_state.lock().unwrap(); &mut |elem| push_above(elem.into()),
BlurElement::from_state(renderer, &mut state, geometry, scale.x, radii, frosted) Some(&mut |elem| push_below(elem.into())),
}) { );
push_below(elem.into());
}
}
self.0
.push_render_elements(renderer, ssd_loc, scale, alpha, &mut |elem| {
push_above(elem.into())
});
} }
} }
pub(crate) fn set_theme(&self, theme: cosmic::Theme) { pub(crate) fn set_theme(&self, mut theme: cosmic::Theme) {
theme.transparent = theme.cosmic().frosted_windows;
self.0.with_program(|p| { self.0.with_program(|p| {
*p.theme.lock().unwrap() = theme.clone(); *p.theme.lock().unwrap() = theme.clone();
}); });
@ -1267,29 +1249,22 @@ impl WaylandFocus for CosmicWindow {
} }
} }
pub enum CosmicWindowRenderElement<R: Renderer + ImportAll + ImportMem> { pub enum CosmicWindowRenderElement<R: AsGlowRenderer + ImportAll + ImportMem> {
Header(MemoryRenderBufferRenderElement<R>), Header(IcedRenderElement<R>),
HeaderBlur(BlurElement),
Shadow(PixelShaderElement), Shadow(PixelShaderElement),
Border(PixelShaderElement), Border(PixelShaderElement),
Window(SurfaceRenderElement<R>), Window(SurfaceRenderElement<R>),
} }
impl<R: Renderer + ImportAll + ImportMem> From<MemoryRenderBufferRenderElement<R>> impl<R: AsGlowRenderer + ImportAll + ImportMem> From<IcedRenderElement<R>>
for CosmicWindowRenderElement<R> for CosmicWindowRenderElement<R>
{ {
fn from(value: MemoryRenderBufferRenderElement<R>) -> Self { fn from(value: IcedRenderElement<R>) -> Self {
Self::Header(value) Self::Header(value)
} }
} }
impl<R: Renderer + AsGlowRenderer> From<BlurElement> for CosmicWindowRenderElement<R> { impl<R: AsGlowRenderer + ImportAll + ImportMem> From<SurfaceRenderElement<R>>
fn from(value: BlurElement) -> Self {
Self::HeaderBlur(value)
}
}
impl<R: Renderer + ImportAll + ImportMem> From<SurfaceRenderElement<R>>
for CosmicWindowRenderElement<R> for CosmicWindowRenderElement<R>
{ {
fn from(value: SurfaceRenderElement<R>) -> Self { fn from(value: SurfaceRenderElement<R>) -> Self {
@ -1305,7 +1280,6 @@ where
fn id(&self) -> &RendererId { fn id(&self) -> &RendererId {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.id(), CosmicWindowRenderElement::Header(elem) => elem.id(),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.id(),
CosmicWindowRenderElement::Shadow(elem) => elem.id(), CosmicWindowRenderElement::Shadow(elem) => elem.id(),
CosmicWindowRenderElement::Border(elem) => elem.id(), CosmicWindowRenderElement::Border(elem) => elem.id(),
CosmicWindowRenderElement::Window(elem) => elem.id(), CosmicWindowRenderElement::Window(elem) => elem.id(),
@ -1315,7 +1289,6 @@ where
fn current_commit(&self) -> CommitCounter { fn current_commit(&self) -> CommitCounter {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.current_commit(), CosmicWindowRenderElement::Header(elem) => elem.current_commit(),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.current_commit(),
CosmicWindowRenderElement::Shadow(elem) => elem.current_commit(), CosmicWindowRenderElement::Shadow(elem) => elem.current_commit(),
CosmicWindowRenderElement::Border(elem) => elem.current_commit(), CosmicWindowRenderElement::Border(elem) => elem.current_commit(),
CosmicWindowRenderElement::Window(elem) => elem.current_commit(), CosmicWindowRenderElement::Window(elem) => elem.current_commit(),
@ -1325,7 +1298,6 @@ where
fn src(&self) -> Rectangle<f64, Buffer> { fn src(&self) -> Rectangle<f64, Buffer> {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.src(), CosmicWindowRenderElement::Header(elem) => elem.src(),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.src(),
CosmicWindowRenderElement::Shadow(elem) => elem.src(), CosmicWindowRenderElement::Shadow(elem) => elem.src(),
CosmicWindowRenderElement::Border(elem) => elem.src(), CosmicWindowRenderElement::Border(elem) => elem.src(),
CosmicWindowRenderElement::Window(elem) => elem.src(), CosmicWindowRenderElement::Window(elem) => elem.src(),
@ -1335,7 +1307,6 @@ where
fn geometry(&self, scale: Scale<f64>) -> Rectangle<i32, Physical> { fn geometry(&self, scale: Scale<f64>) -> Rectangle<i32, Physical> {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.geometry(scale), CosmicWindowRenderElement::Header(elem) => elem.geometry(scale),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.geometry(scale),
CosmicWindowRenderElement::Shadow(elem) => elem.geometry(scale), CosmicWindowRenderElement::Shadow(elem) => elem.geometry(scale),
CosmicWindowRenderElement::Border(elem) => elem.geometry(scale), CosmicWindowRenderElement::Border(elem) => elem.geometry(scale),
CosmicWindowRenderElement::Window(elem) => elem.geometry(scale), CosmicWindowRenderElement::Window(elem) => elem.geometry(scale),
@ -1345,7 +1316,6 @@ where
fn location(&self, scale: Scale<f64>) -> Point<i32, Physical> { fn location(&self, scale: Scale<f64>) -> Point<i32, Physical> {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.location(scale), CosmicWindowRenderElement::Header(elem) => elem.location(scale),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.location(scale),
CosmicWindowRenderElement::Shadow(elem) => elem.location(scale), CosmicWindowRenderElement::Shadow(elem) => elem.location(scale),
CosmicWindowRenderElement::Border(elem) => elem.location(scale), CosmicWindowRenderElement::Border(elem) => elem.location(scale),
CosmicWindowRenderElement::Window(elem) => elem.location(scale), CosmicWindowRenderElement::Window(elem) => elem.location(scale),
@ -1355,7 +1325,6 @@ where
fn transform(&self) -> Transform { fn transform(&self) -> Transform {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.transform(), CosmicWindowRenderElement::Header(elem) => elem.transform(),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.transform(),
CosmicWindowRenderElement::Shadow(elem) => elem.transform(), CosmicWindowRenderElement::Shadow(elem) => elem.transform(),
CosmicWindowRenderElement::Border(elem) => elem.transform(), CosmicWindowRenderElement::Border(elem) => elem.transform(),
CosmicWindowRenderElement::Window(elem) => elem.transform(), CosmicWindowRenderElement::Window(elem) => elem.transform(),
@ -1369,7 +1338,6 @@ where
) -> DamageSet<i32, Physical> { ) -> DamageSet<i32, Physical> {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.damage_since(scale, commit), CosmicWindowRenderElement::Header(elem) => elem.damage_since(scale, commit),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.damage_since(scale, commit),
CosmicWindowRenderElement::Shadow(elem) => elem.damage_since(scale, commit), CosmicWindowRenderElement::Shadow(elem) => elem.damage_since(scale, commit),
CosmicWindowRenderElement::Border(elem) => elem.damage_since(scale, commit), CosmicWindowRenderElement::Border(elem) => elem.damage_since(scale, commit),
CosmicWindowRenderElement::Window(elem) => elem.damage_since(scale, commit), CosmicWindowRenderElement::Window(elem) => elem.damage_since(scale, commit),
@ -1379,7 +1347,6 @@ where
fn opaque_regions(&self, scale: Scale<f64>) -> OpaqueRegions<i32, Physical> { fn opaque_regions(&self, scale: Scale<f64>) -> OpaqueRegions<i32, Physical> {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.opaque_regions(scale), CosmicWindowRenderElement::Header(elem) => elem.opaque_regions(scale),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.opaque_regions(scale),
CosmicWindowRenderElement::Shadow(elem) => elem.opaque_regions(scale), CosmicWindowRenderElement::Shadow(elem) => elem.opaque_regions(scale),
CosmicWindowRenderElement::Border(elem) => elem.opaque_regions(scale), CosmicWindowRenderElement::Border(elem) => elem.opaque_regions(scale),
CosmicWindowRenderElement::Window(elem) => elem.opaque_regions(scale), CosmicWindowRenderElement::Window(elem) => elem.opaque_regions(scale),
@ -1389,7 +1356,6 @@ where
fn alpha(&self) -> f32 { fn alpha(&self) -> f32 {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.alpha(), CosmicWindowRenderElement::Header(elem) => elem.alpha(),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.alpha(),
CosmicWindowRenderElement::Shadow(elem) => elem.alpha(), CosmicWindowRenderElement::Shadow(elem) => elem.alpha(),
CosmicWindowRenderElement::Border(elem) => elem.alpha(), CosmicWindowRenderElement::Border(elem) => elem.alpha(),
CosmicWindowRenderElement::Window(elem) => elem.alpha(), CosmicWindowRenderElement::Window(elem) => elem.alpha(),
@ -1399,7 +1365,6 @@ where
fn kind(&self) -> Kind { fn kind(&self) -> Kind {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.kind(), CosmicWindowRenderElement::Header(elem) => elem.kind(),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.kind(),
CosmicWindowRenderElement::Shadow(elem) => elem.kind(), CosmicWindowRenderElement::Shadow(elem) => elem.kind(),
CosmicWindowRenderElement::Border(elem) => elem.kind(), CosmicWindowRenderElement::Border(elem) => elem.kind(),
CosmicWindowRenderElement::Window(elem) => elem.kind(), CosmicWindowRenderElement::Window(elem) => elem.kind(),
@ -1409,7 +1374,6 @@ where
fn is_framebuffer_effect(&self) -> bool { fn is_framebuffer_effect(&self) -> bool {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.is_framebuffer_effect(), CosmicWindowRenderElement::Header(elem) => elem.is_framebuffer_effect(),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.is_framebuffer_effect(),
CosmicWindowRenderElement::Shadow(elem) => elem.is_framebuffer_effect(), CosmicWindowRenderElement::Shadow(elem) => elem.is_framebuffer_effect(),
CosmicWindowRenderElement::Border(elem) => elem.is_framebuffer_effect(), CosmicWindowRenderElement::Border(elem) => elem.is_framebuffer_effect(),
CosmicWindowRenderElement::Window(elem) => elem.is_framebuffer_effect(), CosmicWindowRenderElement::Window(elem) => elem.is_framebuffer_effect(),
@ -1435,9 +1399,6 @@ where
CosmicWindowRenderElement::Header(elem) => { CosmicWindowRenderElement::Header(elem) => {
elem.draw(frame, src, dst, damage, opaque_regions, cache) elem.draw(frame, src, dst, damage, opaque_regions, cache)
} }
CosmicWindowRenderElement::HeaderBlur(elem) => {
RenderElement::<R>::draw(elem, frame, src, dst, damage, opaque_regions, cache)
}
CosmicWindowRenderElement::Shadow(elem) | CosmicWindowRenderElement::Border(elem) => { CosmicWindowRenderElement::Shadow(elem) | CosmicWindowRenderElement::Border(elem) => {
RenderElement::<GlowRenderer>::draw( RenderElement::<GlowRenderer>::draw(
elem, elem,
@ -1459,7 +1420,6 @@ where
fn underlying_storage(&self, renderer: &mut R) -> Option<UnderlyingStorage<'_>> { fn underlying_storage(&self, renderer: &mut R) -> Option<UnderlyingStorage<'_>> {
match self { match self {
CosmicWindowRenderElement::Header(elem) => elem.underlying_storage(renderer), CosmicWindowRenderElement::Header(elem) => elem.underlying_storage(renderer),
CosmicWindowRenderElement::HeaderBlur(elem) => elem.underlying_storage(renderer),
CosmicWindowRenderElement::Shadow(elem) | CosmicWindowRenderElement::Border(elem) => { CosmicWindowRenderElement::Shadow(elem) | CosmicWindowRenderElement::Border(elem) => {
elem.underlying_storage(renderer.glow_renderer_mut()) elem.underlying_storage(renderer.glow_renderer_mut())
} }
@ -1478,9 +1438,6 @@ where
CosmicWindowRenderElement::Header(elem) => { CosmicWindowRenderElement::Header(elem) => {
elem.capture_framebuffer(frame, src, dst, cache) elem.capture_framebuffer(frame, src, dst, cache)
} }
CosmicWindowRenderElement::HeaderBlur(elem) => {
RenderElement::<R>::capture_framebuffer(elem, frame, src, dst, cache)
}
CosmicWindowRenderElement::Shadow(elem) | CosmicWindowRenderElement::Border(elem) => { CosmicWindowRenderElement::Shadow(elem) | CosmicWindowRenderElement::Border(elem) => {
RenderElement::<GlowRenderer>::capture_framebuffer( RenderElement::<GlowRenderer>::capture_framebuffer(
elem, elem,