use super::basic::default_border_width;
use crate::tokens::dtcg::DimensionValue;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CheckboxSizeMetrics {
pub box_size: DimensionValue,
pub corner_radius: DimensionValue,
pub label_gap: DimensionValue,
pub font_size: DimensionValue,
pub checkmark_stroke: DimensionValue,
pub first_baseline_offset_from_top: DimensionValue,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CheckboxMetrics {
pub regular: CheckboxSizeMetrics,
pub small: CheckboxSizeMetrics,
pub mini: CheckboxSizeMetrics,
#[serde(default = "default_border_width")]
pub border_width: DimensionValue,
pub check_p1_x: DimensionValue,
pub check_p1_y: DimensionValue,
pub check_p2_x: DimensionValue,
pub check_p2_y: DimensionValue,
pub check_p3_x: DimensionValue,
pub check_p3_y: DimensionValue,
pub mixed_bar_inset_ratio: DimensionValue,
}
impl Default for CheckboxMetrics {
fn default() -> Self {
Self {
regular: CheckboxSizeMetrics {
box_size: DimensionValue::from_pt(14.0),
corner_radius: DimensionValue::from_pt(3.5),
label_gap: DimensionValue::from_pt(6.0),
font_size: DimensionValue::from_pt(13.0),
checkmark_stroke: DimensionValue::from_pt(1.6),
first_baseline_offset_from_top: DimensionValue::from_pt(13.0),
},
small: CheckboxSizeMetrics {
box_size: DimensionValue::from_pt(12.0),
corner_radius: DimensionValue::from_pt(3.0),
label_gap: DimensionValue::from_pt(5.0),
font_size: DimensionValue::from_pt(11.0),
checkmark_stroke: DimensionValue::from_pt(1.4),
first_baseline_offset_from_top: DimensionValue::from_pt(11.0),
},
mini: CheckboxSizeMetrics {
box_size: DimensionValue::from_pt(10.0),
corner_radius: DimensionValue::from_pt(2.5),
label_gap: DimensionValue::from_pt(4.0),
font_size: DimensionValue::from_pt(9.0),
checkmark_stroke: DimensionValue::from_pt(1.2),
first_baseline_offset_from_top: DimensionValue::from_pt(9.0),
},
border_width: default_border_width(),
check_p1_x: DimensionValue::from_pt(0.24),
check_p1_y: DimensionValue::from_pt(0.52),
check_p2_x: DimensionValue::from_pt(0.43),
check_p2_y: DimensionValue::from_pt(0.72),
check_p3_x: DimensionValue::from_pt(0.76),
check_p3_y: DimensionValue::from_pt(0.28),
mixed_bar_inset_ratio: DimensionValue::from_pt(0.24),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct LabelMetrics {
pub regular_font_size: DimensionValue,
pub regular_height: DimensionValue,
pub regular_baseline_from_top: DimensionValue,
pub regular_baseline_from_bottom: DimensionValue,
pub regular_ascender: DimensionValue,
pub regular_descender: DimensionValue,
pub regular_cap_height: DimensionValue,
pub small_font_size: DimensionValue,
pub small_height: DimensionValue,
pub small_baseline_from_top: DimensionValue,
pub small_baseline_from_bottom: DimensionValue,
pub small_ascender: DimensionValue,
pub small_descender: DimensionValue,
pub small_cap_height: DimensionValue,
pub mini_font_size: DimensionValue,
pub mini_height: DimensionValue,
pub mini_baseline_from_top: DimensionValue,
pub mini_baseline_from_bottom: DimensionValue,
pub mini_ascender: DimensionValue,
pub mini_descender: DimensionValue,
pub mini_cap_height: DimensionValue,
pub semibold_stroke_boost: DimensionValue,
pub bold_stroke_boost: DimensionValue,
}
impl Default for LabelMetrics {
fn default() -> Self {
Self {
regular_font_size: DimensionValue::from_pt(13.0),
regular_height: DimensionValue::from_pt(16.0),
regular_baseline_from_top: DimensionValue::from_pt(13.0),
regular_baseline_from_bottom: DimensionValue::from_pt(3.0),
regular_ascender: DimensionValue::from_pt(12.57),
regular_descender: DimensionValue::from_pt(-2.74),
regular_cap_height: DimensionValue::from_pt(9.16),
small_font_size: DimensionValue::from_pt(11.0),
small_height: DimensionValue::from_pt(14.0),
small_baseline_from_top: DimensionValue::from_pt(11.0),
small_baseline_from_bottom: DimensionValue::from_pt(3.0),
small_ascender: DimensionValue::from_pt(10.63),
small_descender: DimensionValue::from_pt(-2.32),
small_cap_height: DimensionValue::from_pt(7.75),
mini_font_size: DimensionValue::from_pt(9.0),
mini_height: DimensionValue::from_pt(11.0),
mini_baseline_from_top: DimensionValue::from_pt(10.0),
mini_baseline_from_bottom: DimensionValue::from_pt(2.0),
mini_ascender: DimensionValue::from_pt(8.70),
mini_descender: DimensionValue::from_pt(-1.90),
mini_cap_height: DimensionValue::from_pt(6.34),
semibold_stroke_boost: DimensionValue::from_pt(0.35),
bold_stroke_boost: DimensionValue::from_pt(0.55),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct HelpButtonMetrics {
pub diameter: DimensionValue,
pub small_diameter: DimensionValue,
pub mini_diameter: DimensionValue,
pub font_size: DimensionValue,
pub border_width: DimensionValue,
pub shadow_offset_y: DimensionValue,
}
impl Default for HelpButtonMetrics {
fn default() -> Self {
Self {
diameter: DimensionValue::from_pt(20.0),
small_diameter: DimensionValue::from_pt(16.0),
mini_diameter: DimensionValue::from_pt(13.0),
font_size: DimensionValue::from_pt(12.0),
border_width: DimensionValue::from_pt(1.0),
shadow_offset_y: DimensionValue::from_pt(1.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct InlineActionButtonMetrics {
pub diameter: DimensionValue,
pub icon_size: DimensionValue,
pub border_width: DimensionValue,
pub icon_stroke_width: DimensionValue,
}
impl Default for InlineActionButtonMetrics {
fn default() -> Self {
Self {
diameter: DimensionValue::from_pt(16.0),
icon_size: DimensionValue::from_pt(10.0),
border_width: DimensionValue::from_pt(1.0),
icon_stroke_width: DimensionValue::from_pt(1.3),
}
}
}