Fix iOS support in `eframe` (#3241)
* Fix the app only taking up half the screen size on iPad * Fix request_repaint not working on iOS * Always use run_and_exit on iOS since run_and_return is not supported by winit on iOS right now. * Fix typo * Fix eframe glow on ios * Handle more cases
This commit is contained in:
parent
2c7c59820e
commit
461328f54d
|
|
@ -138,6 +138,9 @@ pub fn window_builder<E>(
|
||||||
|
|
||||||
window_builder = window_builder_drag_and_drop(window_builder, *drag_and_drop_support);
|
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 {
|
let inner_size_points = if let Some(mut window_settings) = window_settings {
|
||||||
// Restore pos/size from previous session
|
// Restore pos/size from previous session
|
||||||
|
|
||||||
|
|
@ -163,6 +166,7 @@ pub fn window_builder<E>(
|
||||||
*initial_window_size
|
*initial_window_size
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[cfg(not(target_os = "ios"))]
|
||||||
if *centered {
|
if *centered {
|
||||||
if let Some(monitor) = event_loop.available_monitors().next() {
|
if let Some(monitor) = event_loop.available_monitors().next() {
|
||||||
let monitor_size = monitor.size().to_logical::<f64>(monitor.scale_factor());
|
let monitor_size = monitor.size().to_logical::<f64>(monitor.scale_factor());
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,7 @@ fn with_event_loop<R>(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_os = "ios"))]
|
||||||
fn run_and_return(
|
fn run_and_return(
|
||||||
event_loop: &mut EventLoop<UserEvent>,
|
event_loop: &mut EventLoop<UserEvent>,
|
||||||
mut winit_app: impl WinitApp,
|
mut winit_app: impl WinitApp,
|
||||||
|
|
@ -332,6 +333,11 @@ fn run_and_exit(event_loop: EventLoop<UserEvent>, mut winit_app: impl WinitApp +
|
||||||
next_repaint_time = extremely_far_future();
|
next_repaint_time = extremely_far_future();
|
||||||
ControlFlow::Poll
|
ControlFlow::Poll
|
||||||
} else {
|
} 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)
|
ControlFlow::WaitUntil(next_repaint_time)
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
@ -1052,6 +1058,7 @@ mod glow_integration {
|
||||||
mut native_options: epi::NativeOptions,
|
mut native_options: epi::NativeOptions,
|
||||||
app_creator: epi::AppCreator,
|
app_creator: epi::AppCreator,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
|
#[cfg(not(target_os = "ios"))]
|
||||||
if native_options.run_and_return {
|
if native_options.run_and_return {
|
||||||
with_event_loop(native_options, |event_loop, native_options| {
|
with_event_loop(native_options, |event_loop, native_options| {
|
||||||
let glow_eframe =
|
let glow_eframe =
|
||||||
|
|
@ -1063,6 +1070,13 @@ mod glow_integration {
|
||||||
let glow_eframe = GlowWinitApp::new(&event_loop, app_name, native_options, app_creator);
|
let glow_eframe = GlowWinitApp::new(&event_loop, app_name, native_options, app_creator);
|
||||||
run_and_exit(event_loop, glow_eframe);
|
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,
|
mut native_options: epi::NativeOptions,
|
||||||
app_creator: epi::AppCreator,
|
app_creator: epi::AppCreator,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
|
#[cfg(not(target_os = "ios"))]
|
||||||
if native_options.run_and_return {
|
if native_options.run_and_return {
|
||||||
with_event_loop(native_options, |event_loop, native_options| {
|
with_event_loop(native_options, |event_loop, native_options| {
|
||||||
let wgpu_eframe =
|
let wgpu_eframe =
|
||||||
|
|
@ -1501,6 +1516,13 @@ mod wgpu_integration {
|
||||||
let wgpu_eframe = WgpuWinitApp::new(&event_loop, app_name, native_options, app_creator);
|
let wgpu_eframe = WgpuWinitApp::new(&event_loop, app_name, native_options, app_creator);
|
||||||
run_and_exit(event_loop, wgpu_eframe);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue