geng_window/
cursor.rs

1use super::*;
2
3#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
4pub enum CursorType {
5    Default,
6    Pointer,
7    Drag,
8    None,
9}
10
11impl Window {
12    pub fn set_cursor_type(&self, cursor_type: CursorType) {
13        self.inner.cursor_type.set(cursor_type);
14        if self.cursor_locked() {
15            return;
16        }
17        self.inner.backend.set_cursor_type(cursor_type);
18    }
19
20    pub fn cursor_position(&self) -> Option<vec2<f64>> {
21        if self.cursor_locked() {
22            return None;
23        }
24        self.inner.cursor_pos.get()
25    }
26
27    pub fn cursor_locked(&self) -> bool {
28        self.inner.backend.cursor_locked()
29    }
30
31    pub fn lock_cursor(&self) {
32        self.inner.backend.lock_cursor();
33        self.inner.backend.set_cursor_type(CursorType::None);
34    }
35
36    pub fn unlock_cursor(&self) {
37        self.inner.backend.unlock_cursor();
38        self.inner
39            .backend
40            .set_cursor_type(self.inner.cursor_type.get());
41    }
42}