use embedded_components::{Calendar, ComponentStyle, Gauge, ScrollingCalendar}; use embedded_graphics::{ pixelcolor::{raw::RawU2, BinaryColor, Rgb888}, prelude::*, }; use embedded_graphics_simulator::{ BinaryColorTheme, OutputSettingsBuilder, SimulatorDisplay, Window, }; #[derive(Copy, Clone, PartialEq, Eq)] enum TriColor { White, Black, Red, } impl PixelColor for TriColor { type Raw = RawU2; } impl From for TriColor { fn from(value: BinaryColor) -> TriColor { match value { BinaryColor::On => TriColor::Black, BinaryColor::Off => TriColor::White, } } } impl Into for TriColor { fn into(self) -> Rgb888 { match self { TriColor::Black => Rgb888::new(0, 0, 0), TriColor::White => Rgb888::new(255, 255, 255), TriColor::Red => Rgb888::new(180, 0, 0), } } } impl From for TriColor { fn from(value: Rgb888) -> TriColor { match value { _ => TriColor::White, } } } fn main() -> Result<(), core::convert::Infallible> { //let mut display = SimulatorDisplay::::new(Size::new(212, 104)); //let mut display = SimulatorDisplay::::new(Size::new(800, 480)); let mut display = SimulatorDisplay::::new(Size::new(800, 480)); let fg_color = TriColor::Black; let bg_color = TriColor::White; let hi_color = Some(TriColor::Red); let gauge = Gauge { top_left: Point::new(300, 300), bezel: 1, border: 1, size: Size::new(200, 20), ratio: 0.5, fg_color, bg_color, text: "test test test test test", }; gauge.draw(&mut display)?; let calendar = Calendar { top_left: Point::new(10, 10), size: Size::new(196, 196), border: 1, fg_color, bg_color, hi_color, }; calendar.draw(&mut display)?; let calendar_style = ComponentStyle { border: 1, bezel: 1, fg_color, bg_color, hi_color: TriColor::Red, }; let calendar_week = ScrollingCalendar { top_left: Point::new(400, 10), size: Size::new(396, 396), style: calendar_style, day: chrono::Local::now() .naive_local() .date() .checked_add_signed(chrono::Duration::days(28 * 4 * 0 - 14)) .unwrap(), weeks: 5, }; calendar_week.draw(&mut display)?; let output_settings = OutputSettingsBuilder::new() .theme(BinaryColorTheme::Default) .build(); Window::new("Hello World", &output_settings).show_static(&display); Ok(()) }