From f6ec4492f12d544fad8ecc7a79b43e538841d5e1 Mon Sep 17 00:00:00 2001 From: Avii Date: Sat, 14 Feb 2026 20:13:16 +0100 Subject: [PATCH] I can haz Label? --- g13-os/src/app/mod.rs | 4 +- g13-os/src/app/pages/mod.rs | 4 ++ g13-os/src/app/pages/start.rs | 74 +++++++++++++++++++++------------ g13-os/src/app/widgets/label.rs | 73 ++++++++++++++++++++++++++++++++ g13-os/src/app/widgets/mod.rs | 10 +++-- g13-os/src/main.rs | 2 +- 6 files changed, 133 insertions(+), 34 deletions(-) create mode 100644 g13-os/src/app/widgets/label.rs diff --git a/g13-os/src/app/mod.rs b/g13-os/src/app/mod.rs index 31628c2..5a19305 100644 --- a/g13-os/src/app/mod.rs +++ b/g13-os/src/app/mod.rs @@ -7,7 +7,7 @@ use g13_driver::{G13, G13Event}; use crate::app::pages::StartPage; -use super::app::widgets::Page; +use super::app::pages::Page; pub struct App { pages: VecDeque>>, @@ -17,7 +17,7 @@ impl App { pub fn new() -> Self { let mut pages: VecDeque>> = VecDeque::new(); - pages.push_back(Box::new(StartPage::default())); + pages.push_back(Box::new(StartPage::new())); Self { pages } } diff --git a/g13-os/src/app/pages/mod.rs b/g13-os/src/app/pages/mod.rs index d2a8750..b6363f4 100644 --- a/g13-os/src/app/pages/mod.rs +++ b/g13-os/src/app/pages/mod.rs @@ -1,3 +1,7 @@ +use crate::app::widgets::Widget; + mod start; +pub trait Page: Widget {} + pub use start::*; diff --git a/g13-os/src/app/pages/start.rs b/g13-os/src/app/pages/start.rs index 7712e2c..d57f309 100644 --- a/g13-os/src/app/pages/start.rs +++ b/g13-os/src/app/pages/start.rs @@ -1,25 +1,34 @@ use embedded_graphics::{ - Drawable, - mono_font::{MonoTextStyle, ascii::FONT_6X10}, + mono_font::ascii::FONT_6X10, pixelcolor::BinaryColor, prelude::Point, - text::{Alignment, Baseline, Text, TextStyle, TextStyleBuilder}, + text::{Alignment, Baseline}, }; use g13_driver::{G13, G13Event, Vec2}; -use crate::app::widgets::{Page, Widget}; +use crate::app::widgets::{Widget, label::Label}; -const CHARACTER_STYLE: MonoTextStyle<'static, BinaryColor> = - MonoTextStyle::new(&FONT_6X10, BinaryColor::On); - -const TEXT_STYLE: TextStyle = TextStyleBuilder::new() - .baseline(Baseline::Top) - .alignment(Alignment::Left) - .build(); - -#[derive(Default)] pub struct StartPage { joy: Vec2, + children: Vec>>, +} + +impl StartPage { + pub fn new() -> Self { + let children: Vec>> = vec![Box::new(Label::new( + "Hello World!", + &FONT_6X10, + BinaryColor::On, + Point::new(10, 0), + Alignment::Left, + Baseline::Top, + ))]; + + Self { + joy: Vec2::default(), + children, + } + } } impl Widget for StartPage { @@ -30,24 +39,35 @@ impl Widget for StartPage { self.joy.x = x; self.joy.y = y; } - } - fn children(&self) -> Vec>> { - // .. idk if we need this yet - Vec::new() + // This is stupid. + // Need a way to keep some reference to widgets to manipulate them later + // preferably as their original type so we don't need this downcast bs + self.children[0] + .as_any_mut() + .downcast_mut::