#![allow(clippy::module_name_repetitions)]
use iced::widget::text_input::{Catalog, Status, Style};
use iced::{Background, Border, Color};
use crate::StyleType;
use crate::gui::styles::style_constants::BORDER_WIDTH;
#[derive(Default)]
pub enum TextInputType {
#[default]
Standard,
Badge,
}
const TEXT_INPUT_BORDER_RADIUS: f32 = 5.0;
impl TextInputType {
fn active(&self, style: &StyleType) -> Style {
let colors = style.get_palette();
let ext = style.get_extension();
Style {
background: Background::Color(match self {
TextInputType::Badge => Color::TRANSPARENT,
TextInputType::Standard => Color {
a: ext.alpha_round_borders,
..ext.buttons_color
},
}),
border: Border {
radius: TEXT_INPUT_BORDER_RADIUS.into(),
width: BORDER_WIDTH,
color: match self {
TextInputType::Badge => Color::TRANSPARENT,
TextInputType::Standard => ext.buttons_color,
},
},
icon: Color {
a: ext.alpha_chart_badge,
..colors.text_body
},
placeholder: self.placeholder_color(style),
value: self.value_color(style),
selection: self.selection_color(style),
}
}
fn focused(&self, style: &StyleType) -> Style {
let colors = style.get_palette();
let ext = style.get_extension();
Style {
background: Background::Color(colors.primary),
border: Border {
radius: TEXT_INPUT_BORDER_RADIUS.into(),
width: BORDER_WIDTH,
color: colors.secondary, },
icon: Color {
a: ext.alpha_chart_badge,
..colors.text_body
},
placeholder: self.placeholder_color(style),
value: self.value_color(style),
selection: self.selection_color(style),
}
}
#[allow(clippy::unused_self)]
fn placeholder_color(&self, style: &StyleType) -> Color {
let color = style.get_palette().text_body;
let ext = style.get_extension();
Color {
a: ext.alpha_chart_badge,
..color
}
}
#[allow(clippy::unused_self)]
fn value_color(&self, style: &StyleType) -> Color {
style.get_palette().text_body
}
#[allow(clippy::unused_self)]
fn disabled_color(&self, style: &StyleType) -> Color {
let color = style.get_palette().text_body;
let ext = style.get_extension();
Color {
a: ext.alpha_chart_badge,
..color
}
}
#[allow(clippy::unused_self)]
fn selection_color(&self, style: &StyleType) -> Color {
let color = style.get_palette().text_body;
Color { a: 0.2, ..color }
}
fn hovered(&self, style: &StyleType) -> Style {
let colors = style.get_palette();
let ext = style.get_extension();
Style {
background: Background::Color(match self {
TextInputType::Badge => Color::TRANSPARENT,
TextInputType::Standard => ext.buttons_color,
}),
border: Border {
radius: TEXT_INPUT_BORDER_RADIUS.into(),
width: BORDER_WIDTH,
color: colors.secondary, },
icon: Color {
a: ext.alpha_chart_badge,
..colors.text_body
},
placeholder: self.placeholder_color(style),
value: self.value_color(style),
selection: self.selection_color(style),
}
}
fn disabled(&self, style: &StyleType) -> Style {
let colors = style.get_palette();
let ext = style.get_extension();
Style {
background: Background::Color(match self {
TextInputType::Badge => Color::TRANSPARENT,
TextInputType::Standard => Color {
a: ext.alpha_round_containers,
..ext.buttons_color
},
}),
border: Border {
radius: TEXT_INPUT_BORDER_RADIUS.into(),
width: BORDER_WIDTH,
color: match self {
TextInputType::Badge => Color::TRANSPARENT,
TextInputType::Standard => Color {
a: ext.alpha_round_borders,
..ext.buttons_color
},
},
},
icon: Color {
a: ext.alpha_chart_badge,
..colors.text_body
},
placeholder: self.disabled_color(style),
value: self.disabled_color(style),
selection: self.disabled_color(style),
}
}
}
impl Catalog for StyleType {
type Class<'a> = TextInputType;
fn default<'a>() -> Self::Class<'a> {
Self::Class::default()
}
fn style(&self, class: &Self::Class<'_>, status: Status) -> Style {
match status {
Status::Active => class.active(self),
Status::Hovered => class.hovered(self),
Status::Disabled => class.disabled(self),
Status::Focused { .. } => class.focused(self),
}
}
}