use crate::tokens::dtcg::DimensionValue;
use serde::{Deserialize, Serialize};
pub fn default_border_width() -> DimensionValue {
DimensionValue::from_pt(1.0)
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct FocusRingMetrics {
pub stroke_width: DimensionValue,
pub offset: DimensionValue,
pub corner_radius_delta: DimensionValue,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TextFieldSizeMetrics {
pub height: DimensionValue,
pub font_size: DimensionValue,
pub corner_radius: DimensionValue,
#[serde(default)]
pub padding_horizontal: Option<DimensionValue>,
#[serde(default)]
pub padding_vertical: Option<DimensionValue>,
#[serde(default = "default_text_field_default_width")]
pub default_width: DimensionValue,
#[serde(default = "default_border_width")]
pub border_width: DimensionValue,
}
fn default_text_field_default_width() -> DimensionValue {
DimensionValue::from_pt(44.0)
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TextFieldMetrics {
pub regular: TextFieldSizeMetrics,
pub small: TextFieldSizeMetrics,
#[serde(alias = "compact")]
pub compact_infobox: TextFieldSizeMetrics,
pub mini: TextFieldSizeMetrics,
pub large: TextFieldSizeMetrics,
}
impl TextFieldMetrics {
#[inline]
pub fn compact(&self) -> &TextFieldSizeMetrics {
&self.compact_infobox
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ButtonSizeMetrics {
pub height: DimensionValue,
pub corner_radius: DimensionValue,
#[serde(default)]
pub padding_horizontal: Option<DimensionValue>,
#[serde(default = "default_button_font_size")]
pub font_size: DimensionValue,
#[serde(default = "default_border_width")]
pub border_width: DimensionValue,
}
fn default_button_font_size() -> DimensionValue {
DimensionValue::from_pt(13.0)
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ButtonMetrics {
pub regular: ButtonSizeMetrics,
pub small: ButtonSizeMetrics,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SegmentedSizeMetrics {
pub height: DimensionValue,
pub corner_radius: DimensionValue,
pub indicator_radius: DimensionValue,
}
fn default_segmented_item_width() -> DimensionValue {
DimensionValue::from_pt(36.0)
}
fn default_segmented_indicator_inset() -> DimensionValue {
DimensionValue::from_pt(2.0)
}
fn default_segmented_font_size() -> DimensionValue {
DimensionValue::from_pt(11.0)
}
fn default_segmented_padding_horizontal() -> DimensionValue {
DimensionValue::from_pt(10.0)
}
fn default_segmented_animation_duration() -> DimensionValue {
DimensionValue::from_pt(0.18)
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SegmentedMetrics {
pub regular: SegmentedSizeMetrics,
pub small: SegmentedSizeMetrics,
#[serde(default = "default_segmented_item_width")]
pub item_width: DimensionValue,
#[serde(default = "default_segmented_indicator_inset")]
pub indicator_inset: DimensionValue,
#[serde(default = "default_border_width")]
pub border_width: DimensionValue,
#[serde(default = "default_segmented_font_size")]
pub font_size: DimensionValue,
#[serde(default = "default_segmented_padding_horizontal")]
pub padding_horizontal: DimensionValue,
#[serde(default = "default_segmented_animation_duration")]
pub animation_duration: DimensionValue,
}