Move renderer code into a struct (ADT)

This commit is contained in:
Nahuel Lofeudo 2026-04-21 08:08:27 +01:00
parent dc0581c8cc
commit 81c5b5a1af
2 changed files with 27 additions and 3 deletions

View File

@ -2,11 +2,22 @@ mod gtfs;
mod renderer; mod renderer;
use std::{collections::HashSet, thread, time::Duration}; use std::{collections::HashSet, thread, time::Duration};
use sdl3::event::{self, Event, EventWatchCallback};
use crate::renderer::Screen; use crate::renderer::Screen;
const SRC_FILE: &str = "/home/nahuel/Downloads/GTFS_Realtime.zip"; 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() { fn main() {
let gtfs_prefs = gtfs::structs::Preferences { let gtfs_prefs = gtfs::structs::Preferences {
@ -31,6 +42,13 @@ fn main() {
screen.print(0, "foo!"); 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();
} }

View File

@ -1,16 +1,21 @@
pub mod structs; 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}; use structs::{Prefs};
pub struct Screen<'a> { pub struct Screen<'a> {
canvas: Box<Canvas<Window>>, canvas: Box<Canvas<Window>>,
font: Box<Font<'a>> font: Box<Font<'a>>,
context: Box<Sdl>
} }
impl Screen<'_> { impl Screen<'_> {
pub fn get_context(&self) -> &Sdl {
return &self.context;
}
pub fn print(&mut self, line: u32, text: &str) { pub fn print(&mut self, line: u32, text: &str) {
let rendered_text = self.font.render(text).solid(Color::RED).unwrap(); let rendered_text = self.font.render(text).solid(Color::RED).unwrap();
let texture_creator = self.canvas.texture_creator(); let texture_creator = self.canvas.texture_creator();
@ -49,6 +54,7 @@ impl Screen<'_> {
let mut screen: Screen = Screen { let mut screen: Screen = Screen {
canvas: Box::new(window.into_canvas()), canvas: Box::new(window.into_canvas()),
font: Box::new(font), font: Box::new(font),
context: Box::new(sdl_context),
}; };
screen.clear(); screen.clear();