1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
extern crate sdl2;

pub type MouseButton = sdl2::mouse::MouseButton;

pub fn position() -> (i32, i32) {
    let mut x: i32 = 0;
    let mut y: i32 = 0;
    unsafe {
        sdl2::sys::SDL_GetMouseState(&mut x, &mut y);
    }
    (x, y)
}

pub fn set_position(x: i32, y: i32) {
    unsafe {
        sdl2::sys::SDL_WarpMouseGlobal(x, y);
    }
}

pub fn relative_position() -> (i32, i32) {
    let mut x: i32 = 0;
    let mut y: i32 = 0;
    unsafe {
        sdl2::sys::SDL_GetRelativeMouseState(&mut x, &mut y);
    }
    (x, y)
}

pub fn is_down(button: MouseButton) -> bool {
    let btn = button as u32;
    let state = unsafe { sdl2::sys::SDL_GetMouseState(std::ptr::null_mut(), std::ptr::null_mut()) };
    (state & btn) != 0
}

pub fn is_up(button: MouseButton) -> bool {
    let btn = button as u32;
    let state = unsafe { sdl2::sys::SDL_GetMouseState(std::ptr::null_mut(), std::ptr::null_mut()) };
    (state & btn) == 0
}