1use graphics_rs::{
2 color,
3 graphics::Graphics,
4 shapes::{circle::Circle, line::Line, rect::Rect, triangle::Triangle},
5 simple_canvas::SimpleCanvas,
6 traits::{canvas::Canvas, canvas_handler::CanvasHandler},
7};
8
9struct ShapesHandler;
10
11impl<'a> CanvasHandler for ShapesHandler {
12 fn update<T: Canvas>(&mut self, canvas: &mut T) {
13 canvas.change_color(color::BLACK);
14 canvas.fill();
15
16 canvas.change_color(color::BLUE);
17 canvas.draw_shape(&mut Line::new(400, 0, 400, 800));
18 canvas.draw_shape(&mut Line::new(0, 0, canvas.width(), canvas.height()));
19 canvas.draw_shape(&mut Line::new(0, 400, 800, 400));
20 canvas.draw_shape(&mut Line::new(0, canvas.height(), canvas.width(), 0));
21
22 canvas.change_color(color::RED);
23 canvas.draw_shape(&mut Rect::new(300, 200, 200, 100));
24 canvas.draw_shape(&mut Rect::new(200, 300, 100, 200));
25 canvas.draw_shape(&mut Rect::new(300, 500, 200, 100));
26 canvas.draw_shape(&mut Rect::new(500, 300, 100, 200));
27
28 canvas.change_color(color::GREEN);
29 canvas.draw_shape(&mut Circle::new(200, 200, 50));
30 canvas.draw_shape(&mut Circle::new(200, 600, 50));
31 canvas.draw_shape(&mut Circle::new(600, 200, 50));
32 canvas.draw_shape(&mut Circle::new(600, 600, 50));
33
34 canvas.change_color(color::WHITE);
35 canvas.draw_shape(&mut Triangle::new(100, 0, 100, 100, 0, 100));
36 canvas.draw_shape(&mut Triangle::new(700, 0, 800, 100, 700, 100));
37 canvas.draw_shape(&mut Triangle::new(100, 700, 100, 800, 0, 700));
38 canvas.draw_shape(&mut Triangle::new(700, 700, 800, 700, 700, 800));
39
40 return;
41 }
42}
43
44const WIDTH: usize = 800;
45const HEIGHT: usize = 800;
46
47fn main() -> Result<(), String> {
48 let antialiasing = false;
49 let antialiasing_resolution = 1;
50 let fill_color = Some(color::BLACK);
51
52 let mut canvas = SimpleCanvas::new(
53 WIDTH as usize,
54 HEIGHT as usize,
55 fill_color,
56 antialiasing,
57 antialiasing_resolution,
58 );
59
60 let mut graphics = Graphics::create(&mut canvas)?;
61 graphics.run(&mut ShapesHandler {})?;
62
63 Ok(())
64}