embedded_ui/style/
monochrome.rs1use embedded_graphics::pixelcolor::BinaryColor;
2
3use crate::kit::{
4 button::{ButtonStyle, ButtonStyler},
5 checkbox::{CheckboxStyle, CheckboxStyler},
6 knob::{KnobStyle, KnobStyler},
7 select::{SelectStyle, SelectStyler},
8 slider::{SliderStatus, SliderStyle, SliderStyler},
9};
10
11use super::Styler;
12
13#[derive(Default)]
14pub struct Monochrome;
15
16#[derive(Clone, Copy)]
17pub enum BinaryClass {
18 Raw,
19 Inverted,
20}
21
22impl Styler<BinaryColor> for Monochrome {}
23
24impl ButtonStyler<BinaryColor> for Monochrome {
25 type Class<'a> = BinaryClass;
26
27 fn default<'a>() -> Self::Class<'a> {
28 BinaryClass::Raw
29 }
30
31 fn style(
32 &self,
33 _class: &Self::Class<'_>,
34 status: crate::kit::button::ButtonStatus,
35 ) -> crate::kit::button::ButtonStyle<BinaryColor> {
36 match status {
37 crate::kit::button::ButtonStatus::Normal => ButtonStyle::new()
38 .background(BinaryColor::Off)
39 .border_color(BinaryColor::Off)
40 .border_width(1)
41 .border_radius(0),
42 crate::kit::button::ButtonStatus::Focused => ButtonStyle::new()
43 .background(BinaryColor::Off)
44 .border_color(BinaryColor::On)
45 .border_width(1)
46 .border_radius(3),
47 crate::kit::button::ButtonStatus::Pressed => ButtonStyle::new()
48 .background(BinaryColor::Off)
49 .border_color(BinaryColor::On)
50 .border_width(2)
51 .border_radius(5),
52 }
53 }
54}
55
56impl SelectStyler<BinaryColor> for Monochrome {
57 type Class<'a> = BinaryClass;
58
59 fn default<'a>() -> Self::Class<'a> {
60 BinaryClass::Raw
61 }
62
63 fn style(
64 &self,
65 _class: &Self::Class<'_>,
66 status: crate::kit::select::SelectStatus,
67 ) -> crate::kit::select::SelectStyle<BinaryColor> {
68 match status {
69 crate::kit::select::SelectStatus::Normal => SelectStyle::new()
70 .background(BinaryColor::Off)
71 .border_color(BinaryColor::Off)
72 .border_width(1)
73 .border_radius(0),
74 crate::kit::select::SelectStatus::Pressed
75 | crate::kit::select::SelectStatus::Focused => SelectStyle::new()
76 .background(BinaryColor::Off)
77 .border_color(BinaryColor::On)
78 .border_width(1)
79 .border_radius(0),
80 crate::kit::select::SelectStatus::Active => SelectStyle::new()
81 .background(BinaryColor::Off)
82 .border_color(BinaryColor::On)
83 .border_width(1)
84 .border_radius(5),
85 }
86 }
87}
88
89impl SliderStyler<BinaryColor> for Monochrome {
90 type Class<'a> = BinaryClass;
91
92 fn default<'a>() -> Self::Class<'a> {
93 BinaryClass::Raw
94 }
95
96 fn style(&self, _class: &Self::Class<'_>, status: SliderStatus) -> SliderStyle<BinaryColor> {
97 match status {
98 SliderStatus::Normal => SliderStyle::new()
99 .background(BinaryColor::Off)
100 .border_color(BinaryColor::Off)
101 .border_width(1)
102 .border_radius(0),
103 SliderStatus::Focused => SliderStyle::new()
104 .background(BinaryColor::Off)
105 .border_color(BinaryColor::On)
106 .border_width(1)
107 .border_radius(5),
108 SliderStatus::Active => SliderStyle::new()
109 .background(BinaryColor::Off)
110 .border_color(BinaryColor::Off)
111 .border_width(1)
112 .border_radius(0),
113 SliderStatus::Pressed => SliderStyle::new()
114 .background(BinaryColor::Off)
115 .border_color(BinaryColor::On)
116 .border_width(2)
117 .border_radius(5),
118 }
119 }
120}
121
122impl CheckboxStyler<BinaryColor> for Monochrome {
123 type Class<'a> = BinaryClass;
124
125 fn default<'a>() -> Self::Class<'a> {
126 BinaryClass::Raw
127 }
128
129 fn style(
130 &self,
131 _class: &Self::Class<'_>,
132 status: crate::kit::checkbox::CheckboxStatus,
133 ) -> CheckboxStyle<BinaryColor> {
134 match status {
135 crate::kit::checkbox::CheckboxStatus::Normal => CheckboxStyle::new()
136 .background(BinaryColor::Off)
137 .border_color(BinaryColor::On)
138 .border_width(1)
139 .border_radius(0),
140 crate::kit::checkbox::CheckboxStatus::Pressed => CheckboxStyle::new()
141 .background(BinaryColor::Off)
142 .border_color(BinaryColor::On)
143 .border_width(2)
144 .border_radius(5),
145 crate::kit::checkbox::CheckboxStatus::Focused => CheckboxStyle::new()
146 .background(BinaryColor::Off)
147 .border_color(BinaryColor::On)
148 .border_width(1)
149 .border_radius(3),
150 crate::kit::checkbox::CheckboxStatus::Checked => CheckboxStyle::new()
151 .background(BinaryColor::Off)
152 .border_color(BinaryColor::On)
153 .border_width(1)
154 .border_radius(0),
155 }
156 }
157}
158
159impl KnobStyler<BinaryColor> for Monochrome {
160 type Class<'a> = BinaryClass;
161
162 fn default<'a>() -> Self::Class<'a> {
163 BinaryClass::Raw
164 }
165
166 fn style(
167 &self,
168 _class: &Self::Class<'_>,
169 status: crate::kit::knob::KnobStatus,
170 ) -> crate::kit::knob::KnobStyle<BinaryColor> {
171 match status {
172 crate::kit::knob::KnobStatus::Normal => KnobStyle::new()
173 .center_color(BinaryColor::On)
174 .color(BinaryColor::On)
175 .track_color(BinaryColor::Off)
176 .track_width(3),
177 crate::kit::knob::KnobStatus::Focused => KnobStyle::new()
178 .center_color(BinaryColor::On)
179 .color(BinaryColor::On)
180 .track_color(BinaryColor::Off)
181 .track_width(4),
182 crate::kit::knob::KnobStatus::Pressed => KnobStyle::new()
183 .center_color(BinaryColor::On)
184 .color(BinaryColor::On)
185 .track_color(BinaryColor::Off)
186 .track_width(3),
187 crate::kit::knob::KnobStatus::Active => KnobStyle::new()
188 .center_color(BinaryColor::On)
189 .color(BinaryColor::On)
190 .track_color(BinaryColor::Off)
191 .track_width(3),
192 }
193 }
194}