dynamic text and styling,

This commit is contained in:
2024-12-14 14:17:08 +01:00
parent b4c4e32aba
commit 2106283364
6 changed files with 146 additions and 66 deletions
+26 -8
View File
@@ -12,17 +12,12 @@ use osui_element::{elem_fn, element};
#[element]
#[elem_fn]
#[derive(Default, Debug)]
pub struct Text {
pub on_event: Handler<Text<'a>>,
}
pub struct Text {}
impl ElementWidget for Text<'_> {
fn render(&self, writer: &mut crate::Writer) {
writer.write(&self.children.get_text());
}
fn event(&mut self, event: Event, document: &Document) {
call!(self.on_event(event, document));
}
}
#[element]
@@ -49,8 +44,31 @@ impl ElementWidget for Div<'_> {
self.set_styling(&styling);
}
}
if let Some(child) = self.children.get_child() {
child.event(event, document);
if let (Some((child, i)), l) = self.children.get_child_idx() {
match event {
Event::Key(k) => match k.code {
KeyCode::Tab => {
child.event(Event::FocusLost, document);
if *i < l - 1 {
*i += 1;
} else {
*i = 0;
}
child.event(Event::FocusGained, document);
}
KeyCode::BackTab => {
child.event(Event::FocusLost, document);
if *i > 0 {
*i -= 1;
} else {
*i = l - 1;
}
child.event(Event::FocusGained, document);
}
_ => child.event(event, document),
},
_ => child.event(event, document),
}
}
}
}