From 71d98f5c950e036ea5e16e0fab98a27455bc65e6 Mon Sep 17 00:00:00 2001 From: Jacob LeCoq <lecoqjacob@gmail.com> Date: Sun, 20 Nov 2022 11:20:42 -0600 Subject: [PATCH] use window params for first frame camera computations --- src/widgets/app.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/widgets/app.rs b/src/widgets/app.rs index 72cde9b..db871b5 100644 --- a/src/widgets/app.rs +++ b/src/widgets/app.rs @@ -43,8 +43,10 @@ pub fn app_update( In((widget_context, entity, previous_props_entity)): In<(KayakWidgetContext, Entity, Entity)>, widget_param: WidgetParam<KayakApp, EmptyState>, camera: Query<&Camera, With<CameraUIKayak>>, + windows: Res<Windows>, ) -> bool { let mut window_change = false; + if let Ok(app_style) = widget_param.style_query.get(entity) { if let Some(camera_entity) = widget_context.camera_entity { if let Ok(camera) = camera.get(camera_entity) { @@ -55,6 +57,15 @@ pub fn app_update( if app_style.height != StyleProp::Value(Units::Pixels(size.y)) { window_change = true; } + } else { + let primary_window = windows.get_primary().unwrap(); + if app_style.width != StyleProp::Value(Units::Pixels(primary_window.width())) { + window_change = true; + } + if app_style.height != StyleProp::Value(Units::Pixels(primary_window.height())) + { + window_change = true; + } } } } @@ -69,6 +80,8 @@ pub fn app_render( mut commands: Commands, mut query: Query<(&mut KStyle, &KChildren)>, camera: Query<&Camera, With<CameraUIKayak>>, + windows: Res<Windows>, + images: Res<Assets<Image>>, ) -> bool { let (mut width, mut height) = (0.0, 0.0); @@ -77,6 +90,17 @@ pub fn app_render( if let Some(size) = camera.logical_viewport_size() { width = size.x; height = size.y; + } else if let Some(viewport) = camera + .target + .get_render_target_info(&windows, &images) + .as_ref() + .map(|target_info| { + let scale = target_info.scale_factor; + (target_info.physical_size.as_dvec2() / scale).as_vec2() + }) + { + width = viewport.x; + height = viewport.y; } } } -- GitLab