feat: add custom border radius property for windows

This commit is contained in:
Ericky Dos Santos 2026-01-27 17:30:59 -05:00
parent 3e78eb2381
commit d3aa7197d1
4 changed files with 22 additions and 6 deletions

View file

@ -15,6 +15,13 @@ pub struct CornerRadii {
pub radius_l: [f32; 4],
/// extra large corner radii
pub radius_xl: [f32; 4],
/// window corner radii (used by compositor for window decorations)
#[serde(default = "default_radius_window")]
pub radius_window: [f32; 4],
}
fn default_radius_window() -> [f32; 4] {
[22.0; 4]
}
impl Default for CornerRadii {
@ -26,6 +33,7 @@ impl Default for CornerRadii {
radius_m: [16.0; 4],
radius_l: [32.0; 4],
radius_xl: [160.0; 4],
radius_window: [22.0; 4],
}
}
}

View file

@ -653,6 +653,14 @@ impl Theme {
self.corner_radii.radius_s
}
#[must_use]
#[allow(clippy::doc_markdown)]
#[inline]
/// get @radius_window (window corner radius for compositor)
pub fn radius_window(&self) -> [f32; 4] {
self.corner_radii.radius_window
}
#[must_use]
#[allow(clippy::doc_markdown)]
#[inline]

View file

@ -657,7 +657,7 @@ impl<T: Application> Cosmic<T> {
let theme = THEME.lock().unwrap();
let t = theme.cosmic();
let radii = t.radius_s().map(|x| if x < 4.0 { x } else { x + 4.0 });
let radii = t.radius_window();
let cur_rad = CornerRadius {
top_left: radii[0].round() as u32,
top_right: radii[1].round() as u32,
@ -797,7 +797,7 @@ impl<T: Application> Cosmic<T> {
let t = cosmic_theme.cosmic();
let radii = t.radius_s().map(|x| if x < 4.0 { x } else { x + 4.0 });
let radii = t.radius_window();
let cur_rad = CornerRadius {
top_left: radii[0].round() as u32,
top_right: radii[1].round() as u32,
@ -943,7 +943,7 @@ impl<T: Application> Cosmic<T> {
let t = cosmic_theme.cosmic();
let radii = t.radius_s().map(|x| if x < 4.0 { x } else { x + 4.0 });
let radii = t.radius_window();
let cur_rad = CornerRadius {
top_left: radii[0].round() as u32,
top_right: radii[1].round() as u32,
@ -1219,7 +1219,7 @@ impl<T: Application> Cosmic<T> {
let theme = THEME.lock().unwrap();
let t = theme.cosmic();
let radii = t.radius_s().map(|x| if x < 4.0 { x } else { x + 4.0 });
let radii = t.radius_window();
let cur_rad = CornerRadius {
top_left: radii[0].round() as u32,
top_right: radii[1].round() as u32,

View file

@ -470,8 +470,8 @@ impl iced_container::Catalog for Theme {
fn style(&self, class: &Self::Class<'_>) -> iced_container::Style {
let cosmic = self.cosmic();
// Ensures visually aligned radii for content and window corners
let window_corner_radius = cosmic.radius_s().map(|x| if x < 4.0 { x } else { x + 4.0 });
// Use dedicated window radius from theme
let window_corner_radius = cosmic.radius_window();
match class {
Container::Transparent => iced_container::Style::default(),