shell/elements: Handle clipping and shadows

This commit is contained in:
Victoria Brekenfeld 2025-12-08 18:22:23 +01:00 committed by Victoria Brekenfeld
parent 2adebb5fe1
commit 59fd732982
7 changed files with 917 additions and 97 deletions

View file

@ -1501,6 +1501,14 @@ impl FloatingLayout {
.unwrap_or_else(|| (self.space.element_geometry(elem).unwrap().as_local(), alpha));
let render_location = geometry.loc - elem.geometry().loc.as_local();
let shadow_element = elem.shadow_render_element(
renderer,
render_location
.as_logical()
.to_physical_precise_round(output_scale),
output_scale.into(),
alpha,
);
let mut window_elements = elem.render_elements(
renderer,
render_location
@ -1622,6 +1630,7 @@ impl FloatingLayout {
}
elements.extend(window_elements);
elements.extend(shadow_element.into_iter());
}
elements

View file

@ -4034,6 +4034,7 @@ impl TilingLayout {
let draw_groups = overview.0.alpha();
let mut elements = Vec::default();
let mut shadow_elements = Vec::default();
let is_overview = !matches!(overview.0, OverviewMode::None);
let is_mouse_tiling = (matches!(overview.0.trigger(), Some(Trigger::Pointer(_))))
@ -4076,6 +4077,7 @@ impl TilingLayout {
percentage,
indicator_thickness,
swap_desc.is_some(),
&mut shadow_elements,
theme,
));
@ -4129,6 +4131,7 @@ impl TilingLayout {
overview,
resize_indicator,
swap_desc.clone(),
&mut shadow_elements,
&self.swapping_stack_surface_id,
&self.backdrop_id,
theme,
@ -4139,6 +4142,8 @@ impl TilingLayout {
elements.extend(group_elements);
}
elements.extend(shadow_elements);
Ok(elements)
}
@ -4987,6 +4992,7 @@ fn render_old_tree_windows<R>(
percentage: f32,
indicator_thickness: u8,
is_swap_mode: bool,
shadow_elements: &mut Vec<CosmicMappedRenderElement<R>>,
theme: &cosmic::theme::CosmicTheme,
) -> Vec<CosmicMappedRenderElement<R>>
where
@ -5007,6 +5013,17 @@ where
percentage,
is_swap_mode,
|mapped, elem_geometry, geo, alpha, is_minimizing| {
shadow_elements.extend(
mapped
.shadow_render_element(
renderer,
geo.loc.as_logical().to_physical_precise_round(output_scale)
- elem_geometry.loc,
Scale::from(output_scale),
alpha,
)
.into_iter(),
);
let window_elements = mapped.render_elements::<R, CosmicMappedRenderElement<R>>(
renderer,
geo.loc.as_logical().to_physical_precise_round(output_scale) - elem_geometry.loc,
@ -5219,6 +5236,7 @@ fn render_new_tree_windows<R>(
overview: (OverviewMode, Option<(SwapIndicator, Option<&Tree<Data>>)>),
mut resize_indicator: Option<(ResizeMode, ResizeIndicator)>,
swap_desc: Option<NodeDesc>,
shadow_elements: &mut Vec<CosmicMappedRenderElement<R>>,
swapping_stack_surface_id: &Id,
backdrop_id: &Id,
theme: &cosmic::theme::CosmicTheme,
@ -5505,6 +5523,17 @@ where
if let Data::Mapped { mapped, .. } = data {
let elem_geometry = mapped.geometry().to_physical_precise_round(output_scale);
shadow_elements.extend(
mapped
.shadow_render_element(
renderer,
geo.loc.as_logical().to_physical_precise_round(output_scale)
- elem_geometry.loc,
Scale::from(output_scale),
alpha,
)
.into_iter(),
);
let mut elements = mapped.render_elements::<R, CosmicMappedRenderElement<R>>(
renderer,
//original_location,