From a974640a66cc86cc89c8c99080022124f7232eda Mon Sep 17 00:00:00 2001 From: daxpedda Date: Thu, 20 Jun 2024 22:56:08 +0200 Subject: [PATCH] Web: set control flow strategies on `EventLoop` (#3740) --- src/platform/web.rs | 22 ++++++++++++++++++++++ src/platform_impl/web/event_loop/mod.rs | 9 +++++++++ 2 files changed, 31 insertions(+) diff --git a/src/platform/web.rs b/src/platform/web.rs index 25765ae8e..f43a51cba 100644 --- a/src/platform/web.rs +++ b/src/platform/web.rs @@ -190,6 +190,20 @@ pub trait EventLoopExtWebSys { fn spawn(self, event_handler: F) where F: 'static + FnMut(Event, &ActiveEventLoop); + + /// 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 { @@ -207,6 +221,14 @@ impl EventLoopExtWebSys for EventLoop { { self.event_loop.spawn(event_handler) } + + 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 738bd2749..aa0a0d110 100644 --- a/src/platform_impl/web/event_loop/mod.rs +++ b/src/platform_impl/web/event_loop/mod.rs @@ -4,6 +4,7 @@ use std::sync::mpsc::{self, Receiver, Sender}; 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}; @@ -99,4 +100,12 @@ 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() + } }