diff --git a/src/gtfs/mod.rs b/src/gtfs/mod.rs index 4fb75e0..96855bc 100644 --- a/src/gtfs/mod.rs +++ b/src/gtfs/mod.rs @@ -7,7 +7,7 @@ use std::{ }; use crate::gtfs::{loader::load_gtfs, structs::{Arrival, Gtfs, Preferences}}; -pub fn _get_next_stops(_gtfs: &Gtfs) -> Vec { +pub fn _get_next_stops(_gtfs: &Gtfs) -> Vec> { let arrivals = Vec::::new(); return arrivals; diff --git a/src/main.rs b/src/main.rs index a8e6ed4..c977fd4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,8 @@ mod gtfs; mod renderer; -use std::{collections::HashSet}; +use std::{collections::HashSet, thread, time::Duration}; + +use crate::renderer::Screen; const SRC_FILE: &str = "/home/nahuel/Downloads/GTFS_Realtime.zip"; @@ -13,16 +15,22 @@ fn main() { }; let screen_prefs = renderer::structs::Prefs { - font_path: String::from("todo!()"), + font_path: String::from("resources/jd-lcd-rounded.ttf/jd-lcd-rounded.ttf"), screen_width: 1920, screen_height: 720, }; // Init GTFS static info println!("Loading GTFS data..."); - let _gtfs = gtfs::load(SRC_FILE, >fs_prefs); + //let _gtfs = gtfs::load(SRC_FILE, >fs_prefs); // Init screen - let _screen = renderer::init(&screen_prefs); + println!("Initializing screen..."); + let mut screen = Screen::init(&screen_prefs); + println!("Startup done."); + + screen.print(0, "foo!"); + + thread::sleep(Duration::new(10, 0)); } diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index 494b5cc..c29fa51 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -1,36 +1,57 @@ pub mod structs; -use sdl3::{pixels::Color}; -use structs::{Prefs, Screen}; -/// Initialize video, allocate buffers and load fonts -/// Based on https://github.com/vhspace/sdl3-rs/blob/master/examples/ttf-demo.rs +use sdl3::{pixels::Color, rect::Rect, render::Canvas, sys::metadata::render, ttf::Font, video::Window}; +use structs::{Prefs}; -pub fn init(prefs: &Prefs) -> &mut structs::Screen { - // Initialize the screen - let sdl_context = sdl3::init().unwrap(); - let video_subsys = sdl_context.video().unwrap(); +pub struct Screen<'a> { + canvas: Box>, + font: Box> +} - let window = video_subsys - .window("Dublin Bus", prefs.screen_width, prefs.screen_height) - .position_centered() - .borderless() - //.fullscreen() - .build().unwrap(); +impl Screen<'_> { - // Load font - let ttf_context = sdl3::ttf::init().unwrap(); - let mut font = ttf_context.load_font(&prefs.font_path, 128.0).unwrap(); + 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(); + let texture = rendered_text.as_texture(&texture_creator).unwrap(); + let _ = self.canvas.copy(&texture, + Rect::new(0, 0, rendered_text.width(), rendered_text.height()), + Rect::new(0, (line * rendered_text.height()).try_into().unwrap(), rendered_text.width(), rendered_text.height())); + self.canvas.present(); + } - // Clear screen - let mut canvas = window.into_canvas(); - canvas.set_draw_color(Color::BLACK); - canvas.clear(); - canvas.present(); - let screen = Screen { - canvas: &canvas, - font: &font, - }; - return &mut &screen; + pub fn clear(&mut self) { + self.canvas.set_draw_color(Color::BLACK); + self.canvas.clear(); + self.canvas.present(); + } + + /// Initialize video, allocate buffers and load fonts + /// Based on https://github.com/vhspace/sdl3-rs/blob/master/examples/ttf-demo.rs + pub fn init(prefs: &Prefs) -> Screen { + // Initialize the screen + let sdl_context = sdl3::init().unwrap(); + let video_subsys = sdl_context.video().unwrap(); + + let window = video_subsys + .window("Dublin Bus", prefs.screen_width, prefs.screen_height) + .position_centered() + .borderless() + //.fullscreen() + .build().unwrap(); + + // Load font + let ttf_context = sdl3::ttf::init().unwrap(); + let font = ttf_context.load_font(&prefs.font_path, 128.0).unwrap(); + + let mut screen: Screen = Screen { + canvas: Box::new(window.into_canvas()), + font: Box::new(font), + }; + + screen.clear(); + return screen; + } } \ No newline at end of file diff --git a/src/renderer/structs.rs b/src/renderer/structs.rs index dc36ac2..147fef7 100644 --- a/src/renderer/structs.rs +++ b/src/renderer/structs.rs @@ -1,13 +1,7 @@ use sdl3::{render::Canvas, ttf::Font, video::Window}; - pub struct Prefs { pub font_path: String, pub screen_width: u32, pub screen_height: u32, } - -pub struct Screen<'a> { - pub canvas: &'a Canvas, - pub font: &'a Font<'a>, -} \ No newline at end of file