use embedded_graphics::{
image::{Image, ImageRaw, ImageRawLE},
mono_font::{ascii::FONT_8X13_BOLD, MonoTextStyleBuilder},
pixelcolor::Rgb565,
prelude::*,
primitives::{PrimitiveStyleBuilder, Rectangle},
text::Text,
};
use tiny_skia_display::*;
use orbclient::*;
pub fn main() {
let width = 160;
let height = 128;
let (screen_width, screen_height) = orbclient::get_display_size().unwrap();
let mut display = TinySkiaDisplay::new(width, height).unwrap();
let style = PrimitiveStyleBuilder::new()
.fill_color(Rgb565::BLACK)
.build();
let black_backdrop = Rectangle::new(Point::new(0, 0), Size::new(160, 128)).into_styled(style);
black_backdrop.draw(&mut display).unwrap();
let image_raw: ImageRawLE<Rgb565> = ImageRaw::new(include_bytes!("../assets/ferris.raw"), 86);
let image = Image::new(&image_raw, Point::new(34, 8));
image.draw(&mut display).unwrap();
let text_style = MonoTextStyleBuilder::new()
.font(&FONT_8X13_BOLD)
.text_color(Rgb565::WHITE)
.build();
Text::new("Hello World!", Point::new(10, 95), text_style)
.draw(&mut display)
.unwrap();
let mut window = Window::new(
((screen_width - width) / 2) as i32,
((screen_height - height) / 2) as i32,
width,
height,
"minimal",
)
.unwrap();
let len = window.data().len() * std::mem::size_of::<Color>();
let color_data =
unsafe { std::slice::from_raw_parts_mut(window.data_mut().as_mut_ptr() as *mut u8, len) };
display.flip(color_data);
window.sync();
'events: loop {
for event in window.events() {
match event.to_option() {
EventOption::Quit(_quit_event) => break 'events,
EventOption::Mouse(evt) => println!(
"At position {:?} pixel color is : {:?}",
(evt.x, evt.y),
window.getpixel(evt.x, evt.y)
),
event_option => println!("{:?}", event_option),
}
}
}
}