diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-06-28 09:50:50 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-06-28 10:39:36 +0400 |
| commit | a43f30b7f5e5853a402e78122a87bbbc49c6f829 (patch) | |
| tree | a2da1de073cdbf24c36ef4b5fbdfea1fcea54485 | |
| parent | 88f7b08e5682b568f710fcb79f6be34848d01bee (diff) | |
| download | niri-a43f30b7f5e5853a402e78122a87bbbc49c6f829.tar.gz niri-a43f30b7f5e5853a402e78122a87bbbc49c6f829.tar.bz2 niri-a43f30b7f5e5853a402e78122a87bbbc49c6f829.zip | |
Ignore compositor opacity for window screencasts
When using opacity as unfocused indicator, it will show up on the
screencast, which is undesired.
This is not a problem for window screen*shot*s where the window is
focused.
| -rw-r--r-- | src/niri.rs | 14 | ||||
| -rw-r--r-- | src/pw_utils.rs | 36 |
2 files changed, 22 insertions, 28 deletions
diff --git a/src/niri.rs b/src/niri.rs index 5b6b1df0..7314bdb4 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -3518,17 +3518,12 @@ impl Niri { continue; } - let alpha = if mapped.is_fullscreen() { - 1. - } else { - mapped.rules().opacity.unwrap_or(1.).clamp(0., 1.) - }; // FIXME: pointer. let elements = mapped.render( renderer, mapped.window.geometry().loc.to_f64(), scale, - alpha, + 1., RenderTarget::Screencast, ); let geo = elements @@ -3615,17 +3610,12 @@ impl Niri { } let (elements, geo) = elements.get_or_insert_with(|| { - let alpha = if mapped.is_fullscreen() { - 1. - } else { - mapped.rules().opacity.unwrap_or(1.).clamp(0., 1.) - }; // FIXME: pointer. let elements = mapped.render( renderer, mapped.window.geometry().loc.to_f64(), scale, - alpha, + 1., RenderTarget::Screencast, ); let geo = elements diff --git a/src/pw_utils.rs b/src/pw_utils.rs index 309edca5..f9c927ad 100644 --- a/src/pw_utils.rs +++ b/src/pw_utils.rs @@ -89,17 +89,24 @@ pub enum CastTarget { } macro_rules! make_params { - ($size:expr, $refresh:expr, $alpha:expr, $b1:expr, $b2:expr) => {{ + ($params:ident, $size:expr, $refresh:expr, $alpha:expr) => { + let mut b1 = Vec::new(); + let mut b2 = Vec::new(); + let o1 = make_video_params($size, $refresh, false); - let pod1 = make_pod($b1, o1); + let pod1 = make_pod(&mut b1, o1); - if $alpha { + let mut p1; + let mut p2; + $params = if $alpha { let o2 = make_video_params($size, $refresh, true); - &mut [pod1, make_pod($b2, o2)][..] + p2 = [pod1, make_pod(&mut b2, o2)]; + &mut p2[..] } else { - &mut [pod1][..] - } - }}; + p1 = [pod1]; + &mut p1[..] + }; + }; } impl PipeWire { @@ -424,9 +431,8 @@ impl PipeWire { trace!("starting pw stream with size={pending_size:?}, refresh={refresh}"); - let mut b1 = Vec::new(); - let mut b2 = Vec::new(); - let params = make_params!(pending_size, refresh, alpha, &mut b1, &mut b2); + let params; + make_params!(params, pending_size, refresh, alpha); stream .connect( Direction::Output, @@ -471,9 +477,8 @@ impl Cast { self.size.set(current_size.with_pending(size)); - let mut b1 = Vec::new(); - let mut b2 = Vec::new(); - let params = make_params!(size, self.refresh, self.offer_alpha, &mut b1, &mut b2); + let params; + make_params!(params, size, self.refresh, self.offer_alpha); self.stream .update_params(params) .context("error updating stream params")?; @@ -491,9 +496,8 @@ impl Cast { self.refresh = refresh; let size = self.size.get().expected_format_size(); - let mut b1 = Vec::new(); - let mut b2 = Vec::new(); - let params = make_params!(size, self.refresh, self.offer_alpha, &mut b1, &mut b2); + let params; + make_params!(params, size, self.refresh, self.offer_alpha); self.stream .update_params(params) .context("error updating stream params")?; |
