sdl2 0.34.1

SDL2 bindings for Rust
Documentation
extern crate sdl2;

use sdl2::event::Event;
use sdl2::mouse::MouseButton;
use sdl2::keyboard::Keycode;
use std::time::Duration;

pub fn main() -> Result<(), String> {
    let sdl_context = sdl2::init()?;
    let video_subsystem = sdl_context.video()?;

    let _window = video_subsystem.window("Mouse", 800, 600)
        .position_centered()
        .build()
        .map_err(|e| e.to_string())?;

    let mut events = sdl_context.event_pump()?;
    let mut state;

    'running: loop {
        for event in events.poll_iter() {
            match event {
                Event::KeyDown { keycode: Some(Keycode::Escape), .. } |
                Event::Quit { .. } => break 'running,
                _ => {}
            }
        }

        // get a mouse state using mouse_state() so as not to call
        // relative_mouse_state() twice and get a false position reading
        if events.mouse_state().is_mouse_button_pressed(MouseButton::Left) {
            state = events.relative_mouse_state();
            println!("Relative - X = {:?}, Y = {:?}", state.x(), state.y());
        }

        std::thread::sleep(Duration::from_millis(100));
    }

    Ok(())
}