use crate::tokens::dtcg::DimensionValue;
use serde::{Deserialize, Serialize};
pub const CANVAS_FOOTER_HEIGHT: f32 = 24.0;
pub const COMMAND_PALETTE_WIDTH: f32 = 480.0;
pub const COMMAND_PALETTE_HEIGHT: f32 = 280.0;
pub const DEFAULT_TOAST_DURATION: f32 = 2.5;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct MenuBarMetrics {
pub bar_height: DimensionValue,
pub item_padding_x: DimensionValue,
pub item_spacing: DimensionValue,
pub dropdown_min_width: DimensionValue,
pub dropdown_max_width: DimensionValue,
pub dropdown_item_height: DimensionValue,
pub dropdown_separator_height: DimensionValue,
pub dropdown_corner_radius: DimensionValue,
pub dropdown_padding_y: DimensionValue,
pub dropdown_padding_x: DimensionValue,
pub shortcut_clearance: DimensionValue,
pub submenu_gap: DimensionValue,
pub bar_corner_radius: DimensionValue,
pub font_size: DimensionValue,
pub shortcut_font_size: DimensionValue,
}
impl Default for MenuBarMetrics {
fn default() -> Self {
Self {
bar_height: DimensionValue::from_pt(24.0),
item_padding_x: DimensionValue::from_pt(8.0),
item_spacing: DimensionValue::from_pt(2.0),
dropdown_min_width: DimensionValue::from_pt(180.0),
dropdown_max_width: DimensionValue::from_pt(360.0),
dropdown_item_height: DimensionValue::from_pt(22.0),
dropdown_separator_height: DimensionValue::from_pt(9.0),
dropdown_corner_radius: DimensionValue::from_pt(6.0),
dropdown_padding_y: DimensionValue::from_pt(4.0),
dropdown_padding_x: DimensionValue::from_pt(10.0),
shortcut_clearance: DimensionValue::from_pt(24.0),
submenu_gap: DimensionValue::from_pt(2.0),
bar_corner_radius: DimensionValue::from_pt(4.0),
font_size: DimensionValue::from_pt(13.0),
shortcut_font_size: DimensionValue::from_pt(12.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct FooterMetrics {
pub height: DimensionValue,
pub edge_padding_x: DimensionValue,
pub preset_width: DimensionValue,
pub preset_height: DimensionValue,
pub preset_spacing: DimensionValue,
pub preset_corner_radius: DimensionValue,
pub font_size: DimensionValue,
pub preset_font_size: DimensionValue,
pub separator_gap: DimensionValue,
pub coords_width: DimensionValue,
pub presets_zone_offset: DimensionValue,
pub divider_trailing_offset: DimensionValue,
pub divider_vertical_inset: DimensionValue,
}
impl Default for FooterMetrics {
fn default() -> Self {
Self {
height: DimensionValue::from_pt(CANVAS_FOOTER_HEIGHT),
edge_padding_x: DimensionValue::from_pt(10.0),
preset_width: DimensionValue::from_pt(36.0),
preset_height: DimensionValue::from_pt(18.0),
preset_spacing: DimensionValue::from_pt(2.0),
preset_corner_radius: DimensionValue::from_pt(3.0),
font_size: DimensionValue::from_pt(10.5),
preset_font_size: DimensionValue::from_pt(10.0),
separator_gap: DimensionValue::from_pt(10.0),
coords_width: DimensionValue::from_pt(75.0),
presets_zone_offset: DimensionValue::from_pt(150.0),
divider_trailing_offset: DimensionValue::from_pt(155.0),
divider_vertical_inset: DimensionValue::from_pt(5.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct PaletteMetrics {
pub width: DimensionValue,
pub max_height: DimensionValue,
pub corner_radius: DimensionValue,
pub search_bar_height: DimensionValue,
pub search_padding_x: DimensionValue,
pub search_icon_size: DimensionValue,
pub row_height: DimensionValue,
pub row_padding_x: DimensionValue,
pub row_corner_radius: DimensionValue,
pub row_inset: DimensionValue,
pub query_font_size: DimensionValue,
pub item_font_size: DimensionValue,
pub category_font_size: DimensionValue,
pub shortcut_font_size: DimensionValue,
}
impl Default for PaletteMetrics {
fn default() -> Self {
Self {
width: DimensionValue::from_pt(COMMAND_PALETTE_WIDTH),
max_height: DimensionValue::from_pt(COMMAND_PALETTE_HEIGHT),
corner_radius: DimensionValue::from_pt(10.0),
search_bar_height: DimensionValue::from_pt(36.0),
search_padding_x: DimensionValue::from_pt(12.0),
search_icon_size: DimensionValue::from_pt(14.0),
row_height: DimensionValue::from_pt(28.0),
row_padding_x: DimensionValue::from_pt(12.0),
row_corner_radius: DimensionValue::from_pt(5.0),
row_inset: DimensionValue::from_pt(4.0),
query_font_size: DimensionValue::from_pt(14.0),
item_font_size: DimensionValue::from_pt(12.5),
category_font_size: DimensionValue::from_pt(10.5),
shortcut_font_size: DimensionValue::from_pt(10.5),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ContextMenuMetrics {
pub item_height: DimensionValue,
pub min_width: DimensionValue,
pub padding: DimensionValue,
pub item_padding_x: DimensionValue,
pub corner_radius: DimensionValue,
pub row_corner_radius: DimensionValue,
pub shortcut_clearance: DimensionValue,
pub font_size: DimensionValue,
}
impl Default for ContextMenuMetrics {
fn default() -> Self {
Self {
item_height: DimensionValue::from_pt(22.0),
min_width: DimensionValue::from_pt(140.0),
padding: DimensionValue::from_pt(4.0),
item_padding_x: DimensionValue::from_pt(8.0),
corner_radius: DimensionValue::from_pt(6.0),
row_corner_radius: DimensionValue::from_pt(4.0),
shortcut_clearance: DimensionValue::from_pt(24.0),
font_size: DimensionValue::from_pt(12.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ToastMetrics {
pub height: DimensionValue,
pub min_width: DimensionValue,
pub top_margin: DimensionValue,
pub spacing: DimensionValue,
pub padding_x: DimensionValue,
pub duration_secs: DimensionValue,
pub font_size: DimensionValue,
}
impl Default for ToastMetrics {
fn default() -> Self {
Self {
height: DimensionValue::from_pt(32.0),
min_width: DimensionValue::from_pt(120.0),
top_margin: DimensionValue::from_pt(20.0),
spacing: DimensionValue::from_pt(8.0),
padding_x: DimensionValue::from_pt(32.0),
duration_secs: DimensionValue::from_pt(DEFAULT_TOAST_DURATION),
font_size: DimensionValue::from_pt(12.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct NavigationMetrics {
pub menu_bar: MenuBarMetrics,
pub footer: FooterMetrics,
pub palette: PaletteMetrics,
pub context_menu: ContextMenuMetrics,
pub toast: ToastMetrics,
}