tiny_skia_display 0.1.0

Implementation of embedded-graphics https://github.com/jamwaffles/embedded-graphics DrawTarget based on tiny-skia https://github.com/RazrFalcon/tiny-skia.
Documentation
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();

    // draw ferris
    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),
            }
        }
    }
}