mirror of
https://github.com/rust-windowing/winit.git
synced 2026-06-28 07:33:14 -04:00
Add MouseButton::{Back, Forward} to MouseInput
Add named variants for physical back and forward keys which could be found on some mice. The macOS bits may not work on all the hardware given that apple doesn't directly support such a thing. Co-authored-by: daxpedda <daxpedda@gmail.com>
This commit is contained in:
@@ -10,11 +10,14 @@ use wasm_bindgen::{JsCast, JsValue};
|
||||
use web_sys::{HtmlCanvasElement, KeyboardEvent, MouseEvent, PointerEvent, WheelEvent};
|
||||
|
||||
bitflags! {
|
||||
// https://www.w3.org/TR/pointerevents3/#the-buttons-property
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct ButtonsState: u16 {
|
||||
const LEFT = 0b001;
|
||||
const RIGHT = 0b010;
|
||||
const MIDDLE = 0b100;
|
||||
const LEFT = 0b00001;
|
||||
const RIGHT = 0b00010;
|
||||
const MIDDLE = 0b00100;
|
||||
const BACK = 0b01000;
|
||||
const FORWARD = 0b10000;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +27,8 @@ impl From<ButtonsState> for MouseButton {
|
||||
ButtonsState::LEFT => MouseButton::Left,
|
||||
ButtonsState::RIGHT => MouseButton::Right,
|
||||
ButtonsState::MIDDLE => MouseButton::Middle,
|
||||
ButtonsState::BACK => MouseButton::Back,
|
||||
ButtonsState::FORWARD => MouseButton::Forward,
|
||||
_ => MouseButton::Other(value.bits()),
|
||||
}
|
||||
}
|
||||
@@ -35,6 +40,8 @@ impl From<MouseButton> for ButtonsState {
|
||||
MouseButton::Left => ButtonsState::LEFT,
|
||||
MouseButton::Right => ButtonsState::RIGHT,
|
||||
MouseButton::Middle => ButtonsState::MIDDLE,
|
||||
MouseButton::Back => ButtonsState::BACK,
|
||||
MouseButton::Forward => ButtonsState::FORWARD,
|
||||
MouseButton::Other(value) => ButtonsState::from_bits_retain(value),
|
||||
}
|
||||
}
|
||||
@@ -45,11 +52,14 @@ pub fn mouse_buttons(event: &MouseEvent) -> ButtonsState {
|
||||
}
|
||||
|
||||
pub fn mouse_button(event: &MouseEvent) -> Option<MouseButton> {
|
||||
// https://www.w3.org/TR/pointerevents3/#the-button-property
|
||||
match event.button() {
|
||||
-1 => None,
|
||||
0 => Some(MouseButton::Left),
|
||||
1 => Some(MouseButton::Middle),
|
||||
2 => Some(MouseButton::Right),
|
||||
3 => Some(MouseButton::Back),
|
||||
4 => Some(MouseButton::Forward),
|
||||
i => Some(MouseButton::Other(
|
||||
i.try_into()
|
||||
.expect("unexpected negative mouse button value"),
|
||||
@@ -63,6 +73,8 @@ impl MouseButton {
|
||||
MouseButton::Left => 0,
|
||||
MouseButton::Right => 1,
|
||||
MouseButton::Middle => 2,
|
||||
MouseButton::Back => 3,
|
||||
MouseButton::Forward => 4,
|
||||
MouseButton::Other(value) => value.into(),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user