use iced_native::Color;
use crate::style::default_colors;
#[derive(Debug, Clone)]
pub struct Appearance {
pub rail_width: f32,
pub h_rail_color: Color,
pub v_rail_color: Color,
pub handle: HandleShape,
pub back_color: Color,
pub border_width: f32,
pub border_color: Color,
pub center_line_width: f32,
pub center_line_color: Color,
}
impl Default for Appearance {
fn default() -> Self {
Appearance {
rail_width: 2.0,
h_rail_color: default_colors::XY_PAD_RAIL,
v_rail_color: default_colors::XY_PAD_RAIL,
handle: HandleShape::Circle(Default::default()),
back_color: default_colors::LIGHT_BACK,
border_width: 1.0,
border_color: default_colors::BORDER,
center_line_width: 1.0,
center_line_color: default_colors::XY_PAD_CENTER_LINE,
}
}
}
#[derive(Debug, Clone)]
pub enum HandleShape {
Circle(HandleCircle),
Square(HandleSquare),
}
#[derive(Debug, Clone)]
pub struct HandleCircle {
pub color: Color,
pub diameter: f32,
pub border_width: f32,
pub border_color: Color,
}
impl Default for HandleCircle {
fn default() -> Self {
HandleCircle {
color: default_colors::LIGHT_BACK,
diameter: 11.0,
border_width: 2.0,
border_color: default_colors::BORDER,
}
}
}
#[derive(Debug, Clone)]
pub struct HandleSquare {
pub color: Color,
pub size: u16,
pub border_width: f32,
pub border_radius: f32,
pub border_color: Color,
}
pub trait StyleSheet {
type Style: Default;
fn active(&self, style: &Self::Style) -> Appearance;
fn hovered(&self, style: &Self::Style) -> Appearance;
fn dragging(&self, style: &Self::Style) -> Appearance;
}