diff --git a/crates/eframe/src/native/epi_integration.rs b/crates/eframe/src/native/epi_integration.rs index 725522eb..65c5ccbe 100644 --- a/crates/eframe/src/native/epi_integration.rs +++ b/crates/eframe/src/native/epi_integration.rs @@ -138,6 +138,9 @@ pub fn window_builder( window_builder = window_builder_drag_and_drop(window_builder, *drag_and_drop_support); + // Always use the default window size / position on iOS. Trying to restore the previous position + // causes the window to be shown too small. + #[cfg(not(target_os = "ios"))] let inner_size_points = if let Some(mut window_settings) = window_settings { // Restore pos/size from previous session @@ -163,6 +166,7 @@ pub fn window_builder( *initial_window_size }; + #[cfg(not(target_os = "ios"))] if *centered { if let Some(monitor) = event_loop.available_monitors().next() { let monitor_size = monitor.size().to_logical::(monitor.scale_factor()); diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index bd084a50..4a508db9 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -119,6 +119,7 @@ fn with_event_loop( }) } +#[cfg(not(target_os = "ios"))] fn run_and_return( event_loop: &mut EventLoop, mut winit_app: impl WinitApp, @@ -332,6 +333,11 @@ fn run_and_exit(event_loop: EventLoop, mut winit_app: impl WinitApp + next_repaint_time = extremely_far_future(); ControlFlow::Poll } else { + // WaitUntil seems to not work on iOS + #[cfg(target_os = "ios")] + if let Some(window) = winit_app.window() { + window.request_redraw(); + } ControlFlow::WaitUntil(next_repaint_time) }; }) @@ -1052,6 +1058,7 @@ mod glow_integration { mut native_options: epi::NativeOptions, app_creator: epi::AppCreator, ) -> Result<()> { + #[cfg(not(target_os = "ios"))] if native_options.run_and_return { with_event_loop(native_options, |event_loop, native_options| { let glow_eframe = @@ -1063,6 +1070,13 @@ mod glow_integration { let glow_eframe = GlowWinitApp::new(&event_loop, app_name, native_options, app_creator); run_and_exit(event_loop, glow_eframe); } + + #[cfg(target_os = "ios")] + { + let event_loop = create_event_loop_builder(&mut native_options).build(); + let glow_eframe = GlowWinitApp::new(&event_loop, app_name, native_options, app_creator); + run_and_exit(event_loop, glow_eframe); + } } } @@ -1490,6 +1504,7 @@ mod wgpu_integration { mut native_options: epi::NativeOptions, app_creator: epi::AppCreator, ) -> Result<()> { + #[cfg(not(target_os = "ios"))] if native_options.run_and_return { with_event_loop(native_options, |event_loop, native_options| { let wgpu_eframe = @@ -1501,6 +1516,13 @@ mod wgpu_integration { let wgpu_eframe = WgpuWinitApp::new(&event_loop, app_name, native_options, app_creator); run_and_exit(event_loop, wgpu_eframe); } + + #[cfg(target_os = "ios")] + { + let event_loop = create_event_loop_builder(&mut native_options).build(); + let wgpu_eframe = WgpuWinitApp::new(&event_loop, app_name, native_options, app_creator); + run_and_exit(event_loop, wgpu_eframe); + } } }