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