diff --git a/src/changelog/unreleased.md b/src/changelog/unreleased.md index 8df9229281..c75a3fd6ba 100644 --- a/src/changelog/unreleased.md +++ b/src/changelog/unreleased.md @@ -40,6 +40,11 @@ changelog entry. ## Unreleased +### Added + +- On Web, add `EventLoopExtWebSys::(set_)poll_strategy()` to allow setting + control flow strategies before starting the event loop. + ### Changed - On Web, let events wake up event loop immediately when using diff --git a/src/platform/web.rs b/src/platform/web.rs index 9f9c797f14..fad81e7591 100644 --- a/src/platform/web.rs +++ b/src/platform/web.rs @@ -183,6 +183,20 @@ pub trait EventLoopExtWebSys { )] /// [^1]: `run_app()` is _not_ available on WASM when the target supports `exception-handling`. fn spawn_app + 'static>(self, app: A); + + /// Sets the strategy for [`ControlFlow::Poll`]. + /// + /// See [`PollStrategy`]. + /// + /// [`ControlFlow::Poll`]: crate::event_loop::ControlFlow::Poll + fn set_poll_strategy(&self, strategy: PollStrategy); + + /// Gets the strategy for [`ControlFlow::Poll`]. + /// + /// See [`PollStrategy`]. + /// + /// [`ControlFlow::Poll`]: crate::event_loop::ControlFlow::Poll + fn poll_strategy(&self) -> PollStrategy; } impl EventLoopExtWebSys for EventLoop { @@ -191,6 +205,14 @@ impl EventLoopExtWebSys for EventLoop { fn spawn_app + 'static>(self, app: A) { self.event_loop.spawn_app(app); } + + fn set_poll_strategy(&self, strategy: PollStrategy) { + self.event_loop.set_poll_strategy(strategy); + } + + fn poll_strategy(&self) -> PollStrategy { + self.event_loop.poll_strategy() + } } pub trait ActiveEventLoopExtWebSys { diff --git a/src/platform_impl/web/event_loop/mod.rs b/src/platform_impl/web/event_loop/mod.rs index 0a6d5052a1..67f373cd12 100644 --- a/src/platform_impl/web/event_loop/mod.rs +++ b/src/platform_impl/web/event_loop/mod.rs @@ -5,6 +5,7 @@ use crate::application::ApplicationHandler; use crate::error::EventLoopError; use crate::event::Event; use crate::event_loop::ActiveEventLoop as RootActiveEventLoop; +use crate::platform::web::{ActiveEventLoopExtWebSys, PollStrategy}; use super::{backend, device, window}; @@ -76,6 +77,14 @@ impl EventLoop { pub fn window_target(&self) -> &RootActiveEventLoop { &self.elw } + + pub fn set_poll_strategy(&self, strategy: PollStrategy) { + self.elw.set_poll_strategy(strategy); + } + + pub fn poll_strategy(&self) -> PollStrategy { + self.elw.poll_strategy() + } } fn handle_event>(