mirror of https://github.com/wayvr-org/wayvr.git
spawned overlays to not inherit parent scale
This commit is contained in:
parent
a9c6599d63
commit
054d1fd9f4
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue