pub struct Button { /* private fields */ }Expand description
Clickable button widget.
Implementations§
Source§impl Button
impl Button
Sourcepub fn new(text: impl Into<String>, bounds: Rect) -> Button
pub fn new(text: impl Into<String>, bounds: Rect) -> Button
Create a new button with the provided label text.
Examples found in repository?
examples/demo.rs (line 178)
21fn main() {
22 let theme = Theme::material_light();
23 let style = StyleBuilder::new()
24 .bg(theme.tokens.colors.primary)
25 .radius(theme.tokens.radii.md)
26 .build();
27
28 let new_components = (
29 Progress::new(theme.control_rect(0, 0, 90, ComponentSize::Sm), 0, 100)
30 .with_value(64)
31 .themed(
32 &theme,
33 ColorScheme::Primary,
34 Variant::Subtle,
35 ComponentSize::Md,
36 )
37 .opacity(220),
38 Select::new(theme.control_rect(0, 10, 90, ComponentSize::Sm).height(64))
39 .with_options(&["One", "Two", "Three"])
40 .with_selected_index(1)
41 .themed(
42 &theme,
43 ColorScheme::Info,
44 Variant::Outline,
45 ComponentSize::Sm,
46 )
47 .on_change(|idx, text| println!("select: {idx} {text}")),
48 Tabs::new(rect(0, 80, 120, 80), TabBarPos::Top)
49 .tab("Main")
50 .tab("Settings")
51 .themed(
52 &theme,
53 ColorScheme::Primary,
54 Variant::Solid,
55 ComponentSize::Md,
56 ),
57 ButtonMatrix::new(
58 theme
59 .control_rect(0, 170, 120, ComponentSize::Md)
60 .height(48),
61 )
62 .with_map(&["A", "B", "\n", "C", "D"])
63 .themed(
64 &theme,
65 ColorScheme::Neutral,
66 Variant::Outline,
67 ComponentSize::Md,
68 )
69 .on_activate(|id, text| println!("button matrix: {:?} {text}", id)),
70 Bar::new(theme.control_rect(0, 224, 90, ComponentSize::Xs), 0, 100)
71 .with_value(32)
72 .with_mode(BarMode::Normal)
73 .themed(
74 &theme,
75 ColorScheme::Success,
76 Variant::Subtle,
77 ComponentSize::Sm,
78 ),
79 Led::new(
80 theme
81 .origin_control_rect(12, ComponentSize::Xs)
82 .at(0, 240)
83 .size(12, 12),
84 )
85 .themed(
86 &theme,
87 ColorScheme::Success,
88 Variant::Solid,
89 ComponentSize::Xs,
90 )
91 .brightness(180),
92 Spinner::new(theme.origin_control_rect(24, ComponentSize::Md).at(20, 236))
93 .animation(30, 100)
94 .themed(
95 &theme,
96 ColorScheme::Primary,
97 Variant::Ghost,
98 ComponentSize::Md,
99 ),
100 List::new(
101 theme
102 .control_rect(0, 270, 100, ComponentSize::Sm)
103 .height(48),
104 )
105 .with_items(&["Alpha", "Beta", "Gamma"])
106 .themed(
107 &theme,
108 ColorScheme::Neutral,
109 Variant::Subtle,
110 ComponentSize::Sm,
111 ),
112 Divider::new(rect(0, 328, 100, 8), DividerOrientation::Horizontal).themed(
113 &theme,
114 ColorScheme::Neutral,
115 Variant::Outline,
116 ComponentSize::Sm,
117 ),
118 Spacer::height(theme.component_size(ComponentSize::Md).gap),
119 Table::new(rect(0, 342, 120, 48)).themed_parts(
120 &theme,
121 ColorScheme::Info,
122 Variant::Subtle,
123 ComponentSize::Sm,
124 ),
125 Calendar::new(rect(0, 396, 140, 96)).themed_parts(
126 &theme,
127 ColorScheme::Primary,
128 Variant::Outline,
129 ComponentSize::Sm,
130 ),
131 );
132
133 let layout = {
134 #[cfg(feature = "view")]
135 {
136 view! { VStack::new(90)
137 .child(20, |rect| Heading::new("Demo", rect))
138 .child(20, |rect| Text::new("Hello", rect))
139 .child(30, |rect| {
140 Button::new("Tap", rect)
141 .icon("save")
142 .on_click(|_| println!("clicked"))
143 })
144 .child(30, |rect| {
145 IconButton::new("edit", rect)
146 .on_click(|_| println!("edit"))
147 })
148 .child(20, |rect| {
149 Checkbox::new("Accept", rect).on_change(|v| println!("checkbox: {v}"))
150 })
151 .child(20, |rect| {
152 Switch::new(rect).on_change(|v| println!("switch: {v}"))
153 })
154 .child(20, |rect| {
155 Radio::new("Option", rect).on_change(|v| println!("radio: {v}"))
156 })
157 .child(20, |rect| { Badge::new("NEW", rect) })
158 .child(20, |rect| {
159 Tag::new("rust", rect).on_remove(|| println!("tag removed"))
160 })
161 .child(30, |rect| { Alert::new("Saved", rect) })
162 .child(20, |rect| {
163 Input::new("Name", rect).on_change(|v| println!("input: {v}"))
164 })
165 .child(40, |rect| {
166 Textarea::new("Multiline", rect).on_change(|v| println!("textarea: {v}"))
167 })
168 .child(30, |rect| Modal::new("Modal", rect))
169 .child(30, |rect| Drawer::new("Menu", rect))
170 .child(30, |rect| Toast::new("Saved", rect)) }
171 }
172 #[cfg(not(feature = "view"))]
173 {
174 VStack::new(90)
175 .child(20, |rect| Heading::new("Demo", rect))
176 .child(20, |rect| Text::new("Hello", rect))
177 .child(30, |rect| {
178 Button::new("Tap", rect)
179 .icon("save")
180 .on_click(|_| println!("clicked"))
181 })
182 .child(30, |rect| {
183 IconButton::new("edit", rect).on_click(|_| println!("edit"))
184 })
185 .child(20, |rect| {
186 Checkbox::new("Accept", rect).on_change(|v| println!("checkbox: {v}"))
187 })
188 .child(20, |rect| {
189 Switch::new(rect).on_change(|v| println!("switch: {v}"))
190 })
191 .child(20, |rect| {
192 Radio::new("Option", rect).on_change(|v| println!("radio: {v}"))
193 })
194 .child(20, |rect| Badge::new("NEW", rect))
195 .child(20, |rect| {
196 Tag::new("rust", rect).on_remove(|| println!("tag removed"))
197 })
198 .child(30, |rect| Alert::new("Saved", rect))
199 .child(20, |rect| {
200 Input::new("Name", rect).on_change(|v| println!("input: {v}"))
201 })
202 .child(40, |rect| {
203 Textarea::new("Multiline", rect).on_change(|v| println!("textarea: {v}"))
204 })
205 .child(30, |rect| Modal::new("Modal", rect))
206 .child(30, |rect| Drawer::new("Menu", rect))
207 .child(30, |rect| Toast::new("Saved", rect))
208 }
209 };
210
211 let _ = (style, new_components, layout);
212}Sourcepub fn set_on_click<F>(&mut self, handler: F)
pub fn set_on_click<F>(&mut self, handler: F)
Register a callback invoked when the button is released.
Trait Implementations§
Source§impl StyleProps for Button
impl StyleProps for Button
Source§fn style_mut(&mut self) -> &mut Style
fn style_mut(&mut self) -> &mut Style
Return the mutable style used by this widget’s main visual part.
Source§fn with_style(self, style: Style) -> Self
fn with_style(self, style: Style) -> Self
Replace the complete main style.
Source§fn border_color(self, color: Color) -> Self
fn border_color(self, color: Color) -> Self
Set the border color.
Source§fn border_width(self, width: u8) -> Self
fn border_width(self, width: u8) -> Self
Set the border width in pixels.
Source§impl Widget for Button
impl Widget for Button
Source§fn handle_event(&mut self, event: &Event) -> bool
fn handle_event(&mut self, event: &Event) -> bool
Delegate pointer events and invoke the click handler when released.
Source§fn clear_region(&mut self) -> Option<Rect>
fn clear_region(&mut self) -> Option<Rect>
Return a region (in draw/landscape coordinates) that should be
restored from the pristine background copy, or
None. Read moreSource§fn set_bounds(&mut self, _bounds: Rect)
fn set_bounds(&mut self, _bounds: Rect)
Called by the LPAR-10 layout pass to notify this widget of its
layout-computed bounds. Read more
Source§fn widget_font_mut(&mut self) -> Option<&mut WidgetFont>
fn widget_font_mut(&mut self) -> Option<&mut WidgetFont>
Expose this widget’s font slot for cascade-driven font resolution
(FONT-05 §5.B). Read more
Auto Trait Implementations§
impl !RefUnwindSafe for Button
impl !Send for Button
impl !Sync for Button
impl !UnwindSafe for Button
impl Freeze for Button
impl Unpin for Button
impl UnsafeUnpin for Button
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> BoundsProps for Twhere
T: Widget,
impl<T> BoundsProps for Twhere
T: Widget,
Source§impl<T> ThemeProps for Twhere
T: StyleProps,
impl<T> ThemeProps for Twhere
T: StyleProps,
Source§fn themed(
self,
theme: &Theme,
scheme: ColorScheme,
variant: Variant,
size: ComponentSize,
) -> Self
fn themed( self, theme: &Theme, scheme: ColorScheme, variant: Variant, size: ComponentSize, ) -> Self
Apply a complete themed style.
Source§fn variant(self, theme: &Theme, scheme: ColorScheme, variant: Variant) -> Self
fn variant(self, theme: &Theme, scheme: ColorScheme, variant: Variant) -> Self
Apply a themed variant with medium sizing.
Source§fn component_size(self, theme: &Theme, size: ComponentSize) -> Self
fn component_size(self, theme: &Theme, size: ComponentSize) -> Self
Apply only the sizing-affecting style fields.