Commit 2a9ba5d3d11d
tarball1 file changed+31-15
@@ -169,7 +169,17 @@ pub fn build(
169169
};170170
let effect = anim.effect(id, now);171171
let first = out.len();172
- window_elements(&mut out, renderer, &state.window, r, effect, gliding, scale);172
+ let opacity = state.rule.opacity.unwrap_or(1.0);173
+ window_elements(174
+ &mut out,175
+ renderer,176
+ &state.window,177
+ r,178
+ effect,179
+ gliding,180
+ scale,181
+ opacity,182
+ );173183
let clip = framed.then(|| corner_clip(r, deco, scale)).flatten();174184
if let Some(clip) = clip {175185
clip_window(&mut out, first, clip);@@ -182,7 +192,7 @@ pub fn build(
182192
} else {183193
deco.unfocused.0184194
};185
- let alpha = effect.map_or(1.0, |e| e.progress);195
+ let alpha = effect.map_or(1.0, |e| e.progress) * opacity;186196
let borders = &mut state.borders;187197
let first = out.len();188198
border_elements(&mut out, borders, r, deco, color, alpha, scale);@@ -219,6 +229,7 @@ fn window_elements(
219229
effect: Option<Effect>,220230
scaled: bool,221231
scale: f64,232
+ opacity: f32,222233
) {223234
let Some(((x, y), (w, h))) = pixels(r, scale) else {224235
return;@@ -227,7 +238,7 @@ fn window_elements(
227238
let inset = geo.loc.to_physical_precise_round::<_, i32>(scale);228239
let drawn: Size<i32, Physical> = geo.size.to_physical_precise_round(scale);229240
let loc = Point::<i32, Physical>::from((x - inset.x, y - inset.y));230
- let alpha = effect.map_or(1.0, |e| e.progress);241
+ let alpha = effect.map_or(1.0, |e| e.progress) * opacity;231242
let elems: Vec<WaylandSurfaceRenderElement<VulkanRenderer>> = match window.toplevel() {232243
Some(t) => render_elements_from_surface_tree(233244
renderer,@@ -248,6 +259,7 @@ fn window_elements(
248259
((x, y), (w, h)),249260
effect,250261
scale,262
+ opacity,251263
);252264
return;253265
}@@ -414,6 +426,7 @@ fn effect_elements(
414426
(at, size): ((i32, i32), (i32, i32)),415427
effect: Effect,416428
scale: f64,429
+ opacity: f32,417430
) {418431
let Some(root) = crate::wm::root(window) else {419432
return;@@ -444,14 +457,9 @@ fn effect_elements(
444457
);445458
let bounds = tex.size().to_logical(buffer_scale, transform).to_f64();446459
let src = src.to_buffer(f64::from(buffer_scale), transform, &bounds);447
- out.push(Draw::Texture(PlacedTexture::new(448
- &tex,449
- transform,450
- src,451
- at,452
- size,453
- Some(effect),454
- )));460
+ let mut placed = PlacedTexture::new(&tex, transform, src, at, size, Some(effect));461
+ placed.alpha = opacity;462
+ out.push(Draw::Texture(placed));455463
}456464
}457465
@@ -464,6 +472,7 @@ pub struct PlacedTexture {
464472
geometry: Rectangle<i32, Physical>,465473
transform: Transform,466474
effect: Option<Effect>,475
+ alpha: f32,467476
}468477
469478
impl PlacedTexture {@@ -482,6 +491,7 @@ impl PlacedTexture {
482491
geometry: Rectangle::new(at.into(), size.into()),483492
transform,484493
effect,494
+ alpha: 1.0,485495
}486496
}487497
}@@ -519,9 +529,15 @@ impl RenderElement<VulkanRenderer> for PlacedTexture {
519529
_cache: Option<&UserDataMap>,520530
) -> Result<(), monolith_render_vk::Error> {521531
match self.effect {522
- Some(effect) => {523
- frame.render_effect(&self.texture, src, dst, damage, self.transform, 1.0, effect)524
- }532
+ Some(effect) => frame.render_effect(533
+ &self.texture,534
+ src,535
+ dst,536
+ damage,537
+ self.transform,538
+ self.alpha,539
+ effect,540
+ ),525541
None => frame.render_texture_from_to(526542
&self.texture,527543
src,@@ -529,7 +545,7 @@ impl RenderElement<VulkanRenderer> for PlacedTexture {
529545
damage,530546
opaque_regions,531547
self.transform,532
- 1.0,548
+ self.alpha,533549
),534550
}535551
}