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