simple_render/
simple_render.rs

1use ggez::{
2    conf::WindowMode,
3    event::{self, EventHandler, MouseButton},
4    glam::*,
5    graphics::{Canvas, Color},
6    Context, ContextBuilder, GameResult,
7};
8
9use pixel_handler::{
10    pixel_handler::PixelHandler,
11    structs::{grid_position::GridPosition, pixel::Pixel},
12};
13
14const CELL_SIZE: (f32, f32) = (15.0, 15.0);
15
16struct MainState {
17    pixel_handler: PixelHandler,
18}
19
20impl MainState {
21    pub fn new(_ctx: &mut Context) -> MainState {
22        let pixel_handler = PixelHandler::new(CELL_SIZE);
23        MainState { pixel_handler }
24    }
25}
26
27impl EventHandler for MainState {
28    fn update(&mut self, _ctx: &mut Context) -> GameResult {
29        Ok(())
30    }
31
32    fn draw(&mut self, ctx: &mut Context) -> GameResult {
33        let mut canvas = Canvas::from_frame(ctx, Color::WHITE);
34        let pixel_handler = &mut self.pixel_handler;
35
36        pixel_handler.draw_grid(ctx, Color::BLACK);
37        pixel_handler.display_fps(ctx);
38
39        pixel_handler.update(&mut canvas, ctx);
40        canvas.finish(ctx)
41    }
42
43    fn mouse_button_down_event(
44        &mut self,
45        _ctx: &mut Context,
46        _button: MouseButton,
47        x: f32,
48        y: f32,
49    ) -> GameResult {
50        let position = GridPosition::from_vec2(Vec2::new(x, y), CELL_SIZE);
51
52        println!("Adding pixel at {:?}", position);
53
54        let pixel = Pixel::new(position, Color::new(0.0, 0.0, 0.0, 1.0));
55        self.pixel_handler.pixels.insert(position, pixel);
56
57        Ok(())
58    }
59}
60
61fn main() {
62    let (mut ctx, event_loop) = ContextBuilder::new("Simple Render", "")
63        .window_setup(ggez::conf::WindowSetup::default().title("Pixel Handler"))
64        .build()
65        .expect("Could not create ggez context");
66
67    let state = MainState::new(&mut ctx);
68
69    ctx.gfx
70        .set_mode(WindowMode {
71            resizable: true,
72            min_height: 280.0,
73            min_width: 350.0,
74
75            ..Default::default()
76        })
77        .unwrap();
78
79    event::run(ctx, event_loop, state);
80}