events: implement a first attempt at an eventing system

This commit is contained in:
Torrie Fischer
2024-12-13 00:56:50 +01:00
parent 9a749c40a1
commit d7f312ffe4
8 changed files with 236 additions and 30 deletions

View File

@@ -1,5 +1,6 @@
use rgb::Rgb;
use crate::events::{Event, EventBus};
use crate::geometry::*;
use crate::lib8::interpolate::Fract8Ops;
use crate::power::AsMilliwatts;
@@ -42,6 +43,7 @@ pub trait Surface: Send + Sync {
}
pub trait Output: Sample + Send {
fn on_event(&mut self, event: &Event);
fn blank(&mut self);
fn commit(&mut self);
}
@@ -70,17 +72,22 @@ impl<T: Output, S: Surfaces> Renderer<T, S> {
impl<T: Output, S: Surfaces> Task for Renderer<T, S> {
fn name(&self) -> &'static str { "Renderer" }
fn tick(&mut self) {
self.output.blank();
fn tick(&mut self, event: &Event, _bus: &mut EventBus) {
match event {
crate::events::Event::Tick => {
self.output.blank();
self.surfaces.render_to(&mut self.output, self.frame);
self.output.commit();
self.fps.insert(1);
self.frame += 1;
self.fps_display.run(|| {
log::info!("FPS: {}", self.fps.measurement());
});
self.surfaces.render_to(&mut self.output, self.frame);
self.output.commit();
self.fps.insert(1);
self.frame += 1;
self.fps_display.run(|| {
log::info!("FPS: {}", self.fps.measurement());
});
},
_ => self.output.on_event(event)
}
}
}