mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-22 02:01:55 +07:00
layout: Return floating and scrolling elems separately from Workspace
This commit is contained in:
+21
-14
@@ -952,20 +952,27 @@ impl<W: LayoutElement> Monitor<W> {
|
|||||||
|
|
||||||
self.workspaces_with_render_geo()
|
self.workspaces_with_render_geo()
|
||||||
.flat_map(move |(ws, geo)| {
|
.flat_map(move |(ws, geo)| {
|
||||||
ws.render_elements(renderer, target, focus_ring)
|
let map_ws_contents = move |elem: WorkspaceRenderElement<R>| {
|
||||||
.filter_map(move |elem| {
|
let elem = CropRenderElement::from_element(elem, scale, crop_bounds)?;
|
||||||
CropRenderElement::from_element(elem, scale, crop_bounds)
|
Some(elem)
|
||||||
})
|
};
|
||||||
.map(move |elem| {
|
|
||||||
RelocateRenderElement::from_element(
|
let (floating, scrolling) = ws.render_elements(renderer, target, focus_ring);
|
||||||
elem,
|
let floating = floating.filter_map(map_ws_contents);
|
||||||
// The offset we get from workspaces_with_render_positions() is already
|
let scrolling = scrolling.filter_map(map_ws_contents);
|
||||||
// rounded to physical pixels, but it's in the logical coordinate
|
|
||||||
// space, so we need to convert it to physical.
|
let iter = floating.chain(scrolling);
|
||||||
geo.loc.to_physical_precise_round(scale),
|
|
||||||
Relocate::Relative,
|
iter.map(move |elem| {
|
||||||
)
|
RelocateRenderElement::from_element(
|
||||||
})
|
elem,
|
||||||
|
// The offset we get from workspaces_with_render_positions() is already
|
||||||
|
// rounded to physical pixels, but it's in the logical coordinate
|
||||||
|
// space, so we need to convert it to physical.
|
||||||
|
geo.loc.to_physical_precise_round(scale),
|
||||||
|
Relocate::Relative,
|
||||||
|
)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1409,7 +1409,10 @@ impl<W: LayoutElement> Workspace<W> {
|
|||||||
renderer: &mut R,
|
renderer: &mut R,
|
||||||
target: RenderTarget,
|
target: RenderTarget,
|
||||||
focus_ring: bool,
|
focus_ring: bool,
|
||||||
) -> impl Iterator<Item = WorkspaceRenderElement<R>> {
|
) -> (
|
||||||
|
impl Iterator<Item = WorkspaceRenderElement<R>>,
|
||||||
|
impl Iterator<Item = WorkspaceRenderElement<R>>,
|
||||||
|
) {
|
||||||
let scrolling_focus_ring = focus_ring && !self.floating_is_active();
|
let scrolling_focus_ring = focus_ring && !self.floating_is_active();
|
||||||
let scrolling = self
|
let scrolling = self
|
||||||
.scrolling
|
.scrolling
|
||||||
@@ -1424,8 +1427,9 @@ impl<W: LayoutElement> Workspace<W> {
|
|||||||
.render_elements(renderer, view_rect, target, floating_focus_ring);
|
.render_elements(renderer, view_rect, target, floating_focus_ring);
|
||||||
floating.into_iter().map(WorkspaceRenderElement::from)
|
floating.into_iter().map(WorkspaceRenderElement::from)
|
||||||
});
|
});
|
||||||
|
let floating = floating.into_iter().flatten();
|
||||||
|
|
||||||
floating.into_iter().flatten().chain(scrolling)
|
(floating, scrolling)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn render_above_top_layer(&self) -> bool {
|
pub fn render_above_top_layer(&self) -> bool {
|
||||||
|
|||||||
Reference in New Issue
Block a user