task: rewrite event handling as a step towards event-based subscriptions

This commit is contained in:
2024-12-14 14:53:24 +01:00
parent f9a8b32d3e
commit a0d524b825
8 changed files with 319 additions and 158 deletions

View File

@@ -74,24 +74,23 @@ 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, event: &Event, _bus: &mut EventBus) {
match event {
crate::events::Event::Tick => {
self.output.blank();
fn on_property_change(&mut self, key: &'static str, value: &crate::events::Variant, _bus: &mut EventBus) {
self.output.on_event(&Event::new_property_change(key, value.clone()));
}
self.surfaces.render_to(&mut self.output, self.frame);
self.output.commit();
self.frame += 1;
self.fps_display.run(|| {
fn on_tick(&mut self, bus: &mut EventBus) {
self.output.blank();
self.surfaces.render_to(&mut self.output, self.frame);
self.output.commit();
self.frame += 1;
self.fps_display.run(|| {
self.fps.insert((self.frame - self.frame_count) as u32);
self.frame_count = self.frame;
let fps = self.fps.measurement();
bus.push(Event::new_property_change("output.fps", fps.rate() as u32));
});
},
_ => self.output.on_event(event)
}
});
}
}
}