shell/elements: Handle clipping and shadows
This commit is contained in:
parent
2adebb5fe1
commit
59fd732982
7 changed files with 917 additions and 97 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue