Merge pull request #397 from Demonthos/tui_fix_mousemove
only trigger onmousemove if the position has changed (tui)
This commit is contained in:
1 file changed
+25
-21
+25
-21
@@ -232,33 +232,37 @@ impl InnerInputState {
|
|||||||
let old_pos = previous_mouse
|
let old_pos = previous_mouse
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map(|m| (m.0.screen_x, m.0.screen_y));
|
.map(|m| (m.0.screen_x, m.0.screen_y));
|
||||||
let clicked =
|
// the a mouse button is pressed if a button was not down and is now down
|
||||||
(!mouse.0.buttons & previous_mouse.as_ref().map(|m| m.0.buttons).unwrap_or(0)) > 0;
|
let pressed =
|
||||||
|
(mouse.0.buttons & !previous_mouse.as_ref().map(|m| m.0.buttons).unwrap_or(0)) > 0;
|
||||||
|
// the a mouse button is pressed if a button was down and is now not down
|
||||||
let released =
|
let released =
|
||||||
(mouse.0.buttons & !previous_mouse.map(|m| m.0.buttons).unwrap_or(0)) > 0;
|
(!mouse.0.buttons & previous_mouse.map(|m| m.0.buttons).unwrap_or(0)) > 0;
|
||||||
let wheel_delta = self.wheel.as_ref().map_or(0.0, |w| w.delta_y);
|
let wheel_delta = self.wheel.as_ref().map_or(0.0, |w| w.delta_y);
|
||||||
let mouse_data = &mouse.0;
|
let mouse_data = &mouse.0;
|
||||||
let wheel_data = &self.wheel;
|
let wheel_data = &self.wheel;
|
||||||
|
|
||||||
{
|
{
|
||||||
// mousemove
|
// mousemove
|
||||||
let mut will_bubble = FxHashSet::default();
|
if old_pos != Some(new_pos) {
|
||||||
for node in dom.get_listening_sorted("mousemove") {
|
let mut will_bubble = FxHashSet::default();
|
||||||
let node_layout = layout.layout(node.state.layout.node.unwrap()).unwrap();
|
for node in dom.get_listening_sorted("mousemove") {
|
||||||
let previously_contained = old_pos
|
let node_layout = layout.layout(node.state.layout.node.unwrap()).unwrap();
|
||||||
.filter(|pos| layout_contains_point(node_layout, *pos))
|
let previously_contained = old_pos
|
||||||
.is_some();
|
.filter(|pos| layout_contains_point(node_layout, *pos))
|
||||||
let currently_contains = layout_contains_point(node_layout, new_pos);
|
.is_some();
|
||||||
|
let currently_contains = layout_contains_point(node_layout, new_pos);
|
||||||
|
|
||||||
if currently_contains && previously_contained {
|
if currently_contains && previously_contained {
|
||||||
try_create_event(
|
try_create_event(
|
||||||
"mousemove",
|
"mousemove",
|
||||||
Arc::new(prepare_mouse_data(mouse_data, node_layout)),
|
Arc::new(prepare_mouse_data(mouse_data, node_layout)),
|
||||||
&mut will_bubble,
|
&mut will_bubble,
|
||||||
resolved_events,
|
resolved_events,
|
||||||
node,
|
node,
|
||||||
dom,
|
dom,
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -309,8 +313,8 @@ impl InnerInputState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
// mousedown
|
||||||
// mousedown
|
if pressed {
|
||||||
let mut will_bubble = FxHashSet::default();
|
let mut will_bubble = FxHashSet::default();
|
||||||
for node in dom.get_listening_sorted("mousedown") {
|
for node in dom.get_listening_sorted("mousedown") {
|
||||||
let node_layout = layout.layout(node.state.layout.node.unwrap()).unwrap();
|
let node_layout = layout.layout(node.state.layout.node.unwrap()).unwrap();
|
||||||
|
|||||||
Reference in new issue
Block a user