//! The normalized snapshot a platform adapter produces. use gpui::{Hsla, Pixels}; use crate::ThemeVariant; /// Accessibility preferences read from the OS, forwarded into resolution. #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct AccessibilityPreferences { pub high_contrast: bool, pub reduce_motion: bool, pub reduce_transparency: bool, } /// Which adapter produced a [`SystemTheme`]. #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum SourceKind { #[default] Fallback, Macos, } impl SourceKind { pub fn label(self) -> &'static str { match self { Self::Fallback => "neutral fallback", Self::Macos => "macOS (NSColor)", } } } /// A partial palette with optional colors. #[derive(Clone, Copy, Debug, Default, PartialEq)] pub struct PartialPalette { pub background: Option, pub foreground: Option, pub surface: Option, pub surface_foreground: Option, pub primary_foreground: Option, pub accent_foreground: Option, pub secondary: Option, pub secondary_foreground: Option, pub muted: Option, pub muted_foreground: Option, pub destructive: Option, pub border: Option, pub input: Option, pub ring: Option, pub selection: Option, } /// A normalized snapshot of the running system's theme. #[derive(Clone, Copy, Debug, PartialEq)] pub struct SystemTheme { pub variant: ThemeVariant, pub accent: Option, pub palette: PartialPalette, pub control_radius: Option, pub accessibility: AccessibilityPreferences, pub source: SourceKind, } impl SystemTheme { pub fn fallback(variant: ThemeVariant) -> Self { Self { variant, accent: None, palette: PartialPalette::default(), control_radius: None, accessibility: AccessibilityPreferences::default(), source: SourceKind::Fallback, } } }