diff --git a/src/main.rs b/src/main.rs index b43b026..aa3a337 100644 --- a/src/main.rs +++ b/src/main.rs @@ -50,7 +50,8 @@ fn run( .expect("Cannot add font"), }; - let mut beo = ui::BeoUi::new(get_beo_apps()); + let apps = get_beo_apps(); + let mut beo = ui::BeoUi::new(apps); let start = Instant::now(); let mut prevt = start; diff --git a/src/ui.rs b/src/ui.rs index 04621c7..56a2900 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -7,6 +7,7 @@ use crate::roundy_math; pub struct BeoUi { pub beo_apps: BeoApps, + pub current_app_id: Option, pub laser_pct: f32, } @@ -24,6 +25,7 @@ impl BeoUi { pub fn new(apps: BeoApps) -> BeoUi { BeoUi { beo_apps: apps, + current_app_id: None, laser_pct: 0.0, } } @@ -32,7 +34,7 @@ impl BeoUi { match event { Beo5Event::LaserPosition(pct) => { self.laser_pct = pct; - println!("Laser moved to {}%", pct * 100.); + self.choose_app_from_laser_pct(); } _ => { // TODO: pass event to current app @@ -42,9 +44,7 @@ impl BeoUi { pub fn draw(&self, canvas: &mut Canvas, fonts: &Fonts) { self.draw_main_menu(canvas, fonts); - if let Some(selected_app_id) = self.lasered_application_id() { - let selected_app = self.beo_apps.apps.get(selected_app_id).unwrap(); - + if let Some(selected_app) = self.current_app() { let mut paint_title = Paint::color(Color::hex("FFFFFF")); paint_title.set_font(&[fonts.bold]); paint_title.set_text_baseline(Baseline::Top); @@ -59,10 +59,11 @@ impl BeoUi { } } - fn lasered_application_id(&self) -> Option { + fn choose_app_from_laser_pct(&mut self) { let app_count = self.beo_apps.apps.len(); if app_count == 0 { - return None; + self.current_app_id = None; + return; } let dx = 100.0 / (app_count as f32 * 2.); @@ -72,10 +73,16 @@ impl BeoUi { let evt_app_pos = dx * (i * 2 + 1) as f32 * CANVAS_HEIGHT / 100.0; let delta = (laser_y - evt_app_pos).abs(); if delta < LASER_EPS_MATCH { - return Some(i); + self.current_app_id = Some(i); + return; + //Some(&self.beo_apps.apps[i]); } } - None + self.current_app_id = None; + } + + fn current_app(&self) -> Option<&Box> { + self.current_app_id.map(|id| &self.beo_apps.apps[id]) } fn draw_main_menu(&self, canvas: &mut Canvas, fonts: &Fonts) { @@ -107,13 +114,16 @@ impl BeoUi { let mut paint_selected = Paint::color(Color::hex("D7612E")); paint_selected.set_font(&[fonts.bold]); paint_selected.set_text_baseline(Baseline::Top); - for i in 0..apps.len() { - if self.lasered_application_id() == Some(i) { - let _ = - canvas.fill_text(pts[i].x, pts[i].y, apps[i].base().name(), &paint_selected); - } else { - let _ = canvas.fill_text(pts[i].x, pts[i].y, apps[i].base().name(), &paint_normal); - } + + let mut i = 0; + for app in apps { + //if self.current_app == Some(app) { + // let _ = + // canvas.fill_text(pts[i].x, pts[i].y, apps[i].base().name(), &paint_selected); + //} else { + let _ = canvas.fill_text(pts[i].x, pts[i].y, app.base().name(), &paint_normal); + // } + i += 1; } // draw the laser