Mouse events (#344)
* Explicit mouse-related DeviceEvents This makes the API more intuitive for common use-cases and allows us to better propagate platform knowledge of motion semantics. * Improve event naming consistency * Clarify axis event forwards-compatibility * Rename WindowEvent::MouseMoved/Entered/Left to CursorMoved/... This emphasizes the difference between motion of the host GUI cursor, as used for clicking on things, and raw mouse(-like) input data, as used for first-person controls. * Add support for windows and OSX, fix merging * Fix warnings and errors on Linux * Remove unnecessary breaking changes * Add MouseWheel events to windows and OSX * Fix bad push call. * Fix docs, naming, and x11 events * Remove mutability warning * Add changelog entry
This commit is contained in:
parent
c61f9b75f8
commit
cfd087d9a5
8 changed files with 117 additions and 41 deletions
|
|
@ -54,17 +54,20 @@ pub enum WindowEvent {
|
|||
KeyboardInput { device_id: DeviceId, input: KeyboardInput },
|
||||
|
||||
/// The cursor has moved on the window.
|
||||
///
|
||||
/// `position` is (x,y) coords in pixels relative to the top-left corner of the window. Because the range of this
|
||||
/// data is limited by the display area and it may have been transformed by the OS to implement effects such as
|
||||
/// mouse acceleration, it should not be used to implement non-cursor-like interactions such as 3D camera control.
|
||||
MouseMoved { device_id: DeviceId, position: (f64, f64) },
|
||||
CursorMoved {
|
||||
device_id: DeviceId,
|
||||
|
||||
/// (x,y) coords in pixels relative to the top-left corner of the window. Because the range of this data is
|
||||
/// limited by the display area and it may have been transformed by the OS to implement effects such as cursor
|
||||
/// acceleration, it should not be used to implement non-cursor-like interactions such as 3D camera control.
|
||||
position: (f64, f64),
|
||||
},
|
||||
|
||||
/// The cursor has entered the window.
|
||||
MouseEntered { device_id: DeviceId },
|
||||
CursorEntered { device_id: DeviceId },
|
||||
|
||||
/// The cursor has left the window.
|
||||
MouseLeft { device_id: DeviceId },
|
||||
CursorLeft { device_id: DeviceId },
|
||||
|
||||
/// A mouse wheel movement or touchpad scroll occurred.
|
||||
MouseWheel { device_id: DeviceId, delta: MouseScrollDelta, phase: TouchPhase },
|
||||
|
|
@ -79,7 +82,7 @@ pub enum WindowEvent {
|
|||
/// is being pressed) and stage (integer representing the click level).
|
||||
TouchpadPressure { device_id: DeviceId, pressure: f32, stage: i64 },
|
||||
|
||||
/// Motion on some analog axis not otherwise handled. May overlap with mouse motion.
|
||||
/// Motion on some analog axis. May report data redundant to other, more specific events.
|
||||
AxisMotion { device_id: DeviceId, axis: AxisId, value: f64 },
|
||||
|
||||
/// The window needs to be redrawn.
|
||||
|
|
@ -110,10 +113,27 @@ pub enum WindowEvent {
|
|||
pub enum DeviceEvent {
|
||||
Added,
|
||||
Removed,
|
||||
/// Mouse devices yield `Motion` events where axis `0` is horizontal and axis `1` is vertical.
|
||||
/// A positive value means a movement to the right or the bottom, depending on the axis.
|
||||
/// Such events will be sent even if the mouse is in a corner of the screen.
|
||||
|
||||
/// Change in physical position of a pointing device.
|
||||
///
|
||||
/// This represents raw, unfiltered physical motion. Not to be confused with `WindowEvent::CursorMoved`.
|
||||
MouseMotion {
|
||||
/// (x, y) change in position in unspecified units.
|
||||
///
|
||||
/// Different devices may use different units.
|
||||
delta: (f64, f64),
|
||||
},
|
||||
|
||||
/// Physical scroll event
|
||||
MouseWheel {
|
||||
delta: MouseScrollDelta,
|
||||
},
|
||||
|
||||
/// Motion on some analog axis. This event will be reported for all arbitrary input devices
|
||||
/// that winit supports on this platform, including mouse devices. If the device is a mouse
|
||||
/// device then this will be reported alongside the MouseMotion event.
|
||||
Motion { axis: AxisId, value: f64 },
|
||||
|
||||
Button { button: ButtonId, state: ElementState },
|
||||
Key(KeyboardInput),
|
||||
Text { codepoint: char },
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue