1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
use crate::widgets::layout::{Column, Row};
use crate::widgets::rect::Rectangle;
use crate::widgets::text::Text;
use crate::{KinoState, WidgetId};
pub fn rect<F>(kino: &mut KinoState, id: impl Into<WidgetId>, configure: F) -> WidgetId
where
F: FnOnce(&mut Rectangle),
{
let id = id.into();
let mut rect = Rectangle::new(id);
configure(&mut rect);
kino.add_widget(Box::new(rect));
id
}
pub fn rect_container<C>(kino: &mut KinoState, rect: Rectangle, contents: C) -> WidgetId
where
C: FnOnce(&mut KinoState),
{
let id = rect.id;
kino.add_container(Box::new(rect));
contents(kino);
kino.end_container(id);
id
}
pub fn label<F>(kino: &mut KinoState, text: impl ToString, configure: F) -> WidgetId
where
F: FnOnce(&mut Text),
{
let mut text = Text::new(text);
configure(&mut text);
kino.add_widget(Box::new(text))
}
pub fn row<C>(kino: &mut KinoState, row: Row, contents: C) -> WidgetId
where
C: FnOnce(&mut KinoState),
{
let id = row.id;
kino.add_container(Box::new(row));
contents(kino);
kino.end_container(id);
id
}
pub fn column<C>(kino: &mut KinoState, column: Column, contents: C) -> WidgetId
where
C: FnOnce(&mut KinoState),
{
let id = column.id;
kino.add_container(Box::new(column));
contents(kino);
kino.end_container(id);
id
}