Bug fix: always set interact_pointer_pos on active Responses

This commit is contained in:
Emil Ernerfeldt 2021-01-27 20:52:42 +01:00
parent e30e999ef4
commit 703592ae0c

View file

@ -284,17 +284,12 @@ impl CtxRef {
for pointer_event in &self.input.pointer.pointer_events { for pointer_event in &self.input.pointer.pointer_events {
match pointer_event { match pointer_event {
PointerEvent::Moved(pos) => { PointerEvent::Moved(_) => {}
if response.is_pointer_button_down_on { PointerEvent::Pressed(_) => {
response.interact_pointer_pos = Some(*pos);
}
}
PointerEvent::Pressed(pos) => {
if hovered { if hovered {
if sense.click && memory.interaction.click_id.is_none() { if sense.click && memory.interaction.click_id.is_none() {
// potential start of a click // potential start of a click
memory.interaction.click_id = Some(id); memory.interaction.click_id = Some(id);
response.interact_pointer_pos = Some(*pos);
response.is_pointer_button_down_on = true; response.is_pointer_button_down_on = true;
} }
@ -303,7 +298,6 @@ impl CtxRef {
|| memory.interaction.drag_is_window) || memory.interaction.drag_is_window)
{ {
// potential start of a drag // potential start of a drag
response.interact_pointer_pos = Some(*pos);
memory.interaction.drag_id = Some(id); memory.interaction.drag_id = Some(id);
memory.interaction.drag_is_window = false; memory.interaction.drag_is_window = false;
memory.window_interaction = None; // HACK: stop moving windows (if any) memory.window_interaction = None; // HACK: stop moving windows (if any)
@ -319,7 +313,6 @@ impl CtxRef {
if hovered && response.is_pointer_button_down_on { if hovered && response.is_pointer_button_down_on {
if let Some(click) = click { if let Some(click) = click {
let clicked = hovered && response.is_pointer_button_down_on; let clicked = hovered && response.is_pointer_button_down_on;
response.interact_pointer_pos = Some(click.pos);
response.clicked[click.button as usize] = clicked; response.clicked[click.button as usize] = clicked;
response.double_clicked[click.button as usize] = response.double_clicked[click.button as usize] =
clicked && click.is_double(); clicked && click.is_double();
@ -329,6 +322,10 @@ impl CtxRef {
} }
} }
if response.is_pointer_button_down_on {
response.interact_pointer_pos = self.input().pointer.interact_pos();
}
if self.input.pointer.any_down() { if self.input.pointer.any_down() {
response.hovered &= response.is_pointer_button_down_on; // we don't hover widgets while interacting with *other* widgets response.hovered &= response.is_pointer_button_down_on; // we don't hover widgets while interacting with *other* widgets
} }