teksilo_core/styles/
panel_style.rs1use std::rc::Rc;
7
8use serde::{Deserialize, Serialize};
9
10use crate::build_context::BuildContext;
11use crate::color_prop::ColorProp;
12use crate::signal::Prop;
13use crate::widget_id::WidgetId;
14
15#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
16pub enum PanelVariant {
17 #[default]
19 Plain,
20 Sunken,
22 Raised,
24 Highlighted,
26}
27
28#[derive(Clone, Debug)]
29pub struct PanelStyleConfig {
30 pub content: WidgetId,
32 pub variant: PanelVariant,
33 pub background_override: Option<ColorProp>,
37 pub border_color_override: Option<ColorProp>,
38 pub border_width_override: Option<Prop<f32>>,
39 pub corner_radius_override: Option<Prop<f32>>,
40 pub padding_override: Option<Prop<f32>>,
41}
42
43pub trait PanelStyle: 'static {
44 fn make_body(&self, cfg: &PanelStyleConfig, ctx: &mut BuildContext) -> WidgetId;
45}
46
47pub type SharedPanelStyle = Rc<dyn PanelStyle>;