extern crate piston; extern crate opengl_graphics; extern crate graphics; extern crate sdl2_window; extern crate button_controller; use piston::*; use graphics::*; use opengl_graphics::*; use sdl2_window::Sdl2Window; use button_controller::{ButtonController, ButtonEvent, ButtonState}; fn main() { let opengl = OpenGL::V3_2; let mut window: Sdl2Window = WindowSettings::new("touch button", [300; 2]) .exit_on_esc(true) .graphics_api(opengl) .build() .unwrap(); let mut events = Events::new(EventSettings::new()); let mut gl = GlGraphics::new(opengl); let mut click_me = ButtonController::new(); let click_me_layout = [10.0, 60.0, 280.0, 180.0]; while let Some(e) = events.next(&mut window) { click_me.touch_event(click_me_layout, math::identity(), window.size(), &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", }) } if let Some(args) = e.render_args() { gl.draw(args.viewport(), |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); }); } } }