teksilo_core/styles/
icon_button_style.rs1use std::rc::Rc;
7
8use serde::{Deserialize, Serialize};
9
10use crate::build_context::BuildContext;
11use crate::signal::Signal;
12use crate::widget_id::WidgetId;
13
14#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
18pub enum IconButtonSize {
19 Compact,
20 #[default]
21 Default,
22 Toolbar,
23 Large,
24 Hero,
25}
26
27#[derive(Clone, Debug)]
28pub struct IconButtonStyleConfig {
29 pub icon: WidgetId,
33 pub is_pressed: Signal<bool>,
34 pub is_hovered: Signal<bool>,
35 pub is_focused: Signal<bool>,
36 pub is_disabled: Signal<bool>,
37 pub is_on: Option<Signal<bool>>,
41 pub size: IconButtonSize,
42}
43
44pub trait IconButtonStyle: 'static {
45 fn make_body(&self, cfg: &IconButtonStyleConfig, ctx: &mut BuildContext) -> WidgetId;
46}
47
48pub type SharedIconButtonStyle = Rc<dyn IconButtonStyle>;