relative_mouse_state/
relative-mouse-state.rs

1extern crate sdl2;
2
3use sdl2::event::Event;
4use sdl2::mouse::MouseButton;
5use sdl2::keyboard::Keycode;
6use std::time::Duration;
7
8pub 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}