mirror of
https://github.com/rust-windowing/winit.git
synced 2026-06-26 14:49:07 -04:00
winit-orbital: provide last mouse position with button events
This commit is contained in:
@@ -187,6 +187,7 @@ bitflags! {
|
|||||||
struct EventState {
|
struct EventState {
|
||||||
keyboard: KeyboardModifierState,
|
keyboard: KeyboardModifierState,
|
||||||
mouse: MouseButtonState,
|
mouse: MouseButtonState,
|
||||||
|
mouse_pos: (i32, i32),
|
||||||
resize_opt: Option<(u32, u32)>,
|
resize_opt: Option<(u32, u32)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,35 +423,50 @@ impl EventLoop {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
EventOption::Mouse(MouseEvent { x, y }) => {
|
EventOption::Mouse(MouseEvent { x, y }) => {
|
||||||
app.window_event(window_target, window_id, event::WindowEvent::PointerMoved {
|
event_state.mouse_pos = (x, y);
|
||||||
device_id: None,
|
app.window_event(
|
||||||
primary: true,
|
window_target,
|
||||||
position: (x, y).into(),
|
window_id,
|
||||||
source: event::PointerSource::Mouse,
|
event::WindowEvent::PointerMoved {
|
||||||
});
|
device_id: None,
|
||||||
|
primary: true,
|
||||||
|
position: event_state.mouse_pos.into(),
|
||||||
|
source: event::PointerSource::Mouse,
|
||||||
|
},
|
||||||
|
);
|
||||||
},
|
},
|
||||||
EventOption::MouseRelative(MouseRelativeEvent { dx, dy }) => {
|
EventOption::MouseRelative(MouseRelativeEvent { dx, dy }) => {
|
||||||
app.device_event(window_target, None, event::DeviceEvent::PointerMotion {
|
app.device_event(
|
||||||
delta: (dx as f64, dy as f64),
|
window_target,
|
||||||
});
|
None,
|
||||||
|
event::DeviceEvent::PointerMotion { delta: (dx as f64, dy as f64) },
|
||||||
|
);
|
||||||
},
|
},
|
||||||
EventOption::Button(ButtonEvent { left, middle, right }) => {
|
EventOption::Button(ButtonEvent { left, middle, right }) => {
|
||||||
while let Some((button, state)) = event_state.mouse(left, middle, right) {
|
while let Some((button, state)) = event_state.mouse(left, middle, right) {
|
||||||
app.window_event(window_target, window_id, event::WindowEvent::PointerButton {
|
app.window_event(
|
||||||
device_id: None,
|
window_target,
|
||||||
primary: true,
|
window_id,
|
||||||
state,
|
event::WindowEvent::PointerButton {
|
||||||
position: dpi::PhysicalPosition::default(),
|
device_id: None,
|
||||||
button: button.into(),
|
primary: true,
|
||||||
});
|
state,
|
||||||
|
position: event_state.mouse_pos.into(),
|
||||||
|
button: button.into(),
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
EventOption::Scroll(ScrollEvent { x, y }) => {
|
EventOption::Scroll(ScrollEvent { x, y }) => {
|
||||||
app.window_event(window_target, window_id, event::WindowEvent::MouseWheel {
|
app.window_event(
|
||||||
device_id: None,
|
window_target,
|
||||||
delta: event::MouseScrollDelta::LineDelta(x as f32, y as f32),
|
window_id,
|
||||||
phase: event::TouchPhase::Moved,
|
event::WindowEvent::MouseWheel {
|
||||||
});
|
device_id: None,
|
||||||
|
delta: event::MouseScrollDelta::LineDelta(x as f32, y as f32),
|
||||||
|
phase: event::TouchPhase::Moved,
|
||||||
|
},
|
||||||
|
);
|
||||||
},
|
},
|
||||||
EventOption::Quit(QuitEvent {}) => {
|
EventOption::Quit(QuitEvent {}) => {
|
||||||
app.window_event(window_target, window_id, event::WindowEvent::CloseRequested);
|
app.window_event(window_target, window_id, event::WindowEvent::CloseRequested);
|
||||||
|
|||||||
Reference in New Issue
Block a user