mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-24 02:01:18 +07:00
Extract encompassing_geo()
This commit is contained in:
+4
-10
@@ -29,8 +29,7 @@ use smithay::backend::renderer::element::utils::{
|
|||||||
select_dmabuf_feedback, Relocate, RelocateRenderElement,
|
select_dmabuf_feedback, Relocate, RelocateRenderElement,
|
||||||
};
|
};
|
||||||
use smithay::backend::renderer::element::{
|
use smithay::backend::renderer::element::{
|
||||||
default_primary_scanout_output_compare, Element as _, Id, Kind, PrimaryScanoutOutput,
|
default_primary_scanout_output_compare, Id, Kind, PrimaryScanoutOutput, RenderElementStates,
|
||||||
RenderElementStates,
|
|
||||||
};
|
};
|
||||||
use smithay::backend::renderer::gles::GlesRenderer;
|
use smithay::backend::renderer::gles::GlesRenderer;
|
||||||
use smithay::backend::renderer::sync::SyncPoint;
|
use smithay::backend::renderer::sync::SyncPoint;
|
||||||
@@ -145,8 +144,8 @@ use crate::render_helpers::primary_gpu_texture::PrimaryGpuTextureRenderElement;
|
|||||||
use crate::render_helpers::renderer::NiriRenderer;
|
use crate::render_helpers::renderer::NiriRenderer;
|
||||||
use crate::render_helpers::texture::TextureBuffer;
|
use crate::render_helpers::texture::TextureBuffer;
|
||||||
use crate::render_helpers::{
|
use crate::render_helpers::{
|
||||||
render_to_dmabuf, render_to_encompassing_texture, render_to_shm, render_to_texture,
|
encompassing_geo, render_to_dmabuf, render_to_encompassing_texture, render_to_shm,
|
||||||
render_to_vec, shaders, RenderTarget, SplitElements,
|
render_to_texture, render_to_vec, shaders, RenderTarget, SplitElements,
|
||||||
};
|
};
|
||||||
use crate::ui::config_error_notification::ConfigErrorNotification;
|
use crate::ui::config_error_notification::ConfigErrorNotification;
|
||||||
use crate::ui::exit_confirm_dialog::ExitConfirmDialog;
|
use crate::ui::exit_confirm_dialog::ExitConfirmDialog;
|
||||||
@@ -4735,12 +4734,7 @@ impl Niri {
|
|||||||
alpha,
|
alpha,
|
||||||
RenderTarget::ScreenCapture,
|
RenderTarget::ScreenCapture,
|
||||||
);
|
);
|
||||||
let geo = elements
|
let geo = encompassing_geo(scale, elements.iter());
|
||||||
.iter()
|
|
||||||
.map(|ele| ele.geometry(scale))
|
|
||||||
.reduce(|a, b| a.merge(b))
|
|
||||||
.unwrap_or_default();
|
|
||||||
|
|
||||||
let elements = elements.iter().rev().map(|elem| {
|
let elements = elements.iter().rev().map(|elem| {
|
||||||
RelocateRenderElement::from_element(elem, geo.loc.upscale(-1), Relocate::Relative)
|
RelocateRenderElement::from_element(elem, geo.loc.upscale(-1), Relocate::Relative)
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -157,6 +157,16 @@ impl ToRenderElement for BakedBuffer<SolidColorBuffer> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn encompassing_geo(
|
||||||
|
scale: Scale<f64>,
|
||||||
|
elements: impl Iterator<Item = impl RenderElement<GlesRenderer>>,
|
||||||
|
) -> Rectangle<i32, Physical> {
|
||||||
|
elements
|
||||||
|
.map(|ele| ele.geometry(scale))
|
||||||
|
.reduce(|a, b| a.merge(b))
|
||||||
|
.unwrap_or_default()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn render_to_encompassing_texture(
|
pub fn render_to_encompassing_texture(
|
||||||
renderer: &mut GlesRenderer,
|
renderer: &mut GlesRenderer,
|
||||||
scale: Scale<f64>,
|
scale: Scale<f64>,
|
||||||
@@ -164,11 +174,7 @@ pub fn render_to_encompassing_texture(
|
|||||||
fourcc: Fourcc,
|
fourcc: Fourcc,
|
||||||
elements: &[impl RenderElement<GlesRenderer>],
|
elements: &[impl RenderElement<GlesRenderer>],
|
||||||
) -> anyhow::Result<(GlesTexture, SyncPoint, Rectangle<i32, Physical>)> {
|
) -> anyhow::Result<(GlesTexture, SyncPoint, Rectangle<i32, Physical>)> {
|
||||||
let geo = elements
|
let geo = encompassing_geo(scale, elements.iter());
|
||||||
.iter()
|
|
||||||
.map(|ele| ele.geometry(scale))
|
|
||||||
.reduce(|a, b| a.merge(b))
|
|
||||||
.unwrap_or_default();
|
|
||||||
let elements = elements.iter().rev().map(|ele| {
|
let elements = elements.iter().rev().map(|ele| {
|
||||||
RelocateRenderElement::from_element(ele, geo.loc.upscale(-1), Relocate::Relative)
|
RelocateRenderElement::from_element(ele, geo.loc.upscale(-1), Relocate::Relative)
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user