1 extern crate sdl2;
2 
3 use sdl2::event::Event;
4 use sdl2::keyboard::Keycode;
5 use std::collections::HashSet;
6 use std::time::Duration;
7 
main() -> Result<(), String>8 pub fn main() -> Result<(), String> {
9     let sdl_context = sdl2::init()?;
10     let video_subsystem = sdl_context.video()?;
11 
12     let _window = video_subsystem.window("Mouse", 800, 600)
13         .position_centered()
14         .build()
15         .map_err(|e| e.to_string())?;
16 
17     let mut events = sdl_context.event_pump()?;
18 
19     let mut prev_buttons = HashSet::new();
20 
21     'running: loop {
22         for event in events.poll_iter() {
23             match event {
24                 Event::KeyDown { keycode: Some(Keycode::Escape), .. } |
25                 Event::Quit { .. } => break 'running,
26                 _ => {}
27             }
28         }
29 
30         // get a mouse state
31         let state = events.mouse_state();
32 
33         // Create a set of pressed Keys.
34         let buttons = state.pressed_mouse_buttons().collect();
35 
36         // Get the difference between the new and old sets.
37         let new_buttons = &buttons - &prev_buttons;
38         let old_buttons = &prev_buttons - &buttons;
39 
40         if !new_buttons.is_empty() || !old_buttons.is_empty() {
41             println!("X = {:?}, Y = {:?} : {:?} -> {:?}", state.x(), state.y(),  new_buttons, old_buttons);
42         }
43 
44         prev_buttons = buttons;
45 
46         std::thread::sleep(Duration::from_millis(100));
47     }
48 
49     Ok(())
50 }
51