cafe/
mouse.rs

1extern crate sdl2;
2
3pub type MouseButton = sdl2::mouse::MouseButton;
4
5pub fn position() -> (i32, i32) {
6    let mut x: i32 = 0;
7    let mut y: i32 = 0;
8    unsafe {
9        sdl2::sys::SDL_GetMouseState(&mut x, &mut y);
10    }
11    (x, y)
12}
13
14pub fn set_position(x: i32, y: i32) {
15    unsafe {
16        sdl2::sys::SDL_WarpMouseGlobal(x, y);
17    }
18}
19
20pub fn relative_position() -> (i32, i32) {
21    let mut x: i32 = 0;
22    let mut y: i32 = 0;
23    unsafe {
24        sdl2::sys::SDL_GetRelativeMouseState(&mut x, &mut y);
25    }
26    (x, y)
27}
28
29pub fn is_down(button: MouseButton) -> bool {
30    let btn = button as u32;
31    let state = unsafe { sdl2::sys::SDL_GetMouseState(std::ptr::null_mut(), std::ptr::null_mut()) };
32    (state & btn) != 0
33}
34
35pub fn is_up(button: MouseButton) -> bool {
36    let btn = button as u32;
37    let state = unsafe { sdl2::sys::SDL_GetMouseState(std::ptr::null_mut(), std::ptr::null_mut()) };
38    (state & btn) == 0
39}