48 lines
1.1 KiB
Rust
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
|
|
}
|
|
}
|