diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-05-01 10:09:25 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-05-01 10:10:11 +0300 |
| commit | 7b4cf094ef6c45ca92eaca4b0d42ef0a7c77e7e3 (patch) | |
| tree | a16e0c40d245dce007544872811d64ba9304ff7b /src/layout | |
| parent | 446bc155ce15103c347c1a4f654c71a88d9991fa (diff) | |
| download | niri-7b4cf094ef6c45ca92eaca4b0d42ef0a7c77e7e3.tar.gz niri-7b4cf094ef6c45ca92eaca4b0d42ef0a7c77e7e3.tar.bz2 niri-7b4cf094ef6c45ca92eaca4b0d42ef0a7c77e7e3.zip | |
Draw workspace shadows behind all workspaces
Diffstat (limited to 'src/layout')
| -rw-r--r-- | src/layout/monitor.rs | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/src/layout/monitor.rs b/src/layout/monitor.rs index fc7b53a5..ad91f874 100644 --- a/src/layout/monitor.rs +++ b/src/layout/monitor.rs @@ -1505,7 +1505,6 @@ impl<W: LayoutElement> Monitor<W> { }; let zoom = self.overview_zoom(); - let overview_clamped_progress = self.overview_progress.as_ref().map(|p| p.clamped_value()); // Draw the insert hint. let mut insert_hint = None; @@ -1532,13 +1531,6 @@ impl<W: LayoutElement> Monitor<W> { let floating = floating.filter_map(map_ws_contents); let scrolling = scrolling.filter_map(map_ws_contents); - let shadow = overview_clamped_progress.map(|value| { - ws.render_shadow(renderer) - .map(move |elem| elem.with_alpha(value.clamp(0., 1.) as f32)) - .map(MonitorInnerRenderElement::Shadow) - }); - let shadow = shadow.into_iter().flatten(); - let hint = if matches!(insert_hint, Some((hint_ws_id, _)) if hint_ws_id == ws.id()) { let iter = insert_hint.take().unwrap().1; let iter = iter.filter_map(move |elem| { @@ -1552,7 +1544,7 @@ impl<W: LayoutElement> Monitor<W> { }; let hint = hint.into_iter().flatten(); - let iter = floating.chain(hint).chain(scrolling).chain(shadow); + let iter = floating.chain(hint).chain(scrolling); let iter = iter.map(move |elem| { let elem = RescaleRenderElement::from_element(elem, Point::from((0, 0)), zoom); @@ -1570,6 +1562,36 @@ impl<W: LayoutElement> Monitor<W> { }) } + pub fn render_workspace_shadows<'a, R: NiriRenderer>( + &'a self, + renderer: &'a mut R, + ) -> impl Iterator<Item = MonitorRenderElement<R>> + 'a { + let _span = tracy_client::span!("Monitor::render_workspace_shadows"); + + let scale = self.scale.fractional_scale(); + let zoom = self.overview_zoom(); + let overview_clamped_progress = self.overview_progress.as_ref().map(|p| p.clamped_value()); + + self.workspaces_with_render_geo() + .flat_map(move |(ws, geo)| { + let shadow = overview_clamped_progress.map(|value| { + ws.render_shadow(renderer) + .map(move |elem| elem.with_alpha(value.clamp(0., 1.) as f32)) + .map(MonitorInnerRenderElement::Shadow) + }); + let iter = shadow.into_iter().flatten(); + + iter.map(move |elem| { + let elem = RescaleRenderElement::from_element(elem, Point::from((0, 0)), zoom); + RelocateRenderElement::from_element( + elem, + geo.loc.to_physical_precise_round(scale), + Relocate::Relative, + ) + }) + }) + } + pub fn workspace_switch_gesture_begin(&mut self, is_touchpad: bool) { let center_idx = self.active_workspace_idx; let current_idx = self.workspace_render_idx(); |
