ZIm/crates/ui/src/components/indicator.rs
Marshall Bowers 74f8ef0364
Clean up Indicator (#11275)
This PR cleans up the `Indicator` component:

- Renamed `IndicatorStyle` to `IndicatorKind` and made it private.
- Fixed `Indicator::bar()` to construct an indicator using the right
`IndicatorKind`.
- Removed the `IndicatorIcon`, since we didn't actually end up using it.

Release Notes:

- N/A
2024-05-01 18:10:35 -04:00

64 lines
1.4 KiB
Rust

use crate::{prelude::*, AnyIcon};
#[derive(Default)]
enum IndicatorKind {
#[default]
Dot,
Bar,
Icon(AnyIcon),
}
#[derive(IntoElement)]
pub struct Indicator {
kind: IndicatorKind,
pub color: Color,
}
impl Indicator {
pub fn dot() -> Self {
Self {
kind: IndicatorKind::Dot,
color: Color::Default,
}
}
pub fn bar() -> Self {
Self {
kind: IndicatorKind::Bar,
color: Color::Default,
}
}
pub fn icon(icon: impl Into<AnyIcon>) -> Self {
Self {
kind: IndicatorKind::Icon(icon.into()),
color: Color::Default,
}
}
pub fn color(mut self, color: Color) -> Self {
self.color = color;
self
}
}
impl RenderOnce for Indicator {
fn render(self, cx: &mut WindowContext) -> impl IntoElement {
let container = div().flex_none();
match self.kind {
IndicatorKind::Icon(icon) => container
.child(icon.map(|icon| icon.custom_size(rems_from_px(8.)).color(self.color))),
IndicatorKind::Dot => container
.w_1p5()
.h_1p5()
.rounded_full()
.bg(self.color.color(cx)),
IndicatorKind::Bar => container
.w_full()
.h_1p5()
.rounded_t_md()
.bg(self.color.color(cx)),
}
}
}