piston-button_controller 0.2.0

A Piston library for handling button state and events
Documentation
extern crate piston_window;
extern crate button_controller;

use piston_window::*;
use button_controller::{ButtonController, ButtonEvent, ButtonState};

fn main() {
    let mut window: PistonWindow = WindowSettings::new("button", [300; 2])
        .exit_on_esc(true)
        .build()
        .unwrap();

    let mut click_me = ButtonController::new();
    let click_me_layout = [10.0, 60.0, 280.0, 180.0];
    while let Some(e) = window.next() {
        click_me.event(click_me_layout, math::identity(), &e);
        for e in &click_me.events {
            println!("{}", match *e {
                ButtonEvent::Click => "Click",
                ButtonEvent::MouseEnter => "MouseEnter",
                ButtonEvent::MouseLeave => "MouseLeave",
                ButtonEvent::Press => "Press",
                ButtonEvent::Cancel => "Cancel",
            })
        }

        window.draw_2d(&e, |c, g| {
            clear([1.0; 4], g);
            let color = match click_me.state(0.2) {
                ButtonState::Inactive => [0.6, 0.6, 0.6, 1.0],
                ButtonState::Hover => [0.4, 0.4, 0.4, 1.0],
                ButtonState::Press => [0.1, 0.1, 0.1, 1.0],
                ButtonState::Cancel => [0.3, 0.2, 0.2, 1.0],
            };
            rectangle(color, click_me_layout, c.transform, g);
        });
    }
}