fix floating overlays recentering when leaving edit mode

This commit is contained in:
galister
2025-12-21 18:05:36 +09:00
parent 3776bad899
commit b11884637d

View File

@@ -85,7 +85,7 @@ where
if idx < last_idx { if idx < last_idx {
me.sets.push(OverlayWindowSet::default()); me.sets.push(OverlayWindowSet::default());
me.switch_to_set(app, Some(me.current_set.unwrap() + 1)); me.switch_to_set(app, Some(me.current_set.unwrap() + 1), false);
} }
app.screens.push(meta); app.screens.push(meta);
} }
@@ -101,7 +101,7 @@ where
let keyboard_id = me.add(keyboard, app); let keyboard_id = me.add(keyboard, app);
// is this needed? // is this needed?
me.switch_to_set(app, None); me.switch_to_set(app, None, false);
// copy keyboard to all sets // copy keyboard to all sets
let kbd_state = me let kbd_state = me
@@ -220,7 +220,7 @@ where
return Ok(()); return Ok(());
} }
self.switch_to_set(app, None); self.switch_to_set(app, None, false);
self.sets.remove(set); self.sets.remove(set);
let len = self.sets.len(); let len = self.sets.len();
if let Some(watch) = self.mut_by_id(self.watch_id) { if let Some(watch) = self.mut_by_id(self.watch_id) {
@@ -301,7 +301,7 @@ impl<T> OverlayWindowManager<T> {
// only safe to save when current_set is None // only safe to save when current_set is None
let restore_after = if self.current_set.is_some() { let restore_after = if self.current_set.is_some() {
self.switch_to_set(app, None); self.switch_to_set(app, None, true);
true true
} else { } else {
false false
@@ -357,7 +357,7 @@ impl<T> OverlayWindowManager<T> {
} }
if restore_after { if restore_after {
self.switch_to_set(app, Some(self.restore_set)); self.switch_to_set(app, Some(self.restore_set), true);
} }
} }
@@ -369,7 +369,7 @@ impl<T> OverlayWindowManager<T> {
// only safe to load when current_set is None // only safe to load when current_set is None
if self.current_set.is_some() { if self.current_set.is_some() {
self.switch_to_set(app, None); self.switch_to_set(app, None, false);
} }
self.sets.clear(); self.sets.clear();
@@ -621,10 +621,15 @@ impl<T> OverlayWindowManager<T> {
Some(set) Some(set)
}; };
self.switch_to_set(app, new_set); self.switch_to_set(app, new_set, false);
} }
pub fn switch_to_set(&mut self, app: &mut AppState, new_set: Option<usize>) { pub fn switch_to_set(
&mut self,
app: &mut AppState,
new_set: Option<usize>,
keep_transforms: bool,
) {
if new_set == self.current_set { if new_set == self.current_set {
return; return;
} }
@@ -650,7 +655,9 @@ impl<T> OverlayWindowManager<T> {
if let Some(state) = ws.overlays.remove(id) { if let Some(state) = ws.overlays.remove(id) {
log::debug!("{}: ws{} → active_state", data.config.name, new_set); log::debug!("{}: ws{} → active_state", data.config.name, new_set);
data.config.active_state = Some(state); data.config.active_state = Some(state);
data.config.reset(app, false); if !keep_transforms {
data.config.reset(app, false);
}
} }
} }
ws.overlays.clear(); ws.overlays.clear();
@@ -672,9 +679,9 @@ impl<T> OverlayWindowManager<T> {
let hmd = snap_upright(app.input_state.hmd, Vec3A::Y); let hmd = snap_upright(app.input_state.hmd, Vec3A::Y);
app.anchor = hmd * self.anchor_local; app.anchor = hmd * self.anchor_local;
self.switch_to_set(app, Some(self.restore_set)); self.switch_to_set(app, Some(self.restore_set), false);
} else { } else {
self.switch_to_set(app, None); self.switch_to_set(app, None, false);
} }
} }