GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git
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