//! Change the apperance of a slider. use crate::core::border; use crate::core::{Color, Pixels}; /// The appearance of a slider. #[derive(Debug, Clone, Copy)] pub struct Appearance { /// The colors of the rail of the slider. pub rail: Rail, /// The appearance of the [`Handle`] of the slider. pub handle: Handle, } impl Appearance { /// Changes the [`HandleShape`] of the [`Appearance`] to a circle /// with the given radius. pub fn with_circular_handle(mut self, radius: impl Into) -> Self { self.handle.shape = HandleShape::Circle { radius: radius.into().0, }; self } } /// The appearance of a slider rail #[derive(Debug, Clone, Copy)] pub struct Rail { /// The colors of the rail of the slider. pub colors: (Color, Color), /// The width of the stroke of a slider rail. pub width: f32, /// The border radius of the corners of the rail. pub border_radius: border::Radius, } /// The appearance of the handle of a slider. #[derive(Debug, Clone, Copy)] pub struct Handle { /// The shape of the handle. pub shape: HandleShape, /// The [`Color`] of the handle. pub color: Color, /// The border width of the handle. pub border_width: f32, /// The border [`Color`] of the handle. pub border_color: Color, } /// The shape of the handle of a slider. #[derive(Debug, Clone, Copy)] pub enum HandleShape { /// A circular handle. Circle { /// The radius of the circle. radius: f32, }, /// A rectangular shape. Rectangle { /// The width of the rectangle. width: u16, /// The border radius of the corners of the rectangle. border_radius: border::Radius, }, } /// A set of rules that dictate the style of a slider. pub trait StyleSheet { fn default() -> fn(&Self, Status) -> Appearance; } pub enum Status { Active, Hovered, Dragging, }