#![deny(warnings)]
use std::time::Duration;
use speedy2d::color::Color;
use speedy2d::dimen::UVec2;
use speedy2d::window::{
UserEventSender,
WindowCreationOptions,
WindowHandler,
WindowHelper,
WindowSize,
WindowStartupInfo
};
use speedy2d::{Graphics2D, Window};
fn main()
{
simple_logger::SimpleLogger::new().init().unwrap();
let window: Window<String> = Window::new_with_user_events(
"Speedy2D: User Events Example",
WindowCreationOptions::new_windowed(
WindowSize::PhysicalPixels(UVec2::new(640, 480)),
None
)
)
.unwrap();
let user_event_sender = window.create_user_event_sender();
window.run_loop(MyWindowHandler { user_event_sender })
}
struct MyWindowHandler
{
user_event_sender: UserEventSender<String>
}
impl WindowHandler<String> for MyWindowHandler
{
fn on_start(&mut self, _helper: &mut WindowHelper<String>, _info: WindowStartupInfo)
{
let user_event_sender = self.user_event_sender.clone();
std::thread::spawn(move || {
loop {
user_event_sender
.send_event("Message from thread".to_string())
.unwrap();
std::thread::sleep(Duration::from_millis(300));
}
});
}
fn on_user_event(&mut self, _helper: &mut WindowHelper<String>, user_event: String)
{
log::info!("Received user event: '{}'", user_event);
}
fn on_draw(&mut self, _helper: &mut WindowHelper<String>, graphics: &mut Graphics2D)
{
graphics.clear_screen(Color::from_rgb(0.8, 0.9, 1.0));
self.user_event_sender
.send_event("Message from on_draw".to_string())
.unwrap();
}
}