use gpui::{App, Font, Global, Pixels};
use crate::UiDensity;
pub trait ThemeSettingsProvider: Send + Sync + 'static {
fn ui_font<'a>(&'a self, cx: &'a App) -> &'a Font;
fn buffer_font<'a>(&'a self, cx: &'a App) -> &'a Font;
fn ui_font_size(&self, cx: &App) -> Pixels;
fn buffer_font_size(&self, cx: &App) -> Pixels;
fn ui_density(&self, cx: &App) -> UiDensity;
}
struct GlobalThemeSettingsProvider(Box<dyn ThemeSettingsProvider>);
impl Global for GlobalThemeSettingsProvider {}
pub fn set_theme_settings_provider(provider: Box<dyn ThemeSettingsProvider>, cx: &mut App) {
cx.set_global(GlobalThemeSettingsProvider(provider));
}
pub fn theme_settings(cx: &App) -> &dyn ThemeSettingsProvider {
&*cx.global::<GlobalThemeSettingsProvider>().0
}