mirror of
https://github.com/emilk/egui.git
synced 2026-09-02 14:50:03 -04:00
Avoid repaints on device mouse motion outside window (#7866)
## Summary - Ignore raw device mouse motion unless the window is focused and the pointer is inside it - Also handles pointers starting down and then moving into or out of the window (drag & drop) - Prevents global mouse motion from triggering continuous repaint loops - Applies to both glow and wgpu backends ## Testing - I ran the check script, nothing seemed to fail --------- Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
This commit is contained in:
@@ -640,11 +640,27 @@ impl State {
|
||||
self.has_sent_ime_enabled = false;
|
||||
}
|
||||
|
||||
pub fn on_mouse_motion(&mut self, delta: (f64, f64)) {
|
||||
/// Returns `true` if the event was sent to egui.
|
||||
pub fn on_mouse_motion(&mut self, delta: (f64, f64)) -> bool {
|
||||
if !self.is_pointer_in_window() && !self.any_pointer_button_down {
|
||||
return false;
|
||||
}
|
||||
|
||||
self.egui_input.events.push(egui::Event::MouseMoved(Vec2 {
|
||||
x: delta.0 as f32,
|
||||
y: delta.1 as f32,
|
||||
}));
|
||||
true
|
||||
}
|
||||
|
||||
/// Returns `true` when the pointer is currently inside the window.
|
||||
pub fn is_pointer_in_window(&self) -> bool {
|
||||
self.pointer_pos_in_points.is_some()
|
||||
}
|
||||
|
||||
/// Returns `true` if any pointer button is currently held down.
|
||||
pub fn is_any_pointer_button_down(&self) -> bool {
|
||||
self.any_pointer_button_down
|
||||
}
|
||||
|
||||
/// Call this when there is a new [`accesskit::ActionRequest`].
|
||||
|
||||
Reference in New Issue
Block a user