use embedded_canvas::Canvas;
use embedded_graphics::{
pixelcolor::Rgb555,
prelude::*,
primitives::{Circle, PrimitiveStyle, Rectangle},
};
use embedded_graphics_simulator::{OutputSettingsBuilder, SimulatorDisplay, Window};
pub const DISPLAY_240P: Size = Size::new(320, 240);
pub const DISPLAY_360P: Size = Size::new(480, 360);
pub const DISPLAY_720P: Size = Size::new(1280, 720);
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut display = SimulatorDisplay::<Rgb555>::new(DISPLAY_360P);
{
let canvas_size = Size {
width: 200,
height: 200,
};
let mut canvas = {
let mut canvas = Canvas::<Rgb555>::new(canvas_size);
let canvas_rectangle = Rectangle::new(Point::zero(), canvas_size);
let canvas_outline =
canvas_rectangle.into_styled(PrimitiveStyle::with_stroke(Rgb555::YELLOW, 1));
canvas_outline.draw(&mut canvas)?;
canvas
};
canvas.place_at(Point::zero()).draw(&mut display)?;
let drawing_size = Size {
width: 100,
height: 100,
};
let rectangle = Rectangle::with_center(canvas.center(), drawing_size)
.into_styled(PrimitiveStyle::with_stroke(Rgb555::WHITE, 1));
rectangle.draw(&mut canvas)?;
let circle = Circle::with_center(canvas.center(), 98)
.into_styled(PrimitiveStyle::with_stroke(Rgb555::RED, 1));
circle.draw(&mut canvas)?;
let crop_area = Rectangle::with_center(canvas.center(), drawing_size);
let cropped_canvas = canvas
.crop(&crop_area)
.expect("Should crop")
.place_at(Point {
x: canvas.bounding_box().size.width as i32 + 80,
y: 0,
});
cropped_canvas.draw(&mut display)?;
let crop_rectangle =
Rectangle::with_center(cropped_canvas.center(), drawing_size - Size::new(2, 2));
cropped_canvas
.crop(&crop_rectangle)
.expect("Should crop")
.translate(Point::new(0, 100))
.draw(&mut display)?;
}
let output_settings = OutputSettingsBuilder::new().build();
Window::new(
"Canvas with outline (left) & 2 CanvasAt (right)",
&output_settings,
)
.show_static(&display);
Ok(())
}