1use crate::PointerButton;
2
3#[derive(Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
18#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19#[repr(u8)]
20pub enum MouseButton {
21 Left = 0,
23 Right = 1,
25 Middle = 2,
27 Back = 3,
29 Forward = 4,
31 Button6 = 5,
33 Button7 = 6,
35 Button8 = 7,
37 Button9 = 8,
39 Button10 = 9,
41 Button11 = 10,
43 Button12 = 11,
45 Button13 = 12,
47 Button14 = 13,
49 Button15 = 14,
51 Button16 = 15,
53 Button17 = 16,
54 Button18 = 17,
55 Button19 = 18,
56 Button20 = 19,
57 Button21 = 20,
58 Button22 = 21,
59 Button23 = 22,
60 Button24 = 23,
61 Button25 = 24,
62 Button26 = 25,
63 Button27 = 26,
64 Button28 = 27,
65 Button29 = 28,
66 Button30 = 29,
67 Button31 = 30,
68 Button32 = 31,
69}
70
71impl From<MouseButton> for PointerButton {
72 fn from(button: MouseButton) -> Self {
73 match button {
74 MouseButton::Left => PointerButton::Primary,
75 MouseButton::Right => PointerButton::Secondary,
76 MouseButton::Middle => PointerButton::Tertiary,
77 MouseButton::Back => PointerButton::Back,
78 MouseButton::Forward => PointerButton::Forward,
79 MouseButton::Button6 => PointerButton::Eraser,
80 MouseButton::Button7 => PointerButton::Other(7),
81 MouseButton::Button8 => PointerButton::Other(8),
82 MouseButton::Button9 => PointerButton::Other(9),
83 MouseButton::Button10 => PointerButton::Other(10),
84 MouseButton::Button11 => PointerButton::Other(11),
85 MouseButton::Button12 => PointerButton::Other(12),
86 MouseButton::Button13 => PointerButton::Other(13),
87 MouseButton::Button14 => PointerButton::Other(14),
88 MouseButton::Button15 => PointerButton::Other(15),
89 MouseButton::Button16 => PointerButton::Other(16),
90 MouseButton::Button17 => PointerButton::Other(17),
91 MouseButton::Button18 => PointerButton::Other(18),
92 MouseButton::Button19 => PointerButton::Other(19),
93 MouseButton::Button20 => PointerButton::Other(20),
94 MouseButton::Button21 => PointerButton::Other(21),
95 MouseButton::Button22 => PointerButton::Other(22),
96 MouseButton::Button23 => PointerButton::Other(23),
97 MouseButton::Button24 => PointerButton::Other(24),
98 MouseButton::Button25 => PointerButton::Other(25),
99 MouseButton::Button26 => PointerButton::Other(26),
100 MouseButton::Button27 => PointerButton::Other(27),
101 MouseButton::Button28 => PointerButton::Other(28),
102 MouseButton::Button29 => PointerButton::Other(29),
103 MouseButton::Button30 => PointerButton::Other(30),
104 MouseButton::Button31 => PointerButton::Other(31),
105 MouseButton::Button32 => PointerButton::Other(32),
106 }
107 }
108}
109
110impl From<PointerButton> for MouseButton {
111 fn from(button: PointerButton) -> Self {
112 match button {
113 PointerButton::Primary => MouseButton::Left,
114 PointerButton::Secondary => MouseButton::Right,
115 PointerButton::Tertiary => MouseButton::Middle,
116 PointerButton::Back => MouseButton::Back,
117 PointerButton::Forward => MouseButton::Forward,
118 PointerButton::Eraser => MouseButton::Button6,
119 PointerButton::Other(n) => match n {
120 7 => MouseButton::Button7,
121 8 => MouseButton::Button8,
122 9 => MouseButton::Button9,
123 10 => MouseButton::Button10,
124 11 => MouseButton::Button11,
125 12 => MouseButton::Button12,
126 13 => MouseButton::Button13,
127 14 => MouseButton::Button14,
128 15 => MouseButton::Button15,
129 16 => MouseButton::Button16,
130 17 => MouseButton::Button17,
131 18 => MouseButton::Button18,
132 19 => MouseButton::Button19,
133 20 => MouseButton::Button20,
134 21 => MouseButton::Button21,
135 22 => MouseButton::Button22,
136 23 => MouseButton::Button23,
137 24 => MouseButton::Button24,
138 25 => MouseButton::Button25,
139 26 => MouseButton::Button26,
140 27 => MouseButton::Button27,
141 28 => MouseButton::Button28,
142 29 => MouseButton::Button29,
143 30 => MouseButton::Button30,
144 31 => MouseButton::Button31,
145 _ => unimplemented!("no mouse button for pointer button `{button:?}`"),
146 },
147 }
148 }
149}