GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git
feat: add support for checkbox styling config keys
src/color.rs | 45 ++++++++++++++++++++++++++++++++++++++++++++
src/widget/input/checkbox.rs | 12 ++++++------
2 files changed, 51 insertions(+), 6 deletions(-)
diff --git a/src/color.rs b/src/color.rs
index e20c40b..5897384 100644
--- a/src/color.rs
+++ b/src/color.rs
@@ -76,6 +76,9 @@ static SPINBOX_DISPLAY_COLOR: RwLock<[f32; 4]> = RwLock::new(SPINBOX_DISPLAY);
static SPINBOX_BUTTON_COLOR: RwLock<[f32; 4]> = RwLock::new(SPINBOX_BUTTON);
static SPINBOX_BUTTON_HOVER_COLOR: RwLock<[f32; 4]> = RwLock::new(SPINBOX_BUTTON_HOVER);
static SPINBOX_TEXT_COLOR: RwLock<[f32; 4]> = RwLock::new([0.8, 0.8, 0.83, 1.0]);
+static CHECKBOX_BG_COLOR: RwLock<[f32; 4]> = RwLock::new(CHECKBOX_BG);
+static CHECKBOX_CHECKED_COLOR: RwLock<[f32; 4]> = RwLock::new(CHECKBOX_CHECKED);
+static CHECKBOX_HOVER_COLOR: RwLock<[f32; 4]> = RwLock::new(CHECKBOX_HOVER);
static TREE_BACKGROUND_COLOR: RwLock<[f32; 4]> = RwLock::new([0.08, 0.08, 0.12, 0.3]);
static TREE_BORDER_COLOR: RwLock<[f32; 4]> = RwLock::new([0.18, 0.18, 0.24, 1.0]);
@@ -373,6 +376,15 @@ fn parse_and_set_colors(content: &str) {
if let Some(c) = get_color("/style/control/spinbox/text_color") {
if let Ok(mut lock) = SPINBOX_TEXT_COLOR.write() { *lock = c; }
}
+ if let Some(c) = get_color("/style/control/checkbox/background_color").or_else(|| get_color("/style/checkbox/background_color")) {
+ if let Ok(mut lock) = CHECKBOX_BG_COLOR.write() { *lock = c; }
+ }
+ if let Some(c) = get_color("/style/control/checkbox/checked_color").or_else(|| get_color("/style/checkbox/checked_color")) {
+ if let Ok(mut lock) = CHECKBOX_CHECKED_COLOR.write() { *lock = c; }
+ }
+ if let Some(c) = get_color("/style/control/checkbox/hover_color").or_else(|| get_color("/style/checkbox/hover_color")) {
+ if let Ok(mut lock) = CHECKBOX_HOVER_COLOR.write() { *lock = c; }
+ }
if let Some(c) = get_color("/style/control/progressbar/background") {
if let Ok(mut lock) = PROGRESS_BG_COLOR.write() { *lock = c; }
}
@@ -1153,6 +1165,39 @@ pub fn set_spinbox_text_color(color: [f32; 4]) {
}
}
+pub fn checkbox_bg() -> [f32; 4] {
+ load_colors_once();
+ *CHECKBOX_BG_COLOR.read().unwrap()
+}
+
+pub fn set_checkbox_bg(color: [f32; 4]) {
+ if let Ok(mut lock) = CHECKBOX_BG_COLOR.write() {
+ *lock = color;
+ }
+}
+
+pub fn checkbox_checked() -> [f32; 4] {
+ load_colors_once();
+ *CHECKBOX_CHECKED_COLOR.read().unwrap()
+}
+
+pub fn set_checkbox_checked(color: [f32; 4]) {
+ if let Ok(mut lock) = CHECKBOX_CHECKED_COLOR.write() {
+ *lock = color;
+ }
+}
+
+pub fn checkbox_hover() -> [f32; 4] {
+ load_colors_once();
+ *CHECKBOX_HOVER_COLOR.read().unwrap()
+}
+
+pub fn set_checkbox_hover(color: [f32; 4]) {
+ if let Ok(mut lock) = CHECKBOX_HOVER_COLOR.write() {
+ *lock = color;
+ }
+}
+
pub fn set_backplate_corner_radius(radius: f32) {
if let Ok(mut lock) = BACKPLATE_CORNER_RADIUS.write() {
*lock = radius;
diff --git a/src/widget/input/checkbox.rs b/src/widget/input/checkbox.rs
index 626b5e8..b3f390c 100644
--- a/src/widget/input/checkbox.rs
+++ b/src/widget/input/checkbox.rs
@@ -76,11 +76,11 @@ impl Element for Checkbox {
} else {
// Standalone mode -> colored widget background
if self.checked {
- colors::CHECKBOX_CHECKED
+ colors::checkbox_checked()
} else if self.base.hovered {
- colors::CHECKBOX_HOVER
+ colors::checkbox_hover()
} else {
- colors::CHECKBOX_BG
+ colors::checkbox_bg()
}
}
}
@@ -118,11 +118,11 @@ impl Element for Checkbox {
// Box background
let bg_color = if self.checked {
- colors::CHECKBOX_CHECKED
+ colors::checkbox_checked()
} else if self.base.hovered {
- colors::CHECKBOX_HOVER
+ colors::checkbox_hover()
} else {
- colors::CHECKBOX_BG
+ colors::checkbox_bg()
};
quads.push((box_x, box_y, box_size, box_size, bg_color));