Skip to main content

egui_macview/theme/
accessors.rs

1//! Metric and semantic token accessors for `MacTheme`.
2
3use crate::theme::{MacBackgroundStyle, MacTheme};
4use crate::tokens::{
5    BoxViewMetrics, ButtonMetrics, CollectionViewMetrics, ColorWellMetrics, ComboBoxMetrics,
6    ContextMenuMetrics, DatePickerMetrics, DisclosureGroupMetrics, FocusRingMetrics, FooterMetrics,
7    LayoutMetrics, LevelIndicatorMetrics, MacControlMetrics, MacMotionTokens, MacTypographyTokens,
8    MenuBarMetrics, NavigationMetrics, OutlineViewMetrics, PaletteMetrics, PathControlMetrics,
9    PlayerViewMetrics, PopUpButtonMetrics, PopoverMetrics, ProgressIndicatorMetrics,
10    RuleEditorMetrics, ScrollViewMetrics, SearchFieldMetrics, SegmentedMetrics, SliderMetrics, SplitViewMetrics,
11    StackViewMetrics, StepperMetrics, TableViewMetrics, TabViewMetrics, TextFieldMetrics,
12    ThumbnailCellMetrics, ToastMetrics, ToggleMetrics, TokenFieldMetrics, ToolbarMetrics,
13    TrimScrubberMetrics,
14};
15use egui::Color32;
16
17impl MacTheme {
18    /// Resolves top-level control metrics collection.
19    pub fn control_metrics(&self) -> &MacControlMetrics {
20        self.tokens().control_metrics()
21    }
22
23    /// Resolves focus ring geometry metrics.
24    pub fn focus_ring(&self) -> &FocusRingMetrics {
25        &self.control_metrics().focus_ring
26    }
27
28    /// Resolves text field geometry metrics.
29    pub fn text_field(&self) -> &TextFieldMetrics {
30        &self.control_metrics().text_field
31    }
32
33    /// Resolves push button geometry metrics.
34    pub fn button(&self) -> &ButtonMetrics {
35        &self.control_metrics().button
36    }
37
38    /// Resolves segmented control geometry metrics.
39    pub fn segmented(&self) -> &SegmentedMetrics {
40        &self.control_metrics().segmented
41    }
42
43    /// Resolves popover and HUD panel geometry metrics.
44    pub fn popover_metrics(&self) -> &PopoverMetrics {
45        self.tokens().popover_metrics()
46    }
47
48    /// Resolves window toolbar geometry metrics.
49    pub fn toolbar_metrics(&self) -> &ToolbarMetrics {
50        self.tokens().toolbar_metrics()
51    }
52
53    /// Resolves slider control geometry metrics.
54    pub fn slider(&self) -> &SliderMetrics {
55        self.tokens().slider_metrics()
56    }
57
58    /// Resolves thumbnail cell geometry metrics.
59    pub fn thumbnail(&self) -> &ThumbnailCellMetrics {
60        self.tokens().thumbnail_metrics()
61    }
62
63    /// Resolves split view divider and handle geometry metrics.
64    pub fn split_view(&self) -> &SplitViewMetrics {
65        self.tokens().split_view_metrics()
66    }
67
68    /// Resolves layout container geometry metrics.
69    pub fn layout_metrics(&self) -> &LayoutMetrics {
70        self.tokens().layout_metrics()
71    }
72
73    /// Resolves scroll view and overlay scrollbar geometry metrics.
74    pub fn scroll_view(&self) -> &ScrollViewMetrics {
75        self.tokens().scroll_view_metrics()
76    }
77
78    /// Resolves stack view linear layout geometry metrics.
79    pub fn stack_view(&self) -> &StackViewMetrics {
80        self.tokens().stack_view_metrics()
81    }
82
83    /// Resolves outline view hierarchical table geometry metrics.
84    pub fn outline_view(&self) -> &OutlineViewMetrics {
85        self.tokens().outline_view_metrics()
86    }
87
88    /// Resolves pop-up button geometry metrics.
89    pub fn popup_button(&self) -> &PopUpButtonMetrics {
90        self.tokens().popup_button_metrics()
91    }
92
93    /// Resolves search field geometry metrics.
94    pub fn search_field(&self) -> &SearchFieldMetrics {
95        self.tokens().search_field_metrics()
96    }
97
98    /// Resolves numeric stepper control geometry metrics.
99    pub fn stepper(&self) -> &StepperMetrics {
100        self.tokens().stepper_metrics()
101    }
102
103    /// Resolves color well swatch control geometry metrics.
104    pub fn color_well(&self) -> &ColorWellMetrics {
105        self.tokens().color_well_metrics()
106    }
107
108    /// Resolves toggle switch control geometry metrics.
109    pub fn toggle(&self) -> &ToggleMetrics {
110        self.tokens().toggle_metrics()
111    }
112
113    /// Resolves progress indicator control geometry metrics.
114    pub fn progress_indicator(&self) -> &ProgressIndicatorMetrics {
115        self.tokens().progress_indicator_metrics()
116    }
117
118    /// Resolves table view and header geometry metrics.
119    pub fn table_view(&self) -> &TableViewMetrics {
120        self.tokens().table_view_metrics()
121    }
122
123    /// Resolves token field pill input geometry metrics.
124    pub fn token_field(&self) -> &TokenFieldMetrics {
125        self.tokens().token_field_metrics()
126    }
127
128    /// Resolves level indicator meter geometry metrics.
129    pub fn level_indicator(&self) -> &LevelIndicatorMetrics {
130        self.tokens().level_indicator_metrics()
131    }
132
133    /// Resolves trim scrubber timeline geometry metrics.
134    pub fn trim_scrubber(&self) -> &TrimScrubberMetrics {
135        self.tokens().trim_scrubber_metrics()
136    }
137
138    /// Resolves path control breadcrumb geometry metrics.
139    pub fn path_control(&self) -> &PathControlMetrics {
140        self.tokens().path_control_metrics()
141    }
142
143    /// Resolves disclosure group and button geometry metrics.
144    pub fn disclosure_group(&self) -> &DisclosureGroupMetrics {
145        self.tokens().disclosure_group_metrics()
146    }
147
148    /// Resolves combo box geometry metrics.
149    pub fn combo_box(&self) -> &ComboBoxMetrics {
150        self.tokens().combo_box_metrics()
151    }
152
153    /// Resolves tab view layout and content insets metrics.
154    pub fn tab_view(&self) -> &TabViewMetrics {
155        self.tokens().tab_view_metrics()
156    }
157
158    /// Resolves date picker geometry metrics.
159    pub fn date_picker(&self) -> &DatePickerMetrics {
160        self.tokens().date_picker_metrics()
161    }
162
163    /// Resolves collection view flow layout and selection metrics.
164    pub fn collection_view(&self) -> &CollectionViewMetrics {
165        self.tokens().collection_view_metrics()
166    }
167
168    /// Resolves player view media presentation metrics.
169    pub fn player_view(&self) -> &PlayerViewMetrics {
170        self.tokens().player_view_metrics()
171    }
172
173    /// Resolves box view container and separator metrics.
174    pub fn box_view(&self) -> &BoxViewMetrics {
175        self.tokens().box_view_metrics()
176    }
177
178    /// Resolves rule editor layout and button metrics.
179    pub fn rule_editor(&self) -> &RuleEditorMetrics {
180        self.tokens().rule_editor_metrics()
181    }
182
183    /// Resolves navigation and feedback metrics collection.
184    pub fn navigation_metrics(&self) -> &NavigationMetrics {
185        self.tokens().navigation_metrics()
186    }
187
188    /// Resolves menu bar and dropdown geometry metrics.
189    pub fn menu_bar_metrics(&self) -> &MenuBarMetrics {
190        self.tokens().menu_bar_metrics()
191    }
192
193    /// Resolves canvas footer geometry metrics.
194    pub fn footer_metrics(&self) -> &FooterMetrics {
195        self.tokens().footer_metrics()
196    }
197
198    /// Resolves command palette modal geometry metrics.
199    pub fn palette_metrics(&self) -> &PaletteMetrics {
200        self.tokens().palette_metrics()
201    }
202
203    /// Resolves context menu geometry metrics.
204    pub fn context_menu_metrics(&self) -> &ContextMenuMetrics {
205        self.tokens().context_menu_metrics()
206    }
207
208    /// Resolves toast notification geometry metrics.
209    pub fn toast_metrics(&self) -> &ToastMetrics {
210        self.tokens().toast_metrics()
211    }
212
213    /// Resolves CoreAnimation motion preset tokens.
214    pub fn motion(&self) -> &MacMotionTokens {
215        self.tokens().motion()
216    }
217
218    /// Resolves typography and SF Pro tracking tokens.
219    pub fn typography(&self) -> &MacTypographyTokens {
220        self.tokens().typography()
221    }
222
223    /// Resolves opacity multiplier for disabled controls (`0.45`).
224    pub fn disabled_opacity(&self) -> f32 {
225        self.control_metrics().disabled_opacity.points()
226    }
227
228    /// Resolves the `MacBackgroundStyle` (Light or Dark) for any background color.
229    pub fn background_style(&self, bg: Color32) -> MacBackgroundStyle {
230        MacBackgroundStyle::from_color(bg)
231    }
232
233    /// Resolves the `MacBackgroundStyle` for the window background.
234    pub fn window_background_style(&self) -> MacBackgroundStyle {
235        MacBackgroundStyle::from_color(self.window_background())
236    }
237
238    /// Resolves the `MacBackgroundStyle` for the control background.
239    pub fn control_background_style(&self) -> MacBackgroundStyle {
240        MacBackgroundStyle::from_color(self.control_background())
241    }
242
243    /// Resolves the `MacBackgroundStyle` for the selected control background.
244    pub fn selected_control_background_style(&self) -> MacBackgroundStyle {
245        MacBackgroundStyle::from_color(self.selected_control())
246    }
247
248    /// Renders an AppKit outer keyboard focus ring (`NSFocusRingPlacementOutside`) around `rect`.
249    pub fn paint_focus_ring(&self, painter: &egui::Painter, rect: egui::Rect, corner_radius: f32) {
250        let ring = self.focus_ring();
251        let focus_rect = rect.expand(ring.offset.points());
252        let focus_radius = corner_radius + ring.corner_radius_delta.points();
253        painter.rect_stroke(
254            focus_rect,
255            egui::CornerRadius::same(focus_radius as u8),
256            egui::Stroke::new(ring.stroke_width.points(), self.keyboard_focus_indicator()),
257            egui::StrokeKind::Outside,
258        );
259    }
260}