1use crate::gfx::draw_centered_text;
2use crate::view::Flex::Intrinsic;
3use crate::view::{View, ViewId};
4use crate::{Action, DrawEvent, EventType, util};
5use alloc::string::ToString;
6
7fn draw_button(e: &mut DrawEvent) {
8 e.ctx.fill_rect(&e.view.bounds, &e.theme.bg);
9 e.ctx.stroke_rect(&e.view.bounds, &e.theme.fg);
10 if let Some(focused) = e.focused {
11 if focused == &e.view.name {
12 e.ctx.stroke_rect(&e.view.bounds.contract(2), &e.theme.fg);
13 }
14 }
15 draw_centered_text(
16 e.ctx,
17 &e.view.title,
18 &e.view.bounds,
19 &e.theme.bold_font,
20 &e.theme.fg,
21 );
22}
23
24pub fn make_button(name: &ViewId, title: &str) -> View {
25 View {
26 name: name.clone(),
27 title: title.to_string(),
28 h_flex: Intrinsic,
29 v_flex: Intrinsic,
30 input: Some(|e| {
31 if let EventType::Tap(_pt) = &e.event_type {
32 e.scene.set_focused(e.target);
33 return Some(Action::Generic);
34 }
35 None
36 }),
37 layout: Some(|e| {
38 if let Some(view) = e.scene.get_view_mut(&e.target) {
39 view.bounds.size = util::calc_size(e.theme.bold_font, &view.title);
40 }
41 }),
42 draw: Some(draw_button),
43 ..Default::default()
44 }
45}