From 541e0e646f813602f0e89621a17e5bcbde20d2fc Mon Sep 17 00:00:00 2001 From: Naman Agrawal Date: Thu, 28 Aug 2025 17:30:43 +0530 Subject: [PATCH] feat: add support to trigger refresh through external events. - Allow users to trigger a dispatch by using `Res`. --- examples/external_event.rs | 136 +++++++++++++++++++++++++++++++++++++ src/lib.rs | 50 +++++++++++--- 2 files changed, 178 insertions(+), 8 deletions(-) create mode 100644 examples/external_event.rs diff --git a/examples/external_event.rs b/examples/external_event.rs new file mode 100644 index 0000000..8c71481 --- /dev/null +++ b/examples/external_event.rs @@ -0,0 +1,136 @@ +use std::time::Duration; + +use bevy::{color::palettes::basic::*, prelude::*, window::WindowResolution, winit::WinitPlugin}; +use bevy_wayland::{prelude::*, ExternalEventDispatcher}; + +const NORMAL_BUTTON: Color = Color::srgb(0.15, 0.15, 0.15); +const HOVERED_BUTTON: Color = Color::srgb(0.25, 0.25, 0.25); +const PRESSED_BUTTON: Color = Color::srgb(0.35, 0.75, 0.35); + +fn main() { + App::new() + .add_plugins(( + DefaultPlugins + .build() + .disable::() + .set(WindowPlugin { + primary_window: Some(Window { + resolution: WindowResolution::new(400.0, 400.0), + present_mode: bevy::window::PresentMode::AutoVsync, + ..Default::default() + }), + ..Default::default() + }), + WaylandPlugin, + )) + .add_systems(Startup, (setup, external_tick_sender)) + .add_systems(Update, (button_system, exit_on_esc)) + .run(); +} + +fn external_tick_sender(external_event_dispatcher: Res) { + let displatcher = external_event_dispatcher.clone(); + let mut count = 5; + std::thread::spawn(move || loop { + println!("Spawned Thread"); + std::thread::sleep(Duration::from_secs(1)); + displatcher.dispatch().unwrap(); + count -= 1; + if count < 0 { + return; + } + }); +} + +#[allow(clippy::type_complexity)] +fn button_system( + mut interaction_query: Query< + ( + &Interaction, + &mut BackgroundColor, + &mut BorderColor, + &Children, + ), + (Changed, With