pixel-handler 0.1.62

Wrapper for the ggez game engine crate
Documentation
use ggez::{
    conf::WindowMode,
    event::{self, EventHandler, MouseButton},
    glam::*,
    graphics::{Canvas, Color},
    Context, ContextBuilder, GameResult,
};

use pixel_handler::{
    pixel_handler::PixelHandler,
    structs::{grid_position::GridPosition, pixel::Pixel},
};

const CELL_SIZE: (f32, f32) = (15.0, 15.0);

struct MainState {
    pixel_handler: PixelHandler,
}

impl MainState {
    pub fn new(_ctx: &mut Context) -> MainState {
        let pixel_handler = PixelHandler::new(CELL_SIZE);
        MainState { pixel_handler }
    }
}

impl EventHandler for MainState {
    fn update(&mut self, _ctx: &mut Context) -> GameResult {
        Ok(())
    }

    fn draw(&mut self, ctx: &mut Context) -> GameResult {
        let mut canvas = Canvas::from_frame(ctx, Color::WHITE);
        let pixel_handler = &mut self.pixel_handler;

        pixel_handler.draw_grid(ctx, Color::BLACK);
        pixel_handler.display_fps(ctx);

        pixel_handler.update(&mut canvas, ctx);
        canvas.finish(ctx)
    }

    fn mouse_button_down_event(
        &mut self,
        _ctx: &mut Context,
        _button: MouseButton,
        x: f32,
        y: f32,
    ) -> GameResult {
        let position = GridPosition::from_vec2(Vec2::new(x, y), CELL_SIZE);

        println!("Adding pixel at {:?}", position);

        let pixel = Pixel::new(position, Color::new(0.0, 0.0, 0.0, 1.0));
        self.pixel_handler.pixels.insert(position, pixel);

        Ok(())
    }
}

fn main() {
    let (mut ctx, event_loop) = ContextBuilder::new("Simple Render", "")
        .window_setup(ggez::conf::WindowSetup::default().title("Pixel Handler"))
        .build()
        .expect("Could not create ggez context");

    let state = MainState::new(&mut ctx);

    ctx.gfx
        .set_mode(WindowMode {
            resizable: true,
            min_height: 280.0,
            min_width: 350.0,

            ..Default::default()
        })
        .unwrap();

    event::run(ctx, event_loop, state);
}