events: implement a first attempt at an eventing system
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user