teksilo_core/styles/
checkbox_style.rs1use std::rc::Rc;
7
8use serde::{Deserialize, Serialize};
9
10use crate::build_context::BuildContext;
11use crate::signal::Signal;
12use crate::widget_id::WidgetId;
13
14#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
15pub enum CheckboxVariant {
16 #[default]
18 Square,
19 Rounded,
21 Circle,
23}
24
25#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
28pub enum CheckboxState {
29 #[default]
30 Unchecked,
31 Checked,
32 Indeterminate,
33}
34
35#[derive(Clone, Debug)]
36pub struct CheckboxStyleConfig {
37 pub state: Signal<CheckboxState>,
38 pub is_hovered: Signal<bool>,
39 pub is_pressed: Signal<bool>,
40 pub is_focused: Signal<bool>,
41 pub is_disabled: Signal<bool>,
42 pub variant: CheckboxVariant,
43}
44
45pub trait CheckboxStyle: 'static {
46 fn make_body(&self, cfg: &CheckboxStyleConfig, ctx: &mut BuildContext) -> WidgetId;
47}
48
49pub type SharedCheckboxStyle = Rc<dyn CheckboxStyle>;