fix edit mode pointer leave
This commit is contained in:
@@ -364,9 +364,12 @@ where
|
|||||||
}
|
}
|
||||||
log::debug!("{} on_left (focus changed)", old_hovered.config.name);
|
log::debug!("{} on_left (focus changed)", old_hovered.config.name);
|
||||||
old_hovered.config.backend.on_left(app, idx);
|
old_hovered.config.backend.on_left(app, idx);
|
||||||
}
|
old_hovered.hover_pointers[idx] = false;
|
||||||
|
if !old_hovered.hover_pointers.iter().any(|x| *x) {
|
||||||
overlays.edit_overlay(hovered_id, false, app);
|
overlays.edit_overlay(hovered_id, false, app);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
overlays.edit_overlay(hit.overlay, true, app);
|
overlays.edit_overlay(hit.overlay, true, app);
|
||||||
let edit_mode = overlays.get_edit_mode();
|
let edit_mode = overlays.get_edit_mode();
|
||||||
@@ -377,6 +380,7 @@ where
|
|||||||
};
|
};
|
||||||
pointer = &mut app.input_state.pointers[idx];
|
pointer = &mut app.input_state.pointers[idx];
|
||||||
pointer.interaction.hovered_id = Some(hit.overlay);
|
pointer.interaction.hovered_id = Some(hit.overlay);
|
||||||
|
hovered.hover_pointers[idx] = true;
|
||||||
|
|
||||||
if let Some(primary_pointer) = hovered.primary_pointer {
|
if let Some(primary_pointer) = hovered.primary_pointer {
|
||||||
if hit.pointer <= primary_pointer {
|
if hit.pointer <= primary_pointer {
|
||||||
@@ -446,9 +450,12 @@ fn handle_no_hit<O>(
|
|||||||
if let Some(hovered) = overlays.mut_by_id(hovered_id) {
|
if let Some(hovered) = overlays.mut_by_id(hovered_id) {
|
||||||
log::debug!("{} on_left (no hit)", hovered.config.name);
|
log::debug!("{} on_left (no hit)", hovered.config.name);
|
||||||
hovered.config.backend.on_left(app, pointer_idx);
|
hovered.config.backend.on_left(app, pointer_idx);
|
||||||
}
|
hovered.hover_pointers[pointer_idx] = false;
|
||||||
|
if !hovered.hover_pointers.iter().any(|x| *x) {
|
||||||
overlays.edit_overlay(hovered_id, false, app);
|
overlays.edit_overlay(hovered_id, false, app);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// in case click released while not aiming at anything
|
// in case click released while not aiming at anything
|
||||||
// send release event to overlay that was originally clicked
|
// send release event to overlay that was originally clicked
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ pub struct OverlayWindowData<T> {
|
|||||||
pub data: T,
|
pub data: T,
|
||||||
pub birthframe: usize,
|
pub birthframe: usize,
|
||||||
pub primary_pointer: Option<usize>,
|
pub primary_pointer: Option<usize>,
|
||||||
|
pub hover_pointers: [bool; 2],
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> OverlayWindowData<T>
|
impl<T> OverlayWindowData<T>
|
||||||
@@ -28,6 +29,7 @@ where
|
|||||||
data: T::default(),
|
data: T::default(),
|
||||||
config,
|
config,
|
||||||
primary_pointer: None,
|
primary_pointer: None,
|
||||||
|
hover_pointers: [false, false],
|
||||||
birthframe: 0,
|
birthframe: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user