Web: set control flow strategies on EventLoop (#3740)
This commit is contained in:
parent
db2c97a995
commit
b4e83a5966
3 changed files with 36 additions and 0 deletions
|
|
@ -40,6 +40,11 @@ changelog entry.
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- On Web, add `EventLoopExtWebSys::(set_)poll_strategy()` to allow setting
|
||||||
|
control flow strategies before starting the event loop.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- On Web, let events wake up event loop immediately when using
|
- On Web, let events wake up event loop immediately when using
|
||||||
|
|
|
||||||
|
|
@ -183,6 +183,20 @@ pub trait EventLoopExtWebSys {
|
||||||
)]
|
)]
|
||||||
/// [^1]: `run_app()` is _not_ available on WASM when the target supports `exception-handling`.
|
/// [^1]: `run_app()` is _not_ available on WASM when the target supports `exception-handling`.
|
||||||
fn spawn_app<A: ApplicationHandler<Self::UserEvent> + 'static>(self, app: A);
|
fn spawn_app<A: ApplicationHandler<Self::UserEvent> + '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<T> EventLoopExtWebSys for EventLoop<T> {
|
impl<T> EventLoopExtWebSys for EventLoop<T> {
|
||||||
|
|
@ -191,6 +205,14 @@ impl<T> EventLoopExtWebSys for EventLoop<T> {
|
||||||
fn spawn_app<A: ApplicationHandler<Self::UserEvent> + 'static>(self, app: A) {
|
fn spawn_app<A: ApplicationHandler<Self::UserEvent> + 'static>(self, app: A) {
|
||||||
self.event_loop.spawn_app(app);
|
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 {
|
pub trait ActiveEventLoopExtWebSys {
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ use crate::application::ApplicationHandler;
|
||||||
use crate::error::EventLoopError;
|
use crate::error::EventLoopError;
|
||||||
use crate::event::Event;
|
use crate::event::Event;
|
||||||
use crate::event_loop::ActiveEventLoop as RootActiveEventLoop;
|
use crate::event_loop::ActiveEventLoop as RootActiveEventLoop;
|
||||||
|
use crate::platform::web::{ActiveEventLoopExtWebSys, PollStrategy};
|
||||||
|
|
||||||
use super::{backend, device, window};
|
use super::{backend, device, window};
|
||||||
|
|
||||||
|
|
@ -76,6 +77,14 @@ impl<T> EventLoop<T> {
|
||||||
pub fn window_target(&self) -> &RootActiveEventLoop {
|
pub fn window_target(&self) -> &RootActiveEventLoop {
|
||||||
&self.elw
|
&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<T: 'static, A: ApplicationHandler<T>>(
|
fn handle_event<T: 'static, A: ApplicationHandler<T>>(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue