From acd4cb51aa0e013bfec14444ee48a01c60ebaf8a Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Tue, 21 Jan 2025 09:40:00 +0300 Subject: Implement shadows for layer surfaces --- src/layer/mod.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/layer/mod.rs') diff --git a/src/layer/mod.rs b/src/layer/mod.rs index 72e804d5..36e7ee67 100644 --- a/src/layer/mod.rs +++ b/src/layer/mod.rs @@ -1,5 +1,5 @@ use niri_config::layer_rule::{LayerRule, Match}; -use niri_config::BlockOutFrom; +use niri_config::{BlockOutFrom, CornerRadius, ShadowRule}; use smithay::desktop::LayerSurface; pub mod mapped; @@ -13,6 +13,12 @@ pub struct ResolvedLayerRules { /// Whether to block out this layer surface from certain render targets. pub block_out_from: Option, + + /// Shadow overrides. + pub shadow: ShadowRule, + + /// Corner radius to assume this layer surface has. + pub geometry_corner_radius: Option, } impl ResolvedLayerRules { @@ -20,6 +26,17 @@ impl ResolvedLayerRules { Self { opacity: None, block_out_from: None, + shadow: ShadowRule { + off: false, + on: false, + offset: None, + softness: None, + spread: None, + draw_behind_window: None, + color: None, + inactive_color: None, + }, + geometry_corner_radius: None, } } @@ -53,6 +70,11 @@ impl ResolvedLayerRules { if let Some(x) = rule.block_out_from { resolved.block_out_from = Some(x); } + if let Some(x) = rule.geometry_corner_radius { + resolved.geometry_corner_radius = Some(x); + } + + resolved.shadow.merge_with(&rule.shadow); } resolved -- cgit