main menu first simple implementation of display and state

This commit is contained in:
2026-08-14 20:20:53 +00:00
parent 6b8d076b3c
commit f38181d98a
3 changed files with 60 additions and 10 deletions
+51 -2
View File
@@ -1,4 +1,14 @@
use crate::navigation::inputs::Inputs;
use crate::{display::primary_lcd::PrimaryLcdDisplay, navigation::inputs::Inputs};
use alloc::format;
use embedded_graphics::mono_font::MonoTextStyle;
use embedded_graphics::mono_font::ascii::FONT_6X10;
use embedded_graphics::pixelcolor::Rgb565;
use embedded_graphics::prelude::Point;
use embedded_graphics::prelude::RgbColor;
use embedded_graphics::text::Text;
use embedded_graphics::{Drawable, geometry::Size, primitives::Rectangle};
use embedded_graphics_core::draw_target::DrawTarget;
pub const MAX_SELECTED: i8 = 3;
@@ -7,5 +17,44 @@ pub struct MainMenu {
}
impl MainMenu {
pub async fn display(self: &Self) {}
pub async fn display(&self, display: &mut PrimaryLcdDisplay<'static>) {
let style = MonoTextStyle::new(&FONT_6X10, Rgb565::WHITE);
let selected_style = MonoTextStyle::new(&FONT_6X10, Rgb565::BLUE);
Text::new(
&format!("Last card"),
Point::new(20, 240),
if self.selected == 0 {
selected_style
} else {
style
},
)
.draw(display)
.unwrap();
Text::new(
&format!("Journal"),
Point::new(20, 250),
if self.selected == 1 {
selected_style
} else {
style
},
)
.draw(display)
.unwrap();
Text::new(
&format!("Settings"),
Point::new(20, 260),
if self.selected == 1 {
selected_style
} else {
style
},
)
.draw(display)
.unwrap();
}
}
+3 -3
View File
@@ -1,11 +1,11 @@
use crate::navigation::inputs::Inputs;
use crate::navigation::main_menu::{MAX_SELECTED, MainMenu};
use crate::{display::primary_lcd::PrimaryLcdDisplay, navigation::inputs::Inputs};
use embassy_futures::select::Either6;
use embassy_futures::select::select6;
#[embassy_executor::task]
pub async fn run(mut inputs: Inputs) {
pub async fn run(mut inputs: Inputs, display: &'static mut PrimaryLcdDisplay<'static>) {
let mut state = MainMenu { selected: 0 };
loop {
@@ -30,6 +30,6 @@ pub async fn run(mut inputs: Inputs) {
state.selected = value;
state.display().await
state.display(display).await
}
}