From 81c5b5a1af95e659649e6c26decb196d353db5dc Mon Sep 17 00:00:00 2001 From: Nahuel Lofeudo Date: Tue, 21 Apr 2026 08:08:27 +0100 Subject: [PATCH] Move renderer code into a struct (ADT) --- src/main.rs | 20 +++++++++++++++++++- src/renderer/mod.rs | 10 ++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index c977fd4..d7ac018 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,22 @@ mod gtfs; mod renderer; use std::{collections::HashSet, thread, time::Duration}; +use sdl3::event::{self, Event, EventWatchCallback}; + use crate::renderer::Screen; const SRC_FILE: &str = "/home/nahuel/Downloads/GTFS_Realtime.zip"; +struct Callback{} +impl EventWatchCallback for Callback{ + fn callback(&mut self, event: Event) { + println!("Event: {:#?}", event); + return; + } +} + + fn main() { let gtfs_prefs = gtfs::structs::Preferences { @@ -31,6 +42,13 @@ fn main() { screen.print(0, "foo!"); - thread::sleep(Duration::new(10, 0)); + // Main event loop + let mut event_subsystem = screen.get_context().event().unwrap().add_event_watch(Callback{}); + event_subsystem.activate(); + + for _ in 0..10 { + thread::sleep(Duration::new(1, 0)); + } + event_subsystem.deactivate(); } diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index c29fa51..df404f7 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -1,16 +1,21 @@ pub mod structs; -use sdl3::{pixels::Color, rect::Rect, render::Canvas, sys::metadata::render, ttf::Font, video::Window}; +use sdl3::{Sdl, pixels::Color, rect::Rect, render::Canvas, sys::metadata::render, ttf::Font, video::Window}; use structs::{Prefs}; pub struct Screen<'a> { canvas: Box>, - font: Box> + font: Box>, + context: Box } impl Screen<'_> { + pub fn get_context(&self) -> &Sdl { + return &self.context; + } + pub fn print(&mut self, line: u32, text: &str) { let rendered_text = self.font.render(text).solid(Color::RED).unwrap(); let texture_creator = self.canvas.texture_creator(); @@ -49,6 +54,7 @@ impl Screen<'_> { let mut screen: Screen = Screen { canvas: Box::new(window.into_canvas()), font: Box::new(font), + context: Box::new(sdl_context), }; screen.clear();