From 054d1fd9f4e0818767fa2407ca7b5fef383e3e43 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Sun, 5 Jul 2026 04:37:54 +0900 Subject: [PATCH] spawned overlays to not inherit parent scale --- wayvr/src/windowing/manager.rs | 16 ++++++++++------ wayvr/src/windowing/window.rs | 16 +++++++++++----- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/wayvr/src/windowing/manager.rs b/wayvr/src/windowing/manager.rs index 75eb4ac7..468f4772 100644 --- a/wayvr/src/windowing/manager.rs +++ b/wayvr/src/windowing/manager.rs @@ -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 OverlayWindowManager { .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 OverlayWindowManager { .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; diff --git a/wayvr/src/windowing/window.rs b/wayvr/src/windowing/window.rs index 06abb366..8799b6aa 100644 --- a/wayvr/src/windowing/window.rs +++ b/wayvr/src/windowing/window.rs @@ -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()) }