rustphone/src/display/simulator.rs

48 lines
1.1 KiB
Rust

use embedded_graphics::{pixelcolor::BinaryColor, prelude::*};
use embedded_graphics_simulator::{
BinaryColorTheme, OutputSettingsBuilder, SimulatorDisplay, SimulatorEvent, Window,
};
static mut WINDOW: core::mem::MaybeUninit<Window> = core::mem::MaybeUninit::uninit();
pub fn window() -> &'static Window {
unsafe { WINDOW.assume_init_ref() }
}
pub fn window_mut() -> &'static mut Window {
unsafe { WINDOW.assume_init_mut() }
}
pub struct Display {
display: SimulatorDisplay<BinaryColor>,
}
impl Display {
pub fn new() -> Self {
let output_settings = OutputSettingsBuilder::new()
.theme(BinaryColorTheme::Default)
.build();
unsafe { WINDOW.write(Window::new("Rustphone", &output_settings)) };
Self {
display: SimulatorDisplay::new(Size::new(200, 200)),
}
}
pub fn update(&mut self) {
window_mut().update(&self.display);
if window_mut().events().any(|e| e == SimulatorEvent::Quit) {
std::process::exit(0);
}
}
pub fn inner(&self) -> &SimulatorDisplay<BinaryColor> {
&self.display
}
pub fn inner_mut(&mut self) -> &mut SimulatorDisplay<BinaryColor> {
&mut self.display
}
}