eframe: make RequestRepaintEvent into an enum UserEvent (#2311)

Preparation for https://github.com/emilk/egui/pull/2294
to make that a smaller diff.
This commit is contained in:
Emil Ernerfeldt 2022-11-16 12:17:41 +01:00 committed by GitHub
parent 0ff1ee3893
commit 9268f43896
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 29 deletions

View file

@ -10,7 +10,7 @@
use std::any::Any; use std::any::Any;
#[cfg(not(target_arch = "wasm32"))] #[cfg(not(target_arch = "wasm32"))]
pub use crate::native::run::RequestRepaintEvent; pub use crate::native::run::UserEvent;
#[cfg(not(target_arch = "wasm32"))] #[cfg(not(target_arch = "wasm32"))]
pub use winit::event_loop::EventLoopBuilder; pub use winit::event_loop::EventLoopBuilder;
@ -20,7 +20,7 @@ pub use winit::event_loop::EventLoopBuilder;
/// You can configure any platform specific details required on top of the default configuration /// You can configure any platform specific details required on top of the default configuration
/// done by `EFrame`. /// done by `EFrame`.
#[cfg(not(target_arch = "wasm32"))] #[cfg(not(target_arch = "wasm32"))]
pub type EventLoopBuilderHook = Box<dyn FnOnce(&mut EventLoopBuilder<RequestRepaintEvent>)>; pub type EventLoopBuilderHook = Box<dyn FnOnce(&mut EventLoopBuilder<UserEvent>)>;
/// This is how your app is created. /// This is how your app is created.
/// ///

View file

@ -13,7 +13,9 @@ use super::epi_integration::{self, EpiIntegration};
use crate::epi; use crate::epi;
#[derive(Debug)] #[derive(Debug)]
pub struct RequestRepaintEvent; pub enum UserEvent {
RequestRepaint,
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -45,14 +47,14 @@ trait WinitApp {
fn paint(&mut self) -> EventResult; fn paint(&mut self) -> EventResult;
fn on_event( fn on_event(
&mut self, &mut self,
event_loop: &EventLoopWindowTarget<RequestRepaintEvent>, event_loop: &EventLoopWindowTarget<UserEvent>,
event: &winit::event::Event<'_, RequestRepaintEvent>, event: &winit::event::Event<'_, UserEvent>,
) -> EventResult; ) -> EventResult;
} }
fn create_event_loop_builder( fn create_event_loop_builder(
native_options: &mut epi::NativeOptions, native_options: &mut epi::NativeOptions,
) -> EventLoopBuilder<RequestRepaintEvent> { ) -> EventLoopBuilder<UserEvent> {
let mut event_loop_builder = winit::event_loop::EventLoopBuilder::with_user_event(); let mut event_loop_builder = winit::event_loop::EventLoopBuilder::with_user_event();
if let Some(hook) = std::mem::take(&mut native_options.event_loop_builder) { if let Some(hook) = std::mem::take(&mut native_options.event_loop_builder) {
@ -68,10 +70,10 @@ fn create_event_loop_builder(
/// multiple times. This is just a limitation of winit. /// multiple times. This is just a limitation of winit.
fn with_event_loop( fn with_event_loop(
mut native_options: epi::NativeOptions, mut native_options: epi::NativeOptions,
f: impl FnOnce(&mut EventLoop<RequestRepaintEvent>, NativeOptions), f: impl FnOnce(&mut EventLoop<UserEvent>, NativeOptions),
) { ) {
use std::cell::RefCell; use std::cell::RefCell;
thread_local!(static EVENT_LOOP: RefCell<Option<EventLoop<RequestRepaintEvent>>> = RefCell::new(None)); thread_local!(static EVENT_LOOP: RefCell<Option<EventLoop<UserEvent>>> = RefCell::new(None));
EVENT_LOOP.with(|event_loop| { EVENT_LOOP.with(|event_loop| {
// Since we want to reference NativeOptions when creating the EventLoop we can't // Since we want to reference NativeOptions when creating the EventLoop we can't
@ -84,7 +86,7 @@ fn with_event_loop(
}); });
} }
fn run_and_return(event_loop: &mut EventLoop<RequestRepaintEvent>, mut winit_app: impl WinitApp) { fn run_and_return(event_loop: &mut EventLoop<UserEvent>, mut winit_app: impl WinitApp) {
use winit::platform::run_return::EventLoopExtRunReturn as _; use winit::platform::run_return::EventLoopExtRunReturn as _;
tracing::debug!("event_loop.run_return"); tracing::debug!("event_loop.run_return");
@ -110,7 +112,7 @@ fn run_and_return(event_loop: &mut EventLoop<RequestRepaintEvent>, mut winit_app
winit_app.paint() winit_app.paint()
} }
winit::event::Event::UserEvent(RequestRepaintEvent) winit::event::Event::UserEvent(UserEvent::RequestRepaint)
| winit::event::Event::NewEvents(winit::event::StartCause::ResumeTimeReached { | winit::event::Event::NewEvents(winit::event::StartCause::ResumeTimeReached {
.. ..
}) => EventResult::RepaintNext, }) => EventResult::RepaintNext,
@ -176,10 +178,7 @@ fn run_and_return(event_loop: &mut EventLoop<RequestRepaintEvent>, mut winit_app
}); });
} }
fn run_and_exit( fn run_and_exit(event_loop: EventLoop<UserEvent>, mut winit_app: impl WinitApp + 'static) -> ! {
event_loop: EventLoop<RequestRepaintEvent>,
mut winit_app: impl WinitApp + 'static,
) -> ! {
tracing::debug!("event_loop.run"); tracing::debug!("event_loop.run");
let mut next_repaint_time = Instant::now(); let mut next_repaint_time = Instant::now();
@ -200,7 +199,7 @@ fn run_and_exit(
winit_app.paint() winit_app.paint()
} }
winit::event::Event::UserEvent(RequestRepaintEvent) winit::event::Event::UserEvent(UserEvent::RequestRepaint)
| winit::event::Event::NewEvents(winit::event::StartCause::ResumeTimeReached { | winit::event::Event::NewEvents(winit::event::StartCause::ResumeTimeReached {
.. ..
}) => EventResult::RepaintNext, }) => EventResult::RepaintNext,
@ -299,7 +298,7 @@ mod glow_integration {
} }
struct GlowWinitApp { struct GlowWinitApp {
repaint_proxy: Arc<egui::mutex::Mutex<EventLoopProxy<RequestRepaintEvent>>>, repaint_proxy: Arc<egui::mutex::Mutex<EventLoopProxy<UserEvent>>>,
app_name: String, app_name: String,
native_options: epi::NativeOptions, native_options: epi::NativeOptions,
running: Option<GlowWinitRunning>, running: Option<GlowWinitRunning>,
@ -313,7 +312,7 @@ mod glow_integration {
impl GlowWinitApp { impl GlowWinitApp {
fn new( fn new(
event_loop: &EventLoop<RequestRepaintEvent>, event_loop: &EventLoop<UserEvent>,
app_name: &str, app_name: &str,
native_options: epi::NativeOptions, native_options: epi::NativeOptions,
app_creator: epi::AppCreator, app_creator: epi::AppCreator,
@ -330,7 +329,7 @@ mod glow_integration {
#[allow(unsafe_code)] #[allow(unsafe_code)]
fn create_glutin_windowed_context( fn create_glutin_windowed_context(
event_loop: &EventLoopWindowTarget<RequestRepaintEvent>, event_loop: &EventLoopWindowTarget<UserEvent>,
storage: Option<&dyn epi::Storage>, storage: Option<&dyn epi::Storage>,
title: &String, title: &String,
native_options: &NativeOptions, native_options: &NativeOptions,
@ -372,7 +371,7 @@ mod glow_integration {
(gl_window, gl) (gl_window, gl)
} }
fn init_run_state(&mut self, event_loop: &EventLoopWindowTarget<RequestRepaintEvent>) { fn init_run_state(&mut self, event_loop: &EventLoopWindowTarget<UserEvent>) {
let storage = epi_integration::create_storage(&self.app_name); let storage = epi_integration::create_storage(&self.app_name);
let (gl_window, gl) = Self::create_glutin_windowed_context( let (gl_window, gl) = Self::create_glutin_windowed_context(
@ -409,7 +408,10 @@ mod glow_integration {
{ {
let event_loop_proxy = self.repaint_proxy.clone(); let event_loop_proxy = self.repaint_proxy.clone();
integration.egui_ctx.set_request_repaint_callback(move || { integration.egui_ctx.set_request_repaint_callback(move || {
event_loop_proxy.lock().send_event(RequestRepaintEvent).ok(); event_loop_proxy
.lock()
.send_event(UserEvent::RequestRepaint)
.ok();
}); });
} }
@ -552,8 +554,8 @@ mod glow_integration {
fn on_event( fn on_event(
&mut self, &mut self,
event_loop: &EventLoopWindowTarget<RequestRepaintEvent>, event_loop: &EventLoopWindowTarget<UserEvent>,
event: &winit::event::Event<'_, RequestRepaintEvent>, event: &winit::event::Event<'_, UserEvent>,
) -> EventResult { ) -> EventResult {
match event { match event {
winit::event::Event::Resumed => { winit::event::Event::Resumed => {
@ -697,7 +699,7 @@ mod wgpu_integration {
} }
struct WgpuWinitApp { struct WgpuWinitApp {
repaint_proxy: Arc<std::sync::Mutex<EventLoopProxy<RequestRepaintEvent>>>, repaint_proxy: Arc<std::sync::Mutex<EventLoopProxy<UserEvent>>>,
app_name: String, app_name: String,
native_options: epi::NativeOptions, native_options: epi::NativeOptions,
app_creator: Option<epi::AppCreator>, app_creator: Option<epi::AppCreator>,
@ -711,7 +713,7 @@ mod wgpu_integration {
impl WgpuWinitApp { impl WgpuWinitApp {
fn new( fn new(
event_loop: &EventLoop<RequestRepaintEvent>, event_loop: &EventLoop<UserEvent>,
app_name: &str, app_name: &str,
native_options: epi::NativeOptions, native_options: epi::NativeOptions,
app_creator: epi::AppCreator, app_creator: epi::AppCreator,
@ -728,7 +730,7 @@ mod wgpu_integration {
} }
fn create_window( fn create_window(
event_loop: &EventLoopWindowTarget<RequestRepaintEvent>, event_loop: &EventLoopWindowTarget<UserEvent>,
storage: Option<&dyn epi::Storage>, storage: Option<&dyn epi::Storage>,
title: &String, title: &String,
native_options: &NativeOptions, native_options: &NativeOptions,
@ -764,7 +766,7 @@ mod wgpu_integration {
fn init_run_state( fn init_run_state(
&mut self, &mut self,
event_loop: &EventLoopWindowTarget<RequestRepaintEvent>, event_loop: &EventLoopWindowTarget<UserEvent>,
storage: Option<Box<dyn epi::Storage>>, storage: Option<Box<dyn epi::Storage>>,
window: winit::window::Window, window: winit::window::Window,
) { ) {
@ -803,7 +805,7 @@ mod wgpu_integration {
event_loop_proxy event_loop_proxy
.lock() .lock()
.unwrap() .unwrap()
.send_event(RequestRepaintEvent) .send_event(UserEvent::RequestRepaint)
.ok(); .ok();
}); });
} }
@ -934,8 +936,8 @@ mod wgpu_integration {
fn on_event( fn on_event(
&mut self, &mut self,
event_loop: &EventLoopWindowTarget<RequestRepaintEvent>, event_loop: &EventLoopWindowTarget<UserEvent>,
event: &winit::event::Event<'_, RequestRepaintEvent>, event: &winit::event::Event<'_, UserEvent>,
) -> EventResult { ) -> EventResult {
match event { match event {
winit::event::Event::Resumed => { winit::event::Event::Resumed => {