Skip to main content

demo/
demo.rs

1// SPDX-License-Identifier: MIT
2//! Minimal rlvgl-ui style demo.
3//!
4//! Builds a style using tokens from a Material-like theme.
5
6#[cfg(feature = "view")]
7use rlvgl_ui::view;
8use rlvgl_ui::{
9    Alert, Badge, Button, Checkbox, Drawer, Heading, Icon, IconButton, Input, Modal, OnClick,
10    Radio, StyleBuilder, Switch, Tag, Text, Textarea, Theme, Toast, VStack,
11};
12
13fn main() {
14    let theme = Theme::material_light();
15    let style = StyleBuilder::new()
16        .bg(theme.tokens.colors.primary)
17        .radius(theme.tokens.radii.md)
18        .build();
19
20    let layout = {
21        #[cfg(feature = "view")]
22        {
23            view! { VStack::new(90)
24            .child(20, |rect| Heading::new("Demo", rect))
25            .child(20, |rect| Text::new("Hello", rect))
26            .child(30, |rect| {
27                Button::new("Tap", rect)
28                    .icon("save")
29                    .on_click(|_| println!("clicked"))
30            })
31            .child(30, |rect| {
32                IconButton::new("edit", rect)
33                    .on_click(|_| println!("edit"))
34            })
35            .child(20, |rect| {
36                Checkbox::new("Accept", rect).on_change(|v| println!("checkbox: {v}"))
37            })
38            .child(20, |rect| {
39                Switch::new(rect).on_change(|v| println!("switch: {v}"))
40            })
41            .child(20, |rect| {
42                Radio::new("Option", rect).on_change(|v| println!("radio: {v}"))
43            })
44            .child(20, |rect| { Badge::new("NEW", rect) })
45            .child(20, |rect| {
46                Tag::new("rust", rect).on_remove(|| println!("tag removed"))
47            })
48            .child(30, |rect| { Alert::new("Saved", rect) })
49            .child(20, |rect| {
50                Input::new("Name", rect).on_change(|v| println!("input: {v}"))
51            })
52            .child(40, |rect| {
53                Textarea::new("Multiline", rect).on_change(|v| println!("textarea: {v}"))
54            })
55            .child(30, |rect| Modal::new("Modal", rect))
56            .child(30, |rect| Drawer::new("Menu", rect))
57            .child(30, |rect| Toast::new("Saved", rect)) }
58        }
59        #[cfg(not(feature = "view"))]
60        {
61            VStack::new(90)
62                .child(20, |rect| Heading::new("Demo", rect))
63                .child(20, |rect| Text::new("Hello", rect))
64                .child(30, |rect| {
65                    Button::new("Tap", rect)
66                        .icon("save")
67                        .on_click(|_| println!("clicked"))
68                })
69                .child(30, |rect| {
70                    IconButton::new("edit", rect).on_click(|_| println!("edit"))
71                })
72                .child(20, |rect| {
73                    Checkbox::new("Accept", rect).on_change(|v| println!("checkbox: {v}"))
74                })
75                .child(20, |rect| {
76                    Switch::new(rect).on_change(|v| println!("switch: {v}"))
77                })
78                .child(20, |rect| {
79                    Radio::new("Option", rect).on_change(|v| println!("radio: {v}"))
80                })
81                .child(20, |rect| Badge::new("NEW", rect))
82                .child(20, |rect| {
83                    Tag::new("rust", rect).on_remove(|| println!("tag removed"))
84                })
85                .child(30, |rect| Alert::new("Saved", rect))
86                .child(20, |rect| {
87                    Input::new("Name", rect).on_change(|v| println!("input: {v}"))
88                })
89                .child(40, |rect| {
90                    Textarea::new("Multiline", rect).on_change(|v| println!("textarea: {v}"))
91                })
92                .child(30, |rect| Modal::new("Modal", rect))
93                .child(30, |rect| Drawer::new("Menu", rect))
94                .child(30, |rect| Toast::new("Saved", rect))
95        }
96    };
97
98    let _ = (style, layout);
99}