quicksilver 0.3.5

A simple game framework for 2D games in pure Rust
extern crate quicksilver;

use quicksilver::{
    Result,
    geom::{Shape, Rectangle, Vector},
    graphics::{Background::Col, Color},
    input::MouseCursor,
    lifecycle::{Event, Settings, State, Window, run}
};

struct RectangleState {
    grab_rect: Rectangle,
    crosshair_rect: Rectangle,
}

impl State for RectangleState {
    fn new() -> Result<Self> {
        Ok(RectangleState {
            grab_rect: Rectangle::new((0, 0), (200, 100)).with_center((400, 100)),
            crosshair_rect: Rectangle::new((0, 0), (200, 100)).with_center((400, 400)),
        })
    }

    fn event(&mut self, event: &Event, window: &mut Window) -> Result<()> {
        match event {
            Event::MouseMoved(vector) => {
                if vector.overlaps_rectangle(&self.crosshair_rect) {
                    window.set_cursor(MouseCursor::Crosshair);
                } else if vector.overlaps_rectangle(&self.grab_rect) {
                    window.set_cursor(MouseCursor::Grab);
                } else {
                    window.set_cursor(MouseCursor::Default);
                }
            }
            _ => {}
        };

        Ok(())
    }

    fn draw(&mut self, window: &mut Window) -> Result<()> {
        window.clear(Color::BLACK)?;

        window.draw(&self.grab_rect, Col(Color::RED));
        window.draw(&self.crosshair_rect, Col(Color::GREEN));

        Ok(())
    }
}

fn main() {
    run::<RectangleState>("set-cursor", Vector::new(800, 600), Settings::default());
}