use crate::SevenSegmentStyle;
use embedded_graphics::prelude::*;
#[derive(Debug)]
pub struct SevenSegmentStyleBuilder<C> {
style: SevenSegmentStyle<C>,
}
impl<C: PixelColor> SevenSegmentStyleBuilder<C> {
pub fn new() -> Self {
Self {
style: SevenSegmentStyle {
digit_size: Size::new(12, 24),
digit_spacing: 5,
segment_width: 3,
segment_color: None,
inactive_segment_color: None,
},
}
}
pub fn digit_size(mut self, digit_size: Size) -> Self {
self.style.digit_size = digit_size;
self
}
pub fn digit_spacing(mut self, digit_spacing: u32) -> Self {
self.style.digit_spacing = digit_spacing;
self
}
pub fn segment_width(mut self, segment_width: u32) -> Self {
self.style.segment_width = segment_width;
self
}
pub fn segment_color(mut self, segment_color: C) -> Self {
self.style.segment_color = Some(segment_color);
self
}
pub fn reset_segment_color(mut self) -> Self {
self.style.segment_color = None;
self
}
pub fn inactive_segment_color(mut self, inactive_segment_color: C) -> Self {
self.style.inactive_segment_color = Some(inactive_segment_color);
self
}
pub fn reset_inactive_segment_color(mut self) -> Self {
self.style.inactive_segment_color = None;
self
}
pub fn build(self) -> SevenSegmentStyle<C> {
self.style
}
}
impl<C: PixelColor> Default for SevenSegmentStyleBuilder<C> {
fn default() -> Self {
Self::new()
}
}
impl<C: PixelColor> From<&SevenSegmentStyle<C>> for SevenSegmentStyleBuilder<C> {
fn from(style: &SevenSegmentStyle<C>) -> Self {
Self { style: *style }
}
}