fix floating overlays recentering when leaving edit mode
This commit is contained in:
@@ -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,9 +655,11 @@ 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);
|
||||||
|
if !keep_transforms {
|
||||||
data.config.reset(app, false);
|
data.config.reset(app, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ws.overlays.clear();
|
ws.overlays.clear();
|
||||||
self.restore_set = new_set;
|
self.restore_set = new_set;
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user