use crate::tokens::dtcg::DimensionValue;
use crate::tokens::metrics::controls::basic::default_border_width;
use serde::{Deserialize, Serialize};
pub use super::selection_and_value::{
ColorWellMetrics, SearchFieldMetrics, StepperMetrics, ToggleMetrics,
};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SliderMetrics {
pub track_height: DimensionValue,
pub thumb_size: DimensionValue,
#[serde(default = "default_slider_thumb_stroke_width")]
pub thumb_stroke_width: DimensionValue,
pub tick_height: DimensionValue,
pub tick_width: DimensionValue,
pub tick_offset: DimensionValue,
#[serde(default = "default_slider_default_width")]
pub default_width: DimensionValue,
#[serde(default = "default_slider_key_step_fraction")]
pub key_step_fraction: DimensionValue,
#[serde(default = "default_slider_shadow_offset_y")]
pub shadow_offset_y: DimensionValue,
#[serde(default = "default_slider_thumb_press_scale")]
pub thumb_press_scale: DimensionValue,
}
fn default_slider_thumb_press_scale() -> DimensionValue {
DimensionValue::from_pt(1.15)
}
fn default_slider_thumb_stroke_width() -> DimensionValue {
DimensionValue::from_pt(1.0)
}
fn default_slider_shadow_offset_y() -> DimensionValue {
DimensionValue::from_pt(1.5)
}
fn default_slider_default_width() -> DimensionValue {
DimensionValue::from_pt(120.0)
}
fn default_slider_key_step_fraction() -> DimensionValue {
DimensionValue::from_pt(0.05)
}
impl Default for SliderMetrics {
fn default() -> Self {
Self {
track_height: DimensionValue::from_pt(3.0),
thumb_size: DimensionValue::from_pt(16.0),
thumb_stroke_width: default_slider_thumb_stroke_width(),
tick_height: DimensionValue::from_pt(4.0),
tick_width: DimensionValue::from_pt(1.0),
tick_offset: DimensionValue::from_pt(3.0),
default_width: default_slider_default_width(),
key_step_fraction: default_slider_key_step_fraction(),
shadow_offset_y: default_slider_shadow_offset_y(),
thumb_press_scale: default_slider_thumb_press_scale(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ThumbnailCellMetrics {
pub size: DimensionValue,
pub corner_radius: DimensionValue,
pub border_width: DimensionValue,
}
impl Default for ThumbnailCellMetrics {
fn default() -> Self {
Self {
size: DimensionValue::from_pt(24.0),
corner_radius: DimensionValue::from_pt(4.0),
border_width: DimensionValue::from_pt(1.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutlineViewMetrics {
pub row_height: DimensionValue,
pub indent_step: DimensionValue,
pub disclosure_size: DimensionValue,
pub disclosure_margin: DimensionValue,
pub content_spacing: DimensionValue,
pub accessory_size: DimensionValue,
pub accessory_spacing: DimensionValue,
pub corner_radius: DimensionValue,
pub font_size: DimensionValue,
#[serde(default = "default_outline_chevron_stroke_width")]
pub chevron_stroke_width: DimensionValue,
#[serde(default = "default_outline_chevron_size")]
pub chevron_size: DimensionValue,
#[serde(default = "default_outline_chevron_depth")]
pub chevron_depth: DimensionValue,
#[serde(default = "default_outline_item_spacing")]
pub item_spacing: DimensionValue,
#[serde(default = "default_outline_edge_padding")]
pub edge_padding: DimensionValue,
#[serde(default = "default_outline_header_font_size")]
pub header_font_size: DimensionValue,
}
fn default_outline_header_font_size() -> DimensionValue {
DimensionValue::from_pt(11.0)
}
fn default_outline_chevron_stroke_width() -> DimensionValue {
DimensionValue::from_pt(1.2)
}
fn default_outline_chevron_size() -> DimensionValue {
DimensionValue::from_pt(7.0)
}
fn default_outline_chevron_depth() -> DimensionValue {
DimensionValue::from_pt(1.75)
}
fn default_outline_item_spacing() -> DimensionValue {
DimensionValue::from_pt(6.0)
}
fn default_outline_edge_padding() -> DimensionValue {
DimensionValue::from_pt(4.0)
}
impl Default for OutlineViewMetrics {
fn default() -> Self {
Self {
row_height: DimensionValue::from_pt(24.0),
indent_step: DimensionValue::from_pt(16.0),
disclosure_size: DimensionValue::from_pt(10.0),
disclosure_margin: DimensionValue::from_pt(4.0),
content_spacing: DimensionValue::from_pt(6.0),
accessory_size: DimensionValue::from_pt(16.0),
accessory_spacing: DimensionValue::from_pt(4.0),
corner_radius: DimensionValue::from_pt(4.0),
font_size: DimensionValue::from_pt(12.0),
chevron_stroke_width: default_outline_chevron_stroke_width(),
chevron_size: default_outline_chevron_size(),
chevron_depth: default_outline_chevron_depth(),
item_spacing: default_outline_item_spacing(),
edge_padding: default_outline_edge_padding(),
header_font_size: default_outline_header_font_size(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PopUpButtonMetrics {
pub height: DimensionValue,
pub corner_radius: DimensionValue,
pub padding_horizontal: DimensionValue,
pub chevron_size: DimensionValue,
#[serde(default = "default_popup_chevron_stroke_width")]
pub chevron_stroke_width: DimensionValue,
#[serde(default = "default_popup_chevron_spacing")]
pub chevron_spacing: DimensionValue,
#[serde(default = "default_popup_font_size")]
pub font_size: DimensionValue,
#[serde(default = "default_border_width")]
pub border_width: DimensionValue,
#[serde(default = "default_popup_chevron_offset_y")]
pub chevron_offset_y: DimensionValue,
#[serde(default = "default_popup_menu_item_height")]
pub menu_item_height: DimensionValue,
#[serde(default = "default_popup_menu_item_padding")]
pub menu_item_padding: DimensionValue,
#[serde(default = "default_popup_menu_min_width")]
pub menu_min_width: DimensionValue,
#[serde(default = "default_popup_gap")]
pub popup_gap: DimensionValue,
}
fn default_popup_chevron_stroke_width() -> DimensionValue {
DimensionValue::from_pt(1.2)
}
fn default_popup_chevron_spacing() -> DimensionValue {
DimensionValue::from_pt(6.0)
}
fn default_popup_font_size() -> DimensionValue {
DimensionValue::from_pt(13.0)
}
fn default_popup_chevron_offset_y() -> DimensionValue {
DimensionValue::from_pt(2.0)
}
fn default_popup_menu_item_height() -> DimensionValue {
DimensionValue::from_pt(20.0)
}
fn default_popup_menu_item_padding() -> DimensionValue {
DimensionValue::from_pt(6.0)
}
fn default_popup_menu_min_width() -> DimensionValue {
DimensionValue::from_pt(120.0)
}
fn default_popup_gap() -> DimensionValue {
DimensionValue::from_pt(2.0)
}
impl Default for PopUpButtonMetrics {
fn default() -> Self {
Self {
height: DimensionValue::from_pt(22.0),
corner_radius: DimensionValue::from_pt(5.0),
padding_horizontal: DimensionValue::from_pt(8.0),
chevron_size: DimensionValue::from_pt(8.0),
chevron_stroke_width: default_popup_chevron_stroke_width(),
chevron_spacing: default_popup_chevron_spacing(),
font_size: default_popup_font_size(),
border_width: default_border_width(),
chevron_offset_y: default_popup_chevron_offset_y(),
menu_item_height: default_popup_menu_item_height(),
menu_item_padding: default_popup_menu_item_padding(),
menu_min_width: default_popup_menu_min_width(),
popup_gap: default_popup_gap(),
}
}
}