1 extern crate sdl2;
2 
3 use sdl2::event::Event;
4 use sdl2::mouse::MouseButton;
5 use sdl2::keyboard::Keycode;
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     let mut state;
19 
20     'running: loop {
21         for event in events.poll_iter() {
22             match event {
23                 Event::KeyDown { keycode: Some(Keycode::Escape), .. } |
24                 Event::Quit { .. } => break 'running,
25                 _ => {}
26             }
27         }
28 
29         // get a mouse state using mouse_state() so as not to call
30         // relative_mouse_state() twice and get a false position reading
31         if events.mouse_state().is_mouse_button_pressed(MouseButton::Left) {
32             state = events.relative_mouse_state();
33             println!("Relative - X = {:?}, Y = {:?}", state.x(), state.y());
34         }
35 
36         std::thread::sleep(Duration::from_millis(100));
37     }
38 
39     Ok(())
40 }
41