use crate::theme::{MacBackgroundStyle, MacTheme};
use crate::tokens::{
ButtonMetrics, ColorWellMetrics, ContextMenuMetrics, FocusRingMetrics, FooterMetrics,
LayoutMetrics, LevelIndicatorMetrics, MacControlMetrics, MacMotionTokens, MacTypographyTokens,
MenuBarMetrics, NavigationMetrics, OutlineViewMetrics, PaletteMetrics, PathControlMetrics,
PopUpButtonMetrics, PopoverMetrics, ProgressIndicatorMetrics, ScrollViewMetrics,
SearchFieldMetrics, SegmentedMetrics, SliderMetrics, SplitViewMetrics, StackViewMetrics,
StepperMetrics, TableViewMetrics, TextFieldMetrics, ThumbnailCellMetrics, ToastMetrics,
ToggleMetrics, TokenFieldMetrics, ToolbarMetrics, TrimScrubberMetrics,
};
use egui::Color32;
impl MacTheme {
pub fn control_metrics(&self) -> &MacControlMetrics {
self.tokens().control_metrics()
}
pub fn focus_ring(&self) -> &FocusRingMetrics {
&self.control_metrics().focus_ring
}
pub fn text_field(&self) -> &TextFieldMetrics {
&self.control_metrics().text_field
}
pub fn button(&self) -> &ButtonMetrics {
&self.control_metrics().button
}
pub fn segmented(&self) -> &SegmentedMetrics {
&self.control_metrics().segmented
}
pub fn popover_metrics(&self) -> &PopoverMetrics {
self.tokens().popover_metrics()
}
pub fn toolbar_metrics(&self) -> &ToolbarMetrics {
self.tokens().toolbar_metrics()
}
pub fn slider(&self) -> &SliderMetrics {
self.tokens().slider_metrics()
}
pub fn thumbnail(&self) -> &ThumbnailCellMetrics {
self.tokens().thumbnail_metrics()
}
pub fn split_view(&self) -> &SplitViewMetrics {
self.tokens().split_view_metrics()
}
pub fn layout_metrics(&self) -> &LayoutMetrics {
self.tokens().layout_metrics()
}
pub fn scroll_view(&self) -> &ScrollViewMetrics {
self.tokens().scroll_view_metrics()
}
pub fn stack_view(&self) -> &StackViewMetrics {
self.tokens().stack_view_metrics()
}
pub fn outline_view(&self) -> &OutlineViewMetrics {
self.tokens().outline_view_metrics()
}
pub fn popup_button(&self) -> &PopUpButtonMetrics {
self.tokens().popup_button_metrics()
}
pub fn search_field(&self) -> &SearchFieldMetrics {
self.tokens().search_field_metrics()
}
pub fn stepper(&self) -> &StepperMetrics {
self.tokens().stepper_metrics()
}
pub fn color_well(&self) -> &ColorWellMetrics {
self.tokens().color_well_metrics()
}
pub fn toggle(&self) -> &ToggleMetrics {
self.tokens().toggle_metrics()
}
pub fn progress_indicator(&self) -> &ProgressIndicatorMetrics {
self.tokens().progress_indicator_metrics()
}
pub fn table_view(&self) -> &TableViewMetrics {
self.tokens().table_view_metrics()
}
pub fn token_field(&self) -> &TokenFieldMetrics {
self.tokens().token_field_metrics()
}
pub fn level_indicator(&self) -> &LevelIndicatorMetrics {
self.tokens().level_indicator_metrics()
}
pub fn trim_scrubber(&self) -> &TrimScrubberMetrics {
self.tokens().trim_scrubber_metrics()
}
pub fn path_control(&self) -> &PathControlMetrics {
self.tokens().path_control_metrics()
}
pub fn navigation_metrics(&self) -> &NavigationMetrics {
self.tokens().navigation_metrics()
}
pub fn menu_bar_metrics(&self) -> &MenuBarMetrics {
self.tokens().menu_bar_metrics()
}
pub fn footer_metrics(&self) -> &FooterMetrics {
self.tokens().footer_metrics()
}
pub fn palette_metrics(&self) -> &PaletteMetrics {
self.tokens().palette_metrics()
}
pub fn context_menu_metrics(&self) -> &ContextMenuMetrics {
self.tokens().context_menu_metrics()
}
pub fn toast_metrics(&self) -> &ToastMetrics {
self.tokens().toast_metrics()
}
pub fn motion(&self) -> &MacMotionTokens {
self.tokens().motion()
}
pub fn typography(&self) -> &MacTypographyTokens {
self.tokens().typography()
}
pub fn disabled_opacity(&self) -> f32 {
self.control_metrics().disabled_opacity.points()
}
pub fn background_style(&self, bg: Color32) -> MacBackgroundStyle {
MacBackgroundStyle::from_color(bg)
}
pub fn window_background_style(&self) -> MacBackgroundStyle {
MacBackgroundStyle::from_color(self.window_background())
}
pub fn control_background_style(&self) -> MacBackgroundStyle {
MacBackgroundStyle::from_color(self.control_background())
}
pub fn selected_control_background_style(&self) -> MacBackgroundStyle {
MacBackgroundStyle::from_color(self.selected_control())
}
pub fn paint_focus_ring(&self, painter: &egui::Painter, rect: egui::Rect, corner_radius: f32) {
let ring = self.focus_ring();
let focus_rect = rect.expand(ring.offset.points());
let focus_radius = corner_radius + ring.corner_radius_delta.points();
painter.rect_stroke(
focus_rect,
egui::CornerRadius::same(focus_radius as u8),
egui::Stroke::new(ring.stroke_width.points(), self.keyboard_focus_indicator()),
egui::StrokeKind::Outside,
);
}
}