From a4e159f78bfba4f40f7a08e57e3d5d04c46258ac Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Wed, 17 Dec 2025 19:34:35 +0900 Subject: [PATCH] fmt --- wlx-overlay-s/src/gui/panel/mod.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/wlx-overlay-s/src/gui/panel/mod.rs b/wlx-overlay-s/src/gui/panel/mod.rs index 518e57c..4761a13 100644 --- a/wlx-overlay-s/src/gui/panel/mod.rs +++ b/wlx-overlay-s/src/gui/panel/mod.rs @@ -55,6 +55,7 @@ pub struct GuiPanel { interaction_transform: Option, context: WguiContext, timestep: Timestep, + has_focus: [bool; 2], } pub type OnCustomIdFunc = Box< @@ -173,6 +174,7 @@ impl GuiPanel { on_notify: None, gui_scale: params.gui_scale, initialized: false, + has_focus: [false, false], }) } @@ -203,6 +205,7 @@ impl GuiPanel { interaction_transform: None, gui_scale: params.gui_scale, initialized: false, + has_focus: [false, false], }) } @@ -338,6 +341,9 @@ impl OverlayBackend for GuiPanel { pos: hit.uv * self.layout.content_size, device: hit.pointer, }); + + self.has_focus[hit.pointer] = true; + let result = self.push_event(app, e); HoverResult { @@ -354,8 +360,8 @@ impl OverlayBackend for GuiPanel { } fn on_left(&mut self, app: &mut AppState, pointer: usize) { - log::debug!("panel: on left"); let e = WguiEvent::MouseLeave(MouseLeaveEvent { device: pointer }); + self.has_focus[pointer] = false; self.push_event(app, &e); } @@ -380,8 +386,20 @@ impl OverlayBackend for GuiPanel { device: hit.pointer, }) }; - self.push_event(app, &e); + + // released while off-panel → send mouse leave as well + if !pressed && !self.has_focus[hit.pointer] { + let e = WguiEvent::MouseMotion(MouseMotionEvent { + pos: vec2(-1., -1.), + device: hit.pointer, + }); + self.push_event(app, &e); + let e = WguiEvent::MouseLeave(MouseLeaveEvent { + device: hit.pointer, + }); + self.push_event(app, &e); + } } fn get_interaction_transform(&mut self) -> Option {