egui_macview/tokens/
mod.rs1pub mod color;
7pub mod dtcg;
8pub mod metrics;
9pub mod motion;
10pub mod typography;
11
12pub use color::{MacAppearanceColors, MacColorTokens};
13pub use dtcg::{ColorValue, DimensionValue};
14pub use metrics::{
15 ButtonMetrics, ButtonSizeMetrics, ColorWellMetrics, ContextMenuMetrics, FocusRingMetrics,
16 FooterMetrics, LayoutMetrics, LevelIndicatorMetrics, MacControlMetrics, MacMetricsTokens,
17 MenuBarMetrics, NavigationMetrics, OutlineViewMetrics, PaletteMetrics, PathControlMetrics,
18 PopUpButtonMetrics, PopoverMetrics, ProgressIndicatorMetrics, ProgressSizeMetrics,
19 ScrollViewMetrics, SearchFieldMetrics, SegmentedMetrics, SegmentedSizeMetrics, SliderMetrics,
20 SplitViewMetrics, StackViewMetrics, StepperMetrics, TableViewMetrics, TextFieldMetrics,
21 TextFieldSizeMetrics, ThumbnailCellMetrics, ToastMetrics, ToggleMetrics, TokenFieldMetrics,
22 ToolbarMetrics, TrimScrubberMetrics, CANVAS_FOOTER_HEIGHT, COMMAND_PALETTE_HEIGHT,
23 COMMAND_PALETTE_WIDTH, DEFAULT_TOAST_DURATION,
24};
25pub use motion::{MacMotionTokens, MotionPresetToken};
26pub use typography::{
27 sf_pro_tracking, CubicCoefficients, CubicFit, MacTypographyTokens, PolynomialSpec001,
28 QuadraticCoefficients, QuadraticFit, TrackingPoint, TrackingTableEntry,
29};
30
31use serde::{Deserialize, Serialize};
32
33#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
35pub struct MacViewTokens {
36 pub metrics: MacMetricsTokens,
38 pub color: MacColorTokens,
40 pub typography: MacTypographyTokens,
42 pub motion: MacMotionTokens,
44}
45
46#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
48pub struct MacDesignTokens {
49 #[serde(rename = "$name", default)]
51 pub name: String,
52 #[serde(rename = "$version", default)]
54 pub version: String,
55 #[serde(rename = "$description", default)]
57 pub description: String,
58 pub macview: MacViewTokens,
60}
61
62impl MacDesignTokens {
63 pub fn load_default() -> Self {
68 std::thread::Builder::new()
69 .name("mac_token_loader".into())
70 .stack_size(4 * 1024 * 1024)
71 .spawn(|| {
72 Self::from_json(include_str!("../../tokens/design_tokens.json"))
73 .expect("Failed to parse embedded tokens/design_tokens.json")
74 })
75 .expect("Failed to spawn token loader thread")
76 .join()
77 .expect("Token loader panicked")
78 }
79
80 pub fn from_json(json: &str) -> Result<Self, serde_json::Error> {
82 serde_json::from_str(json)
83 }
84
85 #[inline]
87 pub fn control_metrics(&self) -> &MacControlMetrics {
88 &self.macview.metrics.control
89 }
90
91 #[inline]
93 pub fn toolbar_metrics(&self) -> &ToolbarMetrics {
94 &self.macview.metrics.toolbar
95 }
96
97 #[inline]
99 pub fn popover_metrics(&self) -> &PopoverMetrics {
100 &self.macview.metrics.popover
101 }
102
103 #[inline]
105 pub fn split_view_metrics(&self) -> &SplitViewMetrics {
106 &self.macview.metrics.split_view
107 }
108
109 #[inline]
111 pub fn layout_metrics(&self) -> &LayoutMetrics {
112 &self.macview.metrics.layout
113 }
114
115 #[inline]
117 pub fn scroll_view_metrics(&self) -> &ScrollViewMetrics {
118 &self.macview.metrics.layout.scroll_view
119 }
120
121 #[inline]
123 pub fn stack_view_metrics(&self) -> &StackViewMetrics {
124 &self.macview.metrics.layout.stack_view
125 }
126
127 #[inline]
129 pub fn outline_view_metrics(&self) -> &OutlineViewMetrics {
130 &self.macview.metrics.control.outline_view
131 }
132
133 #[inline]
135 pub fn slider_metrics(&self) -> &SliderMetrics {
136 &self.macview.metrics.control.slider
137 }
138
139 #[inline]
141 pub fn thumbnail_metrics(&self) -> &ThumbnailCellMetrics {
142 &self.macview.metrics.control.thumbnail
143 }
144
145 #[inline]
147 pub fn popup_button_metrics(&self) -> &PopUpButtonMetrics {
148 &self.macview.metrics.control.popup_button
149 }
150
151 #[inline]
153 pub fn search_field_metrics(&self) -> &SearchFieldMetrics {
154 &self.macview.metrics.control.search_field
155 }
156
157 #[inline]
159 pub fn stepper_metrics(&self) -> &StepperMetrics {
160 &self.macview.metrics.control.stepper
161 }
162
163 #[inline]
165 pub fn color_well_metrics(&self) -> &ColorWellMetrics {
166 &self.macview.metrics.control.color_well
167 }
168
169 #[inline]
171 pub fn toggle_metrics(&self) -> &ToggleMetrics {
172 &self.macview.metrics.control.toggle
173 }
174
175 #[inline]
177 pub fn navigation_metrics(&self) -> &NavigationMetrics {
178 &self.macview.metrics.navigation
179 }
180
181 #[inline]
183 pub fn menu_bar_metrics(&self) -> &MenuBarMetrics {
184 &self.macview.metrics.navigation.menu_bar
185 }
186
187 #[inline]
189 pub fn footer_metrics(&self) -> &FooterMetrics {
190 &self.macview.metrics.navigation.footer
191 }
192
193 #[inline]
195 pub fn palette_metrics(&self) -> &PaletteMetrics {
196 &self.macview.metrics.navigation.palette
197 }
198
199 #[inline]
201 pub fn context_menu_metrics(&self) -> &ContextMenuMetrics {
202 &self.macview.metrics.navigation.context_menu
203 }
204
205 #[inline]
207 pub fn toast_metrics(&self) -> &ToastMetrics {
208 &self.macview.metrics.navigation.toast
209 }
210
211 #[inline]
213 pub fn progress_indicator_metrics(&self) -> &ProgressIndicatorMetrics {
214 &self.macview.metrics.control.progress_indicator
215 }
216
217 #[inline]
219 pub fn table_view_metrics(&self) -> &TableViewMetrics {
220 &self.macview.metrics.control.table_view
221 }
222
223 #[inline]
225 pub fn token_field_metrics(&self) -> &TokenFieldMetrics {
226 &self.macview.metrics.control.token_field
227 }
228
229 #[inline]
231 pub fn level_indicator_metrics(&self) -> &LevelIndicatorMetrics {
232 &self.macview.metrics.control.level_indicator
233 }
234
235 #[inline]
237 pub fn trim_scrubber_metrics(&self) -> &TrimScrubberMetrics {
238 &self.macview.metrics.control.trim_scrubber
239 }
240
241 #[inline]
243 pub fn path_control_metrics(&self) -> &PathControlMetrics {
244 &self.macview.metrics.control.path_control
245 }
246
247 #[inline]
249 pub fn colors(&self) -> &MacColorTokens {
250 &self.macview.color
251 }
252
253 #[inline]
255 pub fn typography(&self) -> &MacTypographyTokens {
256 &self.macview.typography
257 }
258
259 #[inline]
261 pub fn motion(&self) -> &MacMotionTokens {
262 &self.macview.motion
263 }
264}