pub fn margin<R, F: FnOnce(&mut UI<'_, '_>) -> R>(
ui: &mut UI<'_, '_>,
body: F,
) -> RExamples found in repository?
examples/widget_gallery.rs (lines 24-58)
22 fn ui(&mut self, ui: &mut pierro::UI) {
23 pierro::scroll_area(ui, |ui| {
24 pierro::margin(ui, |ui| {
25 pierro::label(ui, "A label");
26 pierro::v_spacing(ui, 10.0);
27
28 pierro::button(ui, "A button");
29 pierro::v_spacing(ui, 10.0);
30
31 pierro::text_edit(ui, &mut self.text_edit_text);
32 pierro::v_spacing(ui, 10.0);
33
34 pierro::checkbox_labeled(ui, "A checkbox", &mut self.checkbox_state);
35 pierro::v_spacing(ui, 10.0);
36
37 let context_menu_response = pierro::label(ui, "Context menu (right click me!)");
38 pierro::context_menu(ui, &context_menu_response, |ui| {
39 pierro::label(ui, "Inside the context menu");
40 });
41 pierro::v_spacing(ui, 10.0);
42
43 pierro::collapsing_header(ui, "A collapsing header", |ui| {
44 for i in 0..50 {
45 pierro::label(ui, i.to_string());
46 }
47 });
48 pierro::v_spacing(ui, 10.0);
49
50 pierro::dropdown(ui, self.dropdown_state.clone(), |ui| {
51 for option in ["Option A", "Option B", "Option C"] {
52 if pierro::menu_button(ui, option).mouse_clicked() {
53 self.dropdown_state = option.to_owned();
54 }
55 }
56 });
57
58 });
59 });
60 }
61
62}
63
64struct Layout {
65 axis: pierro::Axis,
66 justify: pierro::Justify,
67 align: pierro::Align
68}
69
70impl Layout {
71
72 fn new() -> Self {
73 Self {
74 axis: pierro::Axis::X,
75 justify: pierro::Justify::Center,
76 align: pierro::Align::Center
77 }
78 }
79
80 fn node(&self, ui: &mut pierro::UI, color: pierro::Color) {
81 ui.node(
82 pierro::UINodeParams::new(pierro::Size::px(100.0), pierro::Size::px(100.0))
83 .with_fill(color)
84 );
85 }
86
87 fn ui(&mut self, ui: &mut pierro::UI) {
88
89 pierro::margin(ui, |ui| {
90 pierro::dropdown_labeled(ui, "Axis: ", match self.axis {
91 pierro::Axis::X => "X",
92 pierro::Axis::Y => "Y",
93 }, |ui| {
94 if pierro::menu_button(ui, "X").mouse_clicked() {
95 self.axis = pierro::Axis::X;
96 }
97 if pierro::menu_button(ui, "Y").mouse_clicked() {
98 self.axis = pierro::Axis::Y;
99 }
100 });
101 pierro::v_spacing(ui, 5.0);
102
103 pierro::dropdown_labeled(ui, "Justify: ", match self.justify {
104 pierro::Justify::Min => "Min",
105 pierro::Justify::Center => "Center",
106 pierro::Justify::Max => "Max",
107 }, |ui| {
108 if pierro::menu_button(ui, "Min").mouse_clicked() {
109 self.justify = pierro::Justify::Min;
110 }
111 if pierro::menu_button(ui, "Center").mouse_clicked() {
112 self.justify = pierro::Justify::Center;
113 }
114 if pierro::menu_button(ui, "Max").mouse_clicked() {
115 self.justify = pierro::Justify::Max;
116 }
117 });
118 pierro::v_spacing(ui, 5.0);
119
120 pierro::dropdown_labeled(ui, "Align: ", match self.align {
121 pierro::Align::Min => "Min",
122 pierro::Align::Center => "Center",
123 pierro::Align::Max => "Max",
124 }, |ui| {
125 if pierro::menu_button(ui, "Min").mouse_clicked() {
126 self.align = pierro::Align::Min;
127 }
128 if pierro::menu_button(ui, "Center").mouse_clicked() {
129 self.align = pierro::Align::Center;
130 }
131 if pierro::menu_button(ui, "Max").mouse_clicked() {
132 self.align = pierro::Align::Max;
133 }
134 });
135 });
136
137 pierro::h_divider(ui);
138 pierro::container(ui,
139 pierro::Size::fr(1.0),
140 pierro::Size::fr(1.0),
141 pierro::Layout::new(self.axis).with_justify(self.justify).with_align(self.align),
142 |ui| {
143 self.node(ui, pierro::Color::RED);
144 self.node(ui, pierro::Color::GREEN);
145 self.node(ui, pierro::Color::BLUE);
146 });
147 }