diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-24 11:11:15 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-24 11:25:48 +0400 |
| commit | 5f23d344d5d20d238eea65cd9e7189a2baf499c8 (patch) | |
| tree | 19a938ba207eccd17e38be1000f062a4e4935350 /src/niri.rs | |
| parent | e43e10f44ed085f3b489318e5f84ad0948eaefb2 (diff) | |
| download | niri-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.rs | 48 |
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(); |
