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
use crate::prelude::*;

/// A view which arranges its children into a vertical stack (column).
///
///
pub struct VStack {}

impl VStack {
    pub fn new<F>(cx: &mut Context, content: F) -> Handle<Self>
    where
        F: FnOnce(&mut Context),
    {
        Self {}
            .build(cx, |cx| {
                (content)(cx);
            })
            .role(Role::GenericContainer)
    }
}

impl View for VStack {
    fn element(&self) -> Option<&'static str> {
        Some("vstack")
    }
}

/// A view which arranges its children into a horizontal stack (row).
pub struct HStack {}

impl HStack {
    pub fn new<F>(cx: &mut Context, content: F) -> Handle<Self>
    where
        F: FnOnce(&mut Context),
    {
        Self {}
            .build(cx, |cx| {
                (content)(cx);
            })
            .layout_type(LayoutType::Row)
            .role(Role::GenericContainer)
    }
}

impl View for HStack {
    fn element(&self) -> Option<&'static str> {
        Some("hstack")
    }
}

/// A view which overlays its children on top of each other.
pub struct ZStack {}

impl ZStack {
    pub fn new<F>(cx: &mut Context, content: F) -> Handle<Self>
    where
        F: FnOnce(&mut Context),
    {
        Self {}.build(cx, |cx| {
            (content)(cx);
        })
    }
}

impl View for ZStack {
    fn element(&self) -> Option<&'static str> {
        Some("zstack")
    }
}