git.lucas.co / cce-ui
GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git

commitd66d0063a6aa77c2b43c30e1ffb1894f47e14191
parent6c149eae87
authorLucas Galante <[email protected]>
date2026-07-04 16:25
Support configurable plate blur setting in config.kdl, defaulting to false

 src/color.rs                  | 25 +++++++++++++++++++++++++
 src/layout.rs                 |  1 +
 src/widget/container/plate.rs |  3 ++-
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/color.rs b/src/color.rs
index 3b773e2..a53375b 100644
--- a/src/color.rs
+++ b/src/color.rs
@@ -467,6 +467,11 @@ fn parse_and_set_colors(content: &str) {
     if let Some(t) = val.pointer("/style/surface/plate/border_thickness").and_then(|v| v.as_f64()) {
         if let Ok(mut lock) = PLATE_BORDER_THICKNESS.write() { *lock = t as f32; }
     }
+    if let Some(blur) = val.pointer("/style/surface/plate/blur").and_then(|v| v.as_bool()) {
+        if let Ok(mut lock) = PLATE_BLUR.write() { *lock = blur; }
+    } else if let Some(blur_val) = val.pointer("/style/surface/plate/blur").and_then(|v| v.as_f64()) {
+        if let Ok(mut lock) = PLATE_BLUR.write() { *lock = blur_val > 0.001; }
+    }
 }
 
 fn load_colors_once() {
@@ -1189,6 +1194,22 @@ pub fn set_plate_border_thickness(t: f32) {
     }
 }
 
+static PLATE_BLUR: RwLock<bool> = RwLock::new(false);
+
+pub fn plate_blur() -> bool {
+    load_colors_once();
+    if let Ok(lock) = PLATE_BLUR.read() {
+        return *lock;
+    }
+    false
+}
+
+pub fn set_plate_blur(b: bool) {
+    if let Ok(mut lock) = PLATE_BLUR.write() {
+        *lock = b;
+    }
+}
+
 #[cfg(test)]
 mod color_tests {
     use super::*;
@@ -1206,6 +1227,10 @@ mod color_tests {
         }
         println!("DROPDOWN COLOR GETTER: {:?}", dropdown_background_color());
         println!("LIST FONT COLOR GETTER: {:?}", list_font_color());
+        println!("PLATE COLOR: {:?}", plate_color());
+        println!("PLATE BORDER COLOR: {:?}", plate_border_color());
+        println!("PLATE BORDER THICKNESS: {:?}", plate_border_thickness());
+        println!("PLATE BLUR: {:?}", plate_blur());
     }
 }
 
diff --git a/src/layout.rs b/src/layout.rs
index 5b0c0ef..04b7f21 100644
--- a/src/layout.rs
+++ b/src/layout.rs
@@ -165,6 +165,7 @@ fn flatten_json_to_flat_props(val: &serde_json::Value, prefix: &str, flat_props:
                 "style.surface.plate.color" => "plate_color",
                 "style.surface.plate.border_color" => "plate_border_color",
                 "style.surface.plate.border_thickness" => "plate_border_thickness",
+                "style.surface.plate.blur" => "plate_blur",
                 
                 other => {
                     if let Some(rest) = other.strip_prefix("layout.") {
diff --git a/src/widget/container/plate.rs b/src/widget/container/plate.rs
index 70533e8..6e02746 100644
--- a/src/widget/container/plate.rs
+++ b/src/widget/container/plate.rs
@@ -166,7 +166,8 @@ impl Element for Plate {
         c[3] *= crate::layout::plate_opacity();
         c[3] *= self.network_opacity;
 
-        if self.blur {
+        let use_blur = self.blur && colors::plate_blur();
+        if use_blur {
             c[3] = -c[3].abs();
         }
         c