Skip to main content

cbf_chrome/data/
mouse.rs

1//! Chrome-specific mouse event types and button identifiers, with conversions to/from `cbf` equivalents.
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum ChromeMouseEventType {
5    Down,
6    Up,
7    Move,
8    Enter,
9    Leave,
10}
11
12impl From<ChromeMouseEventType> for cbf::data::mouse::MouseEventType {
13    fn from(value: ChromeMouseEventType) -> Self {
14        match value {
15            ChromeMouseEventType::Down => Self::Down,
16            ChromeMouseEventType::Up => Self::Up,
17            ChromeMouseEventType::Move => Self::Move,
18            ChromeMouseEventType::Enter => Self::Enter,
19            ChromeMouseEventType::Leave => Self::Leave,
20        }
21    }
22}
23
24impl From<cbf::data::mouse::MouseEventType> for ChromeMouseEventType {
25    fn from(value: cbf::data::mouse::MouseEventType) -> Self {
26        match value {
27            cbf::data::mouse::MouseEventType::Down => Self::Down,
28            cbf::data::mouse::MouseEventType::Up => Self::Up,
29            cbf::data::mouse::MouseEventType::Move => Self::Move,
30            cbf::data::mouse::MouseEventType::Enter => Self::Enter,
31            cbf::data::mouse::MouseEventType::Leave => Self::Leave,
32        }
33    }
34}
35
36#[derive(Debug, Clone, Copy, PartialEq, Eq)]
37pub enum ChromeMouseButton {
38    None,
39    Left,
40    Middle,
41    Right,
42    Back,
43    Forward,
44}
45
46impl From<ChromeMouseButton> for cbf::data::mouse::MouseButton {
47    fn from(value: ChromeMouseButton) -> Self {
48        match value {
49            ChromeMouseButton::None => Self::None,
50            ChromeMouseButton::Left => Self::Left,
51            ChromeMouseButton::Middle => Self::Middle,
52            ChromeMouseButton::Right => Self::Right,
53            ChromeMouseButton::Back => Self::Back,
54            ChromeMouseButton::Forward => Self::Forward,
55        }
56    }
57}
58
59impl From<cbf::data::mouse::MouseButton> for ChromeMouseButton {
60    fn from(value: cbf::data::mouse::MouseButton) -> Self {
61        match value {
62            cbf::data::mouse::MouseButton::None => Self::None,
63            cbf::data::mouse::MouseButton::Left => Self::Left,
64            cbf::data::mouse::MouseButton::Middle => Self::Middle,
65            cbf::data::mouse::MouseButton::Right => Self::Right,
66            cbf::data::mouse::MouseButton::Back => Self::Back,
67            cbf::data::mouse::MouseButton::Forward => Self::Forward,
68        }
69    }
70}
71
72#[derive(Debug, Clone, Copy, PartialEq, Eq)]
73pub enum ChromePointerType {
74    Unknown,
75    Mouse,
76    Pen,
77    Touch,
78    Eraser,
79}
80
81impl From<ChromePointerType> for cbf::data::mouse::PointerType {
82    fn from(value: ChromePointerType) -> Self {
83        match value {
84            ChromePointerType::Unknown => Self::Unknown,
85            ChromePointerType::Mouse => Self::Mouse,
86            ChromePointerType::Pen => Self::Pen,
87            ChromePointerType::Touch => Self::Touch,
88            ChromePointerType::Eraser => Self::Eraser,
89        }
90    }
91}
92
93impl From<cbf::data::mouse::PointerType> for ChromePointerType {
94    fn from(value: cbf::data::mouse::PointerType) -> Self {
95        match value {
96            cbf::data::mouse::PointerType::Unknown => Self::Unknown,
97            cbf::data::mouse::PointerType::Mouse => Self::Mouse,
98            cbf::data::mouse::PointerType::Pen => Self::Pen,
99            cbf::data::mouse::PointerType::Touch => Self::Touch,
100            cbf::data::mouse::PointerType::Eraser => Self::Eraser,
101        }
102    }
103}
104
105#[derive(Debug, Clone, PartialEq)]
106pub struct ChromeMouseEvent {
107    pub type_: ChromeMouseEventType,
108    pub modifiers: u32,
109    pub button: ChromeMouseButton,
110    pub click_count: i32,
111    pub position_in_widget_x: f32,
112    pub position_in_widget_y: f32,
113    pub position_in_screen_x: f32,
114    pub position_in_screen_y: f32,
115    pub movement_x: f32,
116    pub movement_y: f32,
117    pub is_raw_movement_event: bool,
118    pub pointer_type: ChromePointerType,
119}
120
121impl From<ChromeMouseEvent> for cbf::data::mouse::MouseEvent {
122    fn from(value: ChromeMouseEvent) -> Self {
123        Self {
124            type_: value.type_.into(),
125            modifiers: value.modifiers,
126            button: value.button.into(),
127            click_count: value.click_count,
128            position_in_widget_x: value.position_in_widget_x,
129            position_in_widget_y: value.position_in_widget_y,
130            position_in_screen_x: value.position_in_screen_x,
131            position_in_screen_y: value.position_in_screen_y,
132            movement_x: value.movement_x,
133            movement_y: value.movement_y,
134            is_raw_movement_event: value.is_raw_movement_event,
135            pointer_type: value.pointer_type.into(),
136        }
137    }
138}
139
140impl From<cbf::data::mouse::MouseEvent> for ChromeMouseEvent {
141    fn from(value: cbf::data::mouse::MouseEvent) -> Self {
142        Self {
143            type_: value.type_.into(),
144            modifiers: value.modifiers,
145            button: value.button.into(),
146            click_count: value.click_count,
147            position_in_widget_x: value.position_in_widget_x,
148            position_in_widget_y: value.position_in_widget_y,
149            position_in_screen_x: value.position_in_screen_x,
150            position_in_screen_y: value.position_in_screen_y,
151            movement_x: value.movement_x,
152            movement_y: value.movement_y,
153            is_raw_movement_event: value.is_raw_movement_event,
154            pointer_type: value.pointer_type.into(),
155        }
156    }
157}