ui_padding/
ui_padding.rs

1use glam::dvec2;
2use vert::{
3    elements::{Color, Transform},
4    modules::{
5        batteries::GraphicsSettingsController,
6        ui::{Align, Board, BoardInput, Len, MainAlign, Padding},
7        DefaultDependencies, DefaultModules, Schedule,
8    },
9    utils::Timing,
10    AppBuilder, Module,
11};
12
13fn main() {
14    let mut app = AppBuilder::new();
15    app.add_plugin(DefaultModules);
16    app.add::<GraphicsSettingsController>();
17    app.add::<MyApp>();
18    app.run().unwrap();
19}
20
21struct MyApp {
22    deps: DefaultDependencies,
23    ui: Board,
24}
25
26impl Module for MyApp {
27    type Config = ();
28
29    type Dependencies = DefaultDependencies;
30
31    fn new(_config: Self::Config, mut deps: Self::Dependencies) -> anyhow::Result<Self> {
32        deps.bloom.settings_mut().activated = false;
33
34        Ok(MyApp {
35            deps,
36            ui: Board::new(dvec2(800.0, 800.0)),
37        })
38    }
39
40    fn intialize(handle: vert::Handle<Self>) -> anyhow::Result<()> {
41        let scheduler = handle.deps.scheduler.get_mut();
42        scheduler.register(handle, Schedule::Update, Timing::DEFAULT, Self::update);
43
44        Ok(())
45    }
46}
47
48impl MyApp {
49    fn update(&mut self) {
50        self.deps.gizmos.draw_xyz();
51        self.deps
52            .color_mesh
53            .draw_cubes(&[Transform::new(1.0, 1.0, 1.0)], None);
54        self.ui.start_frame(
55            BoardInput::from_input_module(&self.deps.input),
56            self.deps.ctx.size_dvec2(),
57        );
58
59        let mut parent = self.ui.add_div("Parent", None);
60        parent.width(Len::PARENT);
61        parent.height(Len::PARENT);
62        parent.main_align = MainAlign::Center;
63        parent.cross_align = Align::Center;
64        parent.color = Color::RED;
65        let parent = Some(parent.id);
66
67        let mut rect = self.ui.add_div("rect", parent);
68        rect.width(Len::px(400.0));
69        rect.height(Len::px(400.0));
70        rect.padding = Padding::new()
71            .left(Len::px(50.0))
72            .top(Len::px(50.0))
73            .right(Len::parent(0.5));
74        rect.color = Color::BLACK;
75        rect.main_align = MainAlign::End;
76        let rect = Some(rect.id);
77
78        let mut inner = self.ui.add_div("inner", rect);
79        inner.width(Len::PARENT);
80        inner.height(Len::px(200.0));
81        inner.color = Color::WHITE;
82
83        self.ui.end_frame(&mut self.deps.ui.fonts);
84        self.deps.ui.ui_renderer.draw_ui_board(&self.ui);
85    }
86}