Button
Push, primary, ghost, and icon buttons with variants and styles.
use incular::controls_prelude::*;Platform-neutral styled push button (TypedBuilder, Clone) — the single
retained primitive everything Material renders through.
| Button | Emphasis |
|---|---|
Button | Configurable base with ButtonVariant |
PrimaryButton | High-emphasis filled |
GhostButton | Flat toolbar style |
IconButton | Compact square icon (ghost + 4px padding + 28px) |
| Variant | Style |
|---|---|
Default / Standard | Neutral push button |
Primary | Accent fill |
Ghost | Transparent flat |
Danger / Destructive | Error/confirm-destructive |
use incular::prelude::*;
use incular::controls_prelude::{Button, PrimaryButton};
fn main() {
let app = Application::new(|_cx| {
Container::builder()
.padding(EdgeInsets::all(24.0))
.alignment(Alignment::CENTER)
.child(
Column::builder()
.main_axis_size(MainAxisSize::Min)
.spacing(8.0)
.children(Vec::<Widget>::from([
Button::new("Save")
.on_click(|| println!("saved")).into(),
PrimaryButton::new("Go")
.on_click(|| println!("go")).into(),
]))
.build(),
)
.build()
.into()
})
.expect("valid application");
incular::run(app).expect("run application");
}Methods
new(label), with_child(child), with_icon_label(icon, label),
label(...) (replaces label, clears child/icon), child, content (alias),
variant(ButtonVariant), style(ButtonStyle), enabled(bool),
focusable_when_disabled(bool), loading(bool), on_click(impl Fn()),
build(&ControlTheme).
Effective enablement is enabled && !loading.
Variants
use incular::prelude::*;
use incular::controls_prelude::{GhostButton, IconButton, PrimaryButton};
fn main() {
let app = Application::new(|_cx| {
Column::builder()
.main_axis_size(MainAxisSize::Min)
.spacing(8.0)
.children(Vec::<Widget>::from([
PrimaryButton::new("Save").on_click(|| {}).into(),
GhostButton::new("Cancel").on_click(|| {}).into(),
IconButton::new("X").on_click(|| {}).into(),
]))
.build()
.into()
})
.expect("valid application");
incular::run(app).expect("run application");
}ButtonVariant: Default (default) / Standard / Primary / Ghost /
Danger / Destructive. PrimaryButton/GhostButton/IconButton share the
same method set (minus icon support on primary/ghost).
ButtonStyle
Sparse config; variant defaults to Default, everything else Option.
background, foreground, overlay_color, shadow_color,
surface_tint_color, elevation (Primary/Danger default 1.0, else 0.0),
side, shape, border_radius, padding, minimum_size (base 64x36),
fixed_size, maximum_size, icon_color, icon_size,
icon_alignment (Start default / End), tap_target_size
(Padded default, enforces 48 px / ShrinkWrap), animation_duration
(200 ms), enable_feedback, alignment (CENTER), splash_factory
(Ripple default / Splash / Sparkle / NoSplash),
background_builder, foreground_builder, height, text_style, plus
background_states/foreground_states (StateColor) and property resolvers.
style.merge(&other), copy_with alias. Resolution precedence: disabled →
invalid → pressed → checked → focused → hovered → normal.
Related: Material Buttons,
Theme.