diff --git a/crates/theme/src/settings.rs b/crates/theme/src/settings.rs index 8d3f7ba5e60e534b753e5b3cd1bbc7e1140b4884..04be9c4e5afcc4b2ca2be9739227159f787e6a32 100644 --- a/crates/theme/src/settings.rs +++ b/crates/theme/src/settings.rs @@ -579,6 +579,22 @@ impl ThemeSettings { clamp_font_size(font_size) } + /// Returns the buffer font size, read from the settings. + /// + /// The real buffer font size is stored in-memory, to support temporary font size changes. + /// Use [`Self::buffer_font_size`] to get the real font size. + pub fn buffer_font_size_settings(&self) -> Pixels { + self.buffer_font_size + } + + /// Returns the UI font size, read from the settings. + /// + /// The real UI font size is stored in-memory, to support temporary font size changes. + /// Use [`Self::ui_font_size`] to get the real font size. + pub fn ui_font_size_settings(&self) -> Pixels { + self.ui_font_size + } + // TODO: Rename: `line_height` -> `buffer_line_height` /// Returns the buffer's line height. pub fn line_height(&self) -> f32 { diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index 1b9bc1033e9991f98c03e6f7b70e5b3ab566f621..fd3bdb6dc0fa29e08aa22e90fecbdc5dd14901ca 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -23,6 +23,7 @@ use std::path::Path; use std::sync::Arc; use ::settings::Settings; +use ::settings::SettingsStore; use anyhow::Result; use fallback_themes::apply_status_color_defaults; use fs::Fs; @@ -101,6 +102,24 @@ pub fn init(themes_to_load: LoadThemes, cx: &mut App) { ThemeSettings::register(cx); FontFamilyCache::init_global(cx); + + let mut prev_buffer_font_size_settings = + ThemeSettings::get_global(cx).buffer_font_size_settings(); + let mut prev_ui_font_size_settings = ThemeSettings::get_global(cx).ui_font_size_settings(); + cx.observe_global::(move |cx| { + let buffer_font_size_settings = ThemeSettings::get_global(cx).buffer_font_size_settings(); + if buffer_font_size_settings != prev_buffer_font_size_settings { + prev_buffer_font_size_settings = buffer_font_size_settings; + reset_buffer_font_size(cx); + } + + let ui_font_size_settings = ThemeSettings::get_global(cx).ui_font_size_settings(); + if ui_font_size_settings != prev_ui_font_size_settings { + prev_ui_font_size_settings = ui_font_size_settings; + reset_ui_font_size(cx); + } + }) + .detach(); } /// Implementing this trait allows accessing the active theme.