aboutsummaryrefslogtreecommitdiff
path: root/src/niri.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-03-24 11:11:15 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-03-24 11:25:48 +0400
commit5f23d344d5d20d238eea65cd9e7189a2baf499c8 (patch)
tree19a938ba207eccd17e38be1000f062a4e4935350 /src/niri.rs
parente43e10f44ed085f3b489318e5f84ad0948eaefb2 (diff)
downloadniri-5f23d344d5d20d238eea65cd9e7189a2baf499c8.tar.gz
niri-5f23d344d5d20d238eea65cd9e7189a2baf499c8.tar.bz2
niri-5f23d344d5d20d238eea65cd9e7189a2baf499c8.zip
Make screenshot UI render target-aware
Diffstat (limited to 'src/niri.rs')
-rw-r--r--src/niri.rs48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/niri.rs b/src/niri.rs
index 88326119..02169a58 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -2307,7 +2307,7 @@ impl Niri {
if self.screenshot_ui.is_open() {
elements.extend(
self.screenshot_ui
- .render_output(output)
+ .render_output(output, target)
.into_iter()
.map(OutputRenderElements::from),
);
@@ -3104,31 +3104,37 @@ impl Niri {
let size = transform.transform_size(size);
let scale = Scale::from(output.current_scale().fractional_scale());
- let elements = self.render::<GlesRenderer>(
- renderer,
- &output,
- true,
+ let targets = [
+ RenderTarget::Output,
+ RenderTarget::Screencast,
RenderTarget::ScreenCapture,
- );
- let elements = elements.iter().rev();
+ ];
+ let textures = targets.map(|target| {
+ let elements = self.render::<GlesRenderer>(renderer, &output, true, target);
+ let elements = elements.iter().rev();
- let res = render_to_texture(
- renderer,
- size,
- scale,
- Transform::Normal,
- Fourcc::Abgr8888,
- elements,
- );
- let screenshot = match res {
- Ok((texture, _)) => texture,
- Err(err) => {
+ let res = render_to_texture(
+ renderer,
+ size,
+ scale,
+ Transform::Normal,
+ Fourcc::Abgr8888,
+ elements,
+ );
+
+ if let Err(err) = &res {
warn!("error rendering output {}: {err:?}", output.name());
- return None;
}
- };
- Some((output, screenshot))
+ res
+ });
+
+ if textures.iter().any(|res| res.is_err()) {
+ return None;
+ }
+
+ let textures = textures.map(|res| res.unwrap().0);
+ Some((output, textures))
})
.collect();