gust-render 0.2.0

Gust is a simple 2D graphical library inspired by SFML.
Documentation
extern crate gust_render as gust;

use gust::prelude::*;
use gust::texture::RgbMode;
use std::rc::Rc;

fn main() {
    let mut window = Window::new(gust::WIDTH, gust::HEIGHT, "Hello");
    let mut pixels: Vec<u8> = vec![125; 200 * 200 * 4];
    let pix: Vec<u8> = vec![255; 100 * 100 * 3];
    let mut my_tex = Texture::from_path("examples/texture/New.png").unwrap();
    let blank;

    unsafe {
        use std::os::raw::c_void;
        blank = Texture::from_data(pixels.as_mut_ptr() as *mut c_void, RgbMode::RGBA, 200, 200);
    }

    my_tex
        .update_block(
            pix.as_slice(),
            Vector::new(100, 100),
            Vector::new(10, 10),
            None,
        )
        .unwrap();

    let blank_rc = Rc::new(blank);
    let tex_dirt = Rc::new(my_tex);
    let event_handler = EventHandler::new(&window);
    let mut sprite = Sprite::from(&tex_dirt);
    let mut leave = Sprite::from(&blank_rc);
    let mut sprite2 = Sprite::from(&tex_dirt);

    leave.set_position(Point::new(600.0, 100.0));
    sprite.set_position(Vector::new(100.0, 100.0));
    sprite2.set_position(Point::new(1000.0, 100.0));
    sprite.update();
    sprite2.update();
    leave.update();

    window.poll(None);
    window.enable_cursor();
    window.set_clear_color(Color::new(0.0, 0.0, 1.0));
    while window.is_open() {
        window.poll_events();

        for event in event_handler.fetch() {
            event_process(event, &mut window, &tex_dirt, &mut sprite);
        }

        window.clear();
        window.draw(&sprite);
        window.draw(&leave);
        window.draw(&sprite2);
        window.display();
    }
}

fn event_process(event: Event, window: &mut Window, texture: &Texture, sprite: &mut Sprite) {
    match event.1 {
        Events::Key(Key::Escape, _, _, _) => {
            window.close();
        }
        Events::MouseButton(_, _, _) => {
            println!("Dumping texture to test.png");
            texture.to_file("test.png").unwrap();
        }
        Events::CursorPos(x, y) => {
            sprite.set_position(Vector::new(x as f32, y as f32));
        }
        _ => {}
    }
}