fix edit mode pointer leave

This commit is contained in:
galister
2025-12-20 18:19:42 +09:00
parent 23df9228a9
commit 73e2f06b01
2 changed files with 11 additions and 2 deletions

View File

@@ -364,8 +364,11 @@ 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);
@@ -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,8 +450,11 @@ 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

View File

@@ -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,
} }
} }