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 = "default_text_field_padding_horizontal")]
pub padding_horizontal: DimensionValue,
#[serde(default)]
pub padding_vertical: Option<DimensionValue>,
#[serde(default = "default_text_field_first_baseline")]
pub first_baseline_offset_from_top: DimensionValue,
#[serde(default = "default_text_field_bottom_baseline")]
pub baseline_offset_from_bottom: 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_padding_horizontal() -> DimensionValue {
DimensionValue::from_pt(4.0)
}
fn default_text_field_first_baseline() -> DimensionValue {
DimensionValue::from_pt(15.0)
}
fn default_text_field_bottom_baseline() -> DimensionValue {
DimensionValue::from_pt(6.0)
}
fn default_text_field_default_width() -> DimensionValue {
DimensionValue::from_pt(44.0)
}
fn default_auto_size_regular_min() -> DimensionValue {
DimensionValue::from_pt(21.0)
}
fn default_auto_size_small_min() -> DimensionValue {
DimensionValue::from_pt(18.5)
}
fn default_auto_size_compact_min() -> DimensionValue {
DimensionValue::from_pt(17.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,
#[serde(default = "default_auto_size_regular_min")]
pub auto_size_regular_min_height: DimensionValue,
#[serde(default = "default_auto_size_small_min")]
pub auto_size_small_min_height: DimensionValue,
#[serde(default = "default_auto_size_compact_min")]
pub auto_size_compact_min_height: DimensionValue,
}
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,
}