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

commitad1f4dae08075cebc231e1199f12ec146e03acd5
parent9b352a0908
authorLucas Galante <[email protected]>
date2026-07-05 15:06
feat: add toggle background_color configuration and fix border rendering in all_rounded_quads

 src/color.rs                 |  2 +-
 src/widget/input/checkbox.rs | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/src/color.rs b/src/color.rs
index 0886ac3..a5e5410 100644
--- a/src/color.rs
+++ b/src/color.rs
@@ -331,7 +331,7 @@ fn parse_and_set_colors(content: &str) {
             if let Ok(mut lock) = TOGGLE_OFF_COLOR.write() { *lock = c; }
         }
     }
-    if let Some(c) = get_color("/layout/toggle_bg_color") {
+    if let Some(c) = get_color("/style/control/toggle/background_color").or_else(|| get_color("/layout/toggle_bg_color")) {
         if let Ok(mut lock) = TOGGLE_BG_COLOR.write() { *lock = c; }
     }
     if let Some(c) = get_color("/style/control/ramp/background") {
diff --git a/src/widget/input/checkbox.rs b/src/widget/input/checkbox.rs
index 6e70412..338481f 100644
--- a/src/widget/input/checkbox.rs
+++ b/src/widget/input/checkbox.rs
@@ -424,6 +424,40 @@ impl Element for Toggle {
     fn corner_radius(&self) -> f32 {
         crate::layout::toggle_corner_radius()
     }
+
+    fn all_rounded_quads(&self, _ctx: &UiContext) -> Vec<(f32, f32, f32, f32, f32, [f32; 4], (bool, bool, bool, bool))> {
+        if !self.visible() {
+            return Vec::new();
+        }
+        let mut quads = Vec::new();
+        let (r1, r2, r3, r4) = self.rounded_corners();
+        let x = self.base.x;
+        let y = self.base.y;
+        let w = self.base.w;
+        let h = self.base.h;
+        let radius = self.corner_radius();
+        let bg_color = self.color();
+        
+        if r1 || r2 || r3 || r4 {
+            let border_w = crate::layout::toggle_border_width();
+            let border_color = if self.toggled {
+                colors::toggle_on_color()
+            } else {
+                colors::toggle_off_color()
+            };
+            
+            if border_w > 0.0 {
+                // Outer border rect
+                quads.push((x, y, w, h, radius, border_color, (r1, r2, r3, r4)));
+                // Inner background rect
+                let inner_radius = (radius - border_w).max(0.0);
+                quads.push((x + border_w, y + border_w, w - 2.0 * border_w, h - 2.0 * border_w, inner_radius, bg_color, (r1, r2, r3, r4)));
+            } else {
+                quads.push((x, y, w, h, radius, bg_color, (r1, r2, r3, r4)));
+            }
+        }
+        quads
+    }
 }