spawned overlays to not inherit parent scale

This commit is contained in:
galister 2026-07-05 04:37:54 +09:00
parent a9c6599d63
commit 054d1fd9f4
2 changed files with 21 additions and 11 deletions

View File

@ -34,7 +34,10 @@ use crate::{
backend::{OverlayEventData, OverlayMeta},
set::OverlayWindowSet,
snap_upright,
window::{OverlayCategory, OverlayWindowData, save_transform, spawn_transform_from_parent},
window::{
OverlayCategory, OverlayWindowData, save_transform, scalar_scale,
spawn_transform_from_parent,
},
},
};
@ -834,11 +837,9 @@ impl<T> OverlayWindowManager<T> {
.filter(|(id, overlay)| {
*id != oid
&& overlay.config.active_state.is_some()
&& !matches!(
&& matches!(
overlay.config.category,
OverlayCategory::Internal
| OverlayCategory::Keyboard
| OverlayCategory::Dashboard
OverlayCategory::Panel | OverlayCategory::WayVR | OverlayCategory::Screen
)
})
.max_by_key(|(_, overlay)| overlay.birthframe)
@ -865,10 +866,13 @@ impl<T> OverlayWindowManager<T> {
.as_ref()?
.transform;
let spawn_transform = spawn_transform_from_parent(&parent_transform, &app.input_state.hmd);
let overlay = self.overlays.get_mut(oid)?;
let state = overlay.config.active_state.as_mut()?;
let child_scale = scalar_scale(&overlay.config.default_state.transform);
let spawn_transform =
spawn_transform_from_parent(&parent_transform, &app.input_state.hmd, child_scale);
state.transform = spawn_transform;
save_transform(state, app);
overlay.config.dirty = true;

View File

@ -310,7 +310,11 @@ pub fn save_transform(state: &mut OverlayWindowState, app: &mut AppState) {
state.saved_transform = Some(parent_transform.inverse() * state.transform);
}
pub fn spawn_transform_from_parent(parent: &Affine3A, hmd: &Affine3A) -> Affine3A {
pub fn spawn_transform_from_parent(
parent: &Affine3A,
hmd: &Affine3A,
child_scale: f32,
) -> Affine3A {
const LEFT: f32 = 0.08;
const DOWN: f32 = 0.08;
const CLOSER_TO_HMD: f32 = 0.06;
@ -325,8 +329,10 @@ pub fn spawn_transform_from_parent(parent: &Affine3A, hmd: &Affine3A) -> Affine3
-z_axis
};
let world_offset = -x_axis * LEFT - y_axis * DOWN + toward_hmd * CLOSER_TO_HMD;
let mut transform = *parent;
transform.translation += world_offset;
transform
let translation =
parent.translation - x_axis * LEFT - y_axis * DOWN + toward_hmd * CLOSER_TO_HMD;
let rotation = Quat::from_mat3a(&Mat3A::from_cols(x_axis, y_axis, z_axis));
Affine3A::from_scale_rotation_translation(Vec3::ONE * child_scale, rotation, translation.into())
}