embedded_ui/
helpers.rs

1use core::fmt::Display;
2
3use crate::{
4    el::El,
5    event::Event,
6    kit::{
7        button::{Button, ButtonStyler},
8        checkbox::{Checkbox, CheckboxStyler},
9        divider::Divider,
10        knob::{Knob, KnobStyler, KnobValue},
11        select::{Select, SelectStyler},
12        slider::{Slider, SliderPosition, SliderStyler},
13        text::Text,
14    },
15    render::Renderer,
16    value::Value,
17};
18
19pub fn button<'a, Message: Clone, R: Renderer, E: Event, S: ButtonStyler<R::Color>>(
20    content: impl Into<El<'a, Message, R, E, S>>,
21) -> Button<'a, Message, R, E, S> {
22    Button::new(content)
23}
24
25pub fn text<'a, T: Display, R: Renderer>(content: impl Into<Text<'a, T, R>>) -> Text<'a, T, R> {
26    content.into()
27}
28
29pub fn h_div<R: Renderer>() -> Divider<R> {
30    Divider::horizontal()
31}
32
33pub fn v_div<R: Renderer>() -> Divider<R> {
34    Divider::vertical()
35}
36
37#[macro_export]
38macro_rules! col {
39    ($($el: expr),* $(,)?) => [
40        $crate::kit::linear::Column::new([$($crate::el::El::from($el)),*])
41    ];
42}
43
44pub use col;
45
46#[macro_export]
47macro_rules! row {
48    ($($el: expr),* $(,)?) => [
49        $crate::kit::linear::Row::new([$($crate::el::El::from($el)),*])
50    ];
51}
52
53pub use row;
54
55pub fn checkbox<'a, Message, R: Renderer, S: CheckboxStyler<R::Color>>(
56    on_change: impl (Fn(bool) -> Message) + 'a,
57) -> Checkbox<'a, Message, R, S> {
58    Checkbox::new(on_change)
59}
60
61pub fn select<'a, Message: Clone, R: Renderer, E: Event, S: SelectStyler<R::Color>>(
62    options: impl IntoIterator<Item = impl Into<El<'a, Message, R, E, S>>>,
63) -> Select<'a, Message, R, E, S> {
64    Select::new(options.into_iter().map(Into::into).collect())
65}
66
67pub fn slider_v<'a, Message: Clone, R: Renderer, S: SliderStyler<R::Color>>(
68    on_change: impl (Fn(SliderPosition) -> Message) + 'a,
69) -> Slider<'a, Message, R, S> {
70    Slider::new(crate::align::Axis::Y, on_change)
71}
72
73pub fn slider_h<'a, Message: Clone, R: Renderer, S: SliderStyler<R::Color>>(
74    on_change: impl (Fn(SliderPosition) -> Message) + 'a,
75) -> Slider<'a, Message, R, S> {
76    Slider::new(crate::align::Axis::X, on_change)
77}
78
79// pub fn knob<'a, Message: Clone, R: Renderer, E: Event, S: KnobStyler<R::Color>>(
80//     on_change: impl (Fn(u8) -> Message) + 'a,
81// ) -> Knob<'a, Message, R, E, S> {
82//     Knob::new(on_change)
83// }
84
85pub fn knob<'a, Message: Clone, R: Renderer, E: Event, S: KnobStyler<R::Color>>(
86    value: impl Into<Value<KnobValue>>,
87) -> Knob<'a, Message, R, E, S> {
88    Knob::new(value.into())
89}