swoop_ui/container/
v_stack.rs

1use bevy_ecs::prelude::*;
2use bevy_ui::prelude::*;
3
4use crate::{UiBase, UiToBundle};
5
6use super::{BackgroundContainer, BackgroundStyle, BorderContainer, BorderStyle, StackContainer};
7
8pub struct VStack {
9    name: Name,
10    node: Node,
11    border: BorderStyle,
12    background: BackgroundStyle,
13}
14
15impl Default for VStack {
16    fn default() -> Self {
17        Self {
18            name: Name::new("HStack"),
19            node: Node {
20                display: Display::Flex,
21                flex_direction: FlexDirection::Column,
22                justify_content: JustifyContent::Start,
23                align_items: AlignItems::Center,
24                row_gap: Val::Px(8.0),
25                ..Default::default()
26            },
27            border: BorderStyle::default(),
28            background: BackgroundStyle::default(),
29        }
30    }
31}
32
33impl UiBase for VStack {
34    fn name_node(&mut self) -> &mut Name {
35        &mut self.name
36    }
37
38    fn node_node(&mut self) -> &mut Node {
39        &mut self.node
40    }
41}
42
43impl StackContainer for VStack {
44    fn node_node(&mut self) -> &mut Node {
45        &mut self.node
46    }
47}
48
49impl BackgroundContainer for VStack {
50    fn background_node(&mut self) -> &mut BackgroundStyle {
51        &mut self.background
52    }
53}
54
55impl BorderContainer for VStack {
56    fn border_node(&mut self) -> &mut BorderStyle {
57        &mut self.border
58    }
59}
60
61impl UiToBundle for VStack {
62    fn pack(self) -> impl Bundle {
63        let name = self.name;
64        let border = self.border.pack();
65        let background = self.background.pack();
66        (name, self.node, border, background)
67    }
68}