eg_seven_segment/
seven_segment_style_builder.rs1use crate::SevenSegmentStyle;
2use embedded_graphics::prelude::*;
3
4#[derive(Debug)]
6pub struct SevenSegmentStyleBuilder<C> {
7 style: SevenSegmentStyle<C>,
8}
9
10impl<C: PixelColor> SevenSegmentStyleBuilder<C> {
11 pub fn new() -> Self {
13 Self {
16 style: SevenSegmentStyle {
17 digit_size: Size::new(12, 24),
18 digit_spacing: 5,
19 segment_width: 3,
20 segment_color: None,
21 inactive_segment_color: None,
22 },
23 }
24 }
25
26 pub fn digit_size(mut self, digit_size: Size) -> Self {
28 self.style.digit_size = digit_size;
29
30 self
31 }
32
33 pub fn digit_spacing(mut self, digit_spacing: u32) -> Self {
35 self.style.digit_spacing = digit_spacing;
36
37 self
38 }
39
40 pub fn segment_width(mut self, segment_width: u32) -> Self {
42 self.style.segment_width = segment_width;
43
44 self
45 }
46
47 pub fn segment_color(mut self, segment_color: C) -> Self {
49 self.style.segment_color = Some(segment_color);
50
51 self
52 }
53
54 pub fn reset_segment_color(mut self) -> Self {
56 self.style.segment_color = None;
57
58 self
59 }
60
61 pub fn inactive_segment_color(mut self, inactive_segment_color: C) -> Self {
63 self.style.inactive_segment_color = Some(inactive_segment_color);
64
65 self
66 }
67
68 pub fn reset_inactive_segment_color(mut self) -> Self {
70 self.style.inactive_segment_color = None;
71
72 self
73 }
74
75 pub fn build(self) -> SevenSegmentStyle<C> {
77 self.style
78 }
79}
80
81impl<C: PixelColor> Default for SevenSegmentStyleBuilder<C> {
82 fn default() -> Self {
83 Self::new()
84 }
85}
86
87impl<C: PixelColor> From<&SevenSegmentStyle<C>> for SevenSegmentStyleBuilder<C> {
88 fn from(style: &SevenSegmentStyle<C>) -> Self {
89 Self { style: *style }
90 }
91}