From a440cb0a5abf88158c130f015d59cd7e9106d3f2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 16 Jun 2024 14:22:41 +0200 Subject: [PATCH 1/3] chore(deps): update actions/upload-artifact action to v4 (#718) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build_example.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_example.yml b/.github/workflows/build_example.yml index a1cab0f84..048cde65e 100644 --- a/.github/workflows/build_example.yml +++ b/.github/workflows/build_example.yml @@ -43,6 +43,6 @@ jobs: run: cargo build --example ${{inputs.example_name}} --release - name: Upload artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: path: target/release/examples/* From 62c80437936c89e59d2b2b097c2c51d967271024 Mon Sep 17 00:00:00 2001 From: marc2332 Date: Sun, 16 Jun 2024 16:08:08 +0200 Subject: [PATCH 2/3] chore: Clean up some code from `freya-renderer` --- crates/renderer/src/renderer.rs | 194 ++++++++++++++++---------------- 1 file changed, 98 insertions(+), 96 deletions(-) diff --git a/crates/renderer/src/renderer.rs b/crates/renderer/src/renderer.rs index 43f1c6b2c..2986d6852 100644 --- a/crates/renderer/src/renderer.rs +++ b/crates/renderer/src/renderer.rs @@ -70,6 +70,104 @@ pub struct DesktopRenderer<'a, State: Clone + 'static> { pub(crate) dropped_file_path: Option, } +impl<'a, State: Clone + 'static> DesktopRenderer<'a, State> { + /// Run the Desktop Renderer. + pub fn launch( + vdom: VirtualDom, + sdom: SafeDOM, + config: LaunchConfig, + devtools: Option, + hovered_node: HoveredNode, + ) { + let rt = tokio::runtime::Builder::new_multi_thread() + .enable_all() + .build() + .unwrap(); + + let _guard = rt.enter(); + + let event_loop = EventLoop::::with_user_event() + .build() + .expect("Failed to create event loop."); + let proxy = event_loop.create_proxy(); + + // Hotreload support for Dioxus + #[cfg(feature = "hot-reload")] + { + use std::process::exit; + let proxy = proxy.clone(); + dioxus_hot_reload::connect(move |msg| match msg { + dioxus_hot_reload::HotReloadMsg::UpdateTemplate(template) => { + let _ = proxy.send_event(EventMessage::UpdateTemplate(template)); + } + dioxus_hot_reload::HotReloadMsg::Shutdown => exit(0), + dioxus_hot_reload::HotReloadMsg::UpdateAsset(_) => {} + }); + } + + let mut desktop_renderer = + DesktopRenderer::new(vdom, sdom, config, devtools, hovered_node, proxy); + + event_loop.run_app(&mut desktop_renderer).unwrap(); + } + + pub fn new( + vdom: VirtualDom, + sdom: SafeDOM, + config: LaunchConfig<'a, State>, + devtools: Option, + hovered_node: HoveredNode, + proxy: EventLoopProxy, + ) -> Self { + DesktopRenderer { + state: WindowState::NotCreated(NotCreatedState { + sdom, + devtools, + vdom, + config, + }), + hovered_node, + event_loop_proxy: proxy, + cursor_pos: CursorPoint::default(), + modifiers_state: ModifiersState::default(), + dropped_file_path: None, + } + } + + // Send and process an event + fn send_event(&mut self, event: PlatformEvent) { + let scale_factor = self.scale_factor(); + self.state + .created_state() + .app + .send_event(event, scale_factor); + } + + /// Get the current scale factor of the Window + fn scale_factor(&self) -> f32 { + match &self.state { + WindowState::Created(CreatedState { window, .. }) => window.scale_factor() as f32, + _ => 0.0, + } + } + + /// Run the `on_setup` callback that was passed to the launch function + pub fn run_on_setup(&mut self) { + let state = self.state.created_state(); + if let Some(on_setup) = &state.window_config.on_setup { + (on_setup)(&mut state.window) + } + } + + /// Run the `on_exit` callback that was passed to the launch function + pub fn run_on_exit(&mut self) { + let state = self.state.created_state(); + if let Some(on_exit) = &state.window_config.on_exit { + (on_exit)(&mut state.window) + } + } +} + impl<'a, State: Clone> ApplicationHandler for DesktopRenderer<'a, State> { fn resumed(&mut self, event_loop: &winit::event_loop::ActiveEventLoop) { if !self.state.has_been_created() { @@ -373,99 +471,3 @@ impl Drop for DesktopRenderer<'_, T> { } } } - -impl<'a, State: Clone + 'static> DesktopRenderer<'a, State> { - /// Run the Desktop Renderer. - pub fn launch( - vdom: VirtualDom, - sdom: SafeDOM, - config: LaunchConfig, - devtools: Option, - hovered_node: HoveredNode, - ) { - let rt = tokio::runtime::Builder::new_multi_thread() - .enable_all() - .build() - .unwrap(); - - let _guard = rt.enter(); - - let event_loop = EventLoop::::with_user_event() - .build() - .expect("Failed to create event loop."); - let proxy = event_loop.create_proxy(); - - // Hotreload support for Dioxus - #[cfg(feature = "hot-reload")] - { - use std::process::exit; - let proxy = proxy.clone(); - dioxus_hot_reload::connect(move |msg| match msg { - dioxus_hot_reload::HotReloadMsg::UpdateTemplate(template) => { - let _ = proxy.send_event(EventMessage::UpdateTemplate(template)); - } - dioxus_hot_reload::HotReloadMsg::Shutdown => exit(0), - dioxus_hot_reload::HotReloadMsg::UpdateAsset(_) => {} - }); - } - - let mut desktop_renderer = - DesktopRenderer::new(vdom, sdom, config, devtools, hovered_node, proxy); - - event_loop.run_app(&mut desktop_renderer).unwrap(); - } - - pub fn new( - vdom: VirtualDom, - sdom: SafeDOM, - config: LaunchConfig<'a, State>, - devtools: Option, - hovered_node: HoveredNode, - proxy: EventLoopProxy, - ) -> Self { - DesktopRenderer { - state: WindowState::NotCreated(NotCreatedState { - sdom, - devtools, - vdom, - config, - }), - hovered_node, - event_loop_proxy: proxy, - cursor_pos: CursorPoint::default(), - modifiers_state: ModifiersState::default(), - dropped_file_path: None, - } - } - - fn send_event(&mut self, event: PlatformEvent) { - let scale_factor = self.scale_factor(); - self.state - .created_state() - .app - .send_event(event, scale_factor); - } - - fn scale_factor(&self) -> f32 { - match &self.state { - WindowState::Created(CreatedState { window, .. }) => window.scale_factor() as f32, - _ => 0.0, - } - } - - /// Run the `on_setup` callback that was passed to the launch function - pub fn run_on_setup(&mut self) { - let state = self.state.created_state(); - if let Some(on_setup) = &state.window_config.on_setup { - (on_setup)(&mut state.window) - } - } - - /// Run the `on_exit` callback that was passed to the launch function - pub fn run_on_exit(&mut self) { - let state = self.state.created_state(); - if let Some(on_exit) = &state.window_config.on_exit { - (on_exit)(&mut state.window) - } - } -} From 14ca7447721c982727ee0cb6e600339eacb98a6e Mon Sep 17 00:00:00 2001 From: marc2332 Date: Sun, 16 Jun 2024 19:44:49 +0200 Subject: [PATCH 3/3] fix: Call `on_setup` hook --- crates/renderer/src/renderer.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/renderer/src/renderer.rs b/crates/renderer/src/renderer.rs index 2986d6852..6b47ec622 100644 --- a/crates/renderer/src/renderer.rs +++ b/crates/renderer/src/renderer.rs @@ -171,7 +171,8 @@ impl<'a, State: Clone + 'static> DesktopRenderer<'a, State> { impl<'a, State: Clone> ApplicationHandler for DesktopRenderer<'a, State> { fn resumed(&mut self, event_loop: &winit::event_loop::ActiveEventLoop) { if !self.state.has_been_created() { - self.state.create(event_loop, &self.event_loop_proxy) + self.state.create(event_loop, &self.event_loop_proxy); + self.run_on_setup(); } }