rework app logic
Signed-off-by: Frank Villaro-Dixon <frank@villaro-dixon.eu>
This commit is contained in:
parent
ff510a8692
commit
fa132e2230
2 changed files with 27 additions and 16 deletions
|
@ -50,7 +50,8 @@ fn run(
|
||||||
.expect("Cannot add font"),
|
.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 start = Instant::now();
|
||||||
let mut prevt = start;
|
let mut prevt = start;
|
||||||
|
|
40
src/ui.rs
40
src/ui.rs
|
@ -7,6 +7,7 @@ use crate::roundy_math;
|
||||||
|
|
||||||
pub struct BeoUi {
|
pub struct BeoUi {
|
||||||
pub beo_apps: BeoApps,
|
pub beo_apps: BeoApps,
|
||||||
|
pub current_app_id: Option<usize>,
|
||||||
pub laser_pct: f32,
|
pub laser_pct: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +25,7 @@ impl BeoUi {
|
||||||
pub fn new(apps: BeoApps) -> BeoUi {
|
pub fn new(apps: BeoApps) -> BeoUi {
|
||||||
BeoUi {
|
BeoUi {
|
||||||
beo_apps: apps,
|
beo_apps: apps,
|
||||||
|
current_app_id: None,
|
||||||
laser_pct: 0.0,
|
laser_pct: 0.0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +34,7 @@ impl BeoUi {
|
||||||
match event {
|
match event {
|
||||||
Beo5Event::LaserPosition(pct) => {
|
Beo5Event::LaserPosition(pct) => {
|
||||||
self.laser_pct = pct;
|
self.laser_pct = pct;
|
||||||
println!("Laser moved to {}%", pct * 100.);
|
self.choose_app_from_laser_pct();
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
// TODO: pass event to current app
|
// TODO: pass event to current app
|
||||||
|
@ -42,9 +44,7 @@ impl BeoUi {
|
||||||
|
|
||||||
pub fn draw<T: Renderer>(&self, canvas: &mut Canvas<T>, fonts: &Fonts) {
|
pub fn draw<T: Renderer>(&self, canvas: &mut Canvas<T>, fonts: &Fonts) {
|
||||||
self.draw_main_menu(canvas, fonts);
|
self.draw_main_menu(canvas, fonts);
|
||||||
if let Some(selected_app_id) = self.lasered_application_id() {
|
if let Some(selected_app) = self.current_app() {
|
||||||
let selected_app = self.beo_apps.apps.get(selected_app_id).unwrap();
|
|
||||||
|
|
||||||
let mut paint_title = Paint::color(Color::hex("FFFFFF"));
|
let mut paint_title = Paint::color(Color::hex("FFFFFF"));
|
||||||
paint_title.set_font(&[fonts.bold]);
|
paint_title.set_font(&[fonts.bold]);
|
||||||
paint_title.set_text_baseline(Baseline::Top);
|
paint_title.set_text_baseline(Baseline::Top);
|
||||||
|
@ -59,10 +59,11 @@ impl BeoUi {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn lasered_application_id(&self) -> Option<usize> {
|
fn choose_app_from_laser_pct(&mut self) {
|
||||||
let app_count = self.beo_apps.apps.len();
|
let app_count = self.beo_apps.apps.len();
|
||||||
if app_count == 0 {
|
if app_count == 0 {
|
||||||
return None;
|
self.current_app_id = None;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let dx = 100.0 / (app_count as f32 * 2.);
|
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 evt_app_pos = dx * (i * 2 + 1) as f32 * CANVAS_HEIGHT / 100.0;
|
||||||
let delta = (laser_y - evt_app_pos).abs();
|
let delta = (laser_y - evt_app_pos).abs();
|
||||||
if delta < LASER_EPS_MATCH {
|
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<dyn App>> {
|
||||||
|
self.current_app_id.map(|id| &self.beo_apps.apps[id])
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw_main_menu<T: Renderer>(&self, canvas: &mut Canvas<T>, fonts: &Fonts) {
|
fn draw_main_menu<T: Renderer>(&self, canvas: &mut Canvas<T>, fonts: &Fonts) {
|
||||||
|
@ -107,13 +114,16 @@ impl BeoUi {
|
||||||
let mut paint_selected = Paint::color(Color::hex("D7612E"));
|
let mut paint_selected = Paint::color(Color::hex("D7612E"));
|
||||||
paint_selected.set_font(&[fonts.bold]);
|
paint_selected.set_font(&[fonts.bold]);
|
||||||
paint_selected.set_text_baseline(Baseline::Top);
|
paint_selected.set_text_baseline(Baseline::Top);
|
||||||
for i in 0..apps.len() {
|
|
||||||
if self.lasered_application_id() == Some(i) {
|
let mut i = 0;
|
||||||
let _ =
|
for app in apps {
|
||||||
canvas.fill_text(pts[i].x, pts[i].y, apps[i].base().name(), &paint_selected);
|
//if self.current_app == Some(app) {
|
||||||
} else {
|
// let _ =
|
||||||
let _ = canvas.fill_text(pts[i].x, pts[i].y, apps[i].base().name(), &paint_normal);
|
// 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
|
// draw the laser
|
||||||
|
|
Loading…
Reference in a new issue