Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
grid: cells inherit the window backplate corner radius
Retire `desktop cell_corner_radius` (and its live-reload key): the grid
cells now round with style.surface.backplate.corner_radius, the same
single knob cce-ui apps and the compositor's decorated-window clip use.
After the Tiled rework a tiled window's content covers exactly the
visible cell box, so matching radii put the window's arc precisely on
the cell's arc — cells read as sockets windows drop into.
Co-Authored-By: Claude Fable 5 <[email protected]>
src/server/config.rs | 23 +++++------------------
src/server/window_manager.rs | 5 -----
2 files changed, 5 insertions(+), 23 deletions(-)
diff --git a/src/server/config.rs b/src/server/config.rs
index 90f246b..8b932c2 100644
--- a/src/server/config.rs
+++ b/src/server/config.rs
@@ -54,7 +54,6 @@ pub struct Layout {
pub desktop_cell_color: [f32; 4],
pub desktop_grid_scale: f64,
pub desktop_gap_width: i32,
- pub desktop_cell_corner_radius: i32,
pub desktop_cell_fade_inset: i64,
pub desktop_grid_fade_mode: String,
/// Drop shadow under cce/ssd windows (scenefx box-shadow node).
@@ -121,7 +120,10 @@ impl Layout {
cell_color: Rgba(self.desktop_cell_color),
cell_size: self.desktop_grid_scale,
gap_width: self.desktop_gap_width as f64,
- cell_corner_radius: self.desktop_cell_corner_radius,
+ // Cells inherit the window backplate radius: a tiled window's
+ // content covers exactly the visible cell box, so its arc sits
+ // precisely on the cell's arc underneath.
+ cell_corner_radius: self.backplate_corner_radius,
cell_fade_inset: self.desktop_cell_fade_inset as i32,
fade_mode: GridFadeMode::from_name(&self.desktop_grid_fade_mode),
})
@@ -182,7 +184,6 @@ impl Default for Layout {
desktop_cell_color: [0.05, 0.05, 0.05, 0.05],
desktop_grid_scale: 100.0,
desktop_gap_width: 1,
- desktop_cell_corner_radius: 0,
desktop_cell_fade_inset: 0,
desktop_grid_fade_mode: "linear".to_string(),
bevel_enabled: true,
@@ -389,8 +390,6 @@ pub struct SurfaceConfig {
pub desktop_grid_scale: i64,
#[serde(default = "default_desktop_gap_width")]
pub desktop_gap_width: i64,
- #[serde(default = "default_desktop_cell_corner_radius")]
- pub desktop_cell_corner_radius: i64,
#[serde(default = "default_desktop_cell_fade_inset")]
pub desktop_cell_fade_inset: i64,
#[serde(default = "default_desktop_grid_fade_mode")]
@@ -497,7 +496,6 @@ impl Default for SurfaceConfig {
desktop_cell_color: default_desktop_cell_color(),
desktop_grid_scale: default_desktop_grid_scale(),
desktop_gap_width: default_desktop_gap_width(),
- desktop_cell_corner_radius: default_desktop_cell_corner_radius(),
desktop_cell_fade_inset: default_desktop_cell_fade_inset(),
desktop_grid_fade_mode: default_desktop_grid_fade_mode(),
desktop_snap: default_desktop_snap(),
@@ -555,10 +553,6 @@ fn default_desktop_gap_width() -> i64 {
1
}
-fn default_desktop_cell_corner_radius() -> i64 {
- 0
-}
-
fn default_desktop_cell_fade_inset() -> i64 {
0
}
@@ -1732,11 +1726,6 @@ fn parse_kdl_config(content: &str) -> Result<Config, String> {
surface.desktop_gap_width = val;
}
}
- "cell_corner_radius" => {
- if let Some(val) = entry.value().as_i64() {
- surface.desktop_cell_corner_radius = val;
- }
- }
"cell_fade_inset" => {
if let Some(val) = entry.value().as_i64() {
surface.desktop_cell_fade_inset = val;
@@ -1976,7 +1965,6 @@ fn parse_kdl_config(content: &str) -> Result<Config, String> {
surface.desktop_cell_color = get_child_arg_string(node, "desktop_cell_color", &default_desktop_cell_color());
surface.desktop_grid_scale = get_child_arg_i64(node, "grid_cell_size", get_child_arg_i64(node, "desktop_grid_scale", default_desktop_grid_scale()));
surface.desktop_gap_width = get_child_arg_i64(node, "desktop_gap_width", default_desktop_gap_width());
- surface.desktop_cell_corner_radius = get_child_arg_i64(node, "desktop_cell_corner_radius", default_desktop_cell_corner_radius());
surface.desktop_cell_fade_inset = get_child_arg_i64(node, "desktop_cell_fade_inset", default_desktop_cell_fade_inset());
surface.desktop_grid_fade_mode = get_child_arg_string(node, "grid_fade_mode", &default_desktop_grid_fade_mode());
surface.desktop_snap = get_child_arg_bool(node, "desktop_snap", default_desktop_snap());
@@ -2163,7 +2151,6 @@ pub fn parse_config(path: &str, state: &mut crate::window_manager::WindowManager
state.layout.desktop_edge_pan_band = config.surface.desktop_edge_pan_band.max(1) as f64;
state.layout.desktop_edge_pan_speed = config.surface.desktop_edge_pan_speed.max(0) as f64;
state.layout.desktop_gap_width = config.surface.desktop_gap_width as i32;
- state.layout.desktop_cell_corner_radius = config.surface.desktop_cell_corner_radius as i32;
state.layout.desktop_cell_fade_inset = config.surface.desktop_cell_fade_inset;
state.layout.desktop_grid_fade_mode = config.surface.desktop_grid_fade_mode.clone();
@@ -2423,7 +2410,7 @@ mod tests {
parse_config(&path, &mut server.wm).unwrap();
assert!(!server.wm.layout.desktop_gap_color.is_empty());
assert!(server.wm.layout.desktop_gap_width >= 0);
- assert!(server.wm.layout.desktop_cell_corner_radius >= 0);
+ assert!(server.wm.layout.backplate_corner_radius >= 0);
println!("TEST_WM_STARTUP: {:?}", server.wm.startup);
println!("TEST_WM_PATH: {:?}", std::env::var("PATH"));
}
diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index 5dd03d7..8a5aa5a 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -3603,11 +3603,6 @@ impl WindowManager {
self.layout.desktop_gap_width = v;
}
}
- "desktop_cell_corner_radius" => {
- if let Ok(v) = val.parse::<i32>() {
- self.layout.desktop_cell_corner_radius = v;
- }
- }
"desktop_cell_fade_inset" => {
if let Ok(v) = val.parse::<i64>() {
self.layout.desktop_cell_fade_inset = v;