diff --git a/crates/gpui/src/platform.rs b/crates/gpui/src/platform.rs index 5a2335919ebe6ff9b2277e02d4f6f55b4dc9a80c..f165cd9c2b5aa71a3a982a5e23faafaca2b8bf3a 100644 --- a/crates/gpui/src/platform.rs +++ b/crates/gpui/src/platform.rs @@ -192,7 +192,7 @@ pub trait PlatformDispatcher: Send + Sync { pub trait PlatformTextSystem: Send + Sync { fn add_fonts(&self, fonts: &[Arc>]) -> Result<()>; - fn all_font_families(&self) -> Vec; + fn all_font_names(&self) -> Vec; fn font_id(&self, descriptor: &Font) -> Result; fn font_metrics(&self, font_id: FontId) -> FontMetrics; fn typographic_bounds(&self, font_id: FontId, glyph_id: GlyphId) -> Result>; diff --git a/crates/gpui/src/platform/mac/text_system.rs b/crates/gpui/src/platform/mac/text_system.rs index 68f4a63326757f8a87217a133aef005d0c8e5c86..06179e126b6b779a56d25b1bf154eef37162a646 100644 --- a/crates/gpui/src/platform/mac/text_system.rs +++ b/crates/gpui/src/platform/mac/text_system.rs @@ -5,7 +5,7 @@ use crate::{ }; use anyhow::anyhow; use cocoa::appkit::{CGFloat, CGPoint}; -use collections::HashMap; +use collections::{BTreeSet, HashMap}; use core_foundation::{ array::CFIndex, attributed_string::{CFAttributedStringRef, CFMutableAttributedString}, @@ -78,12 +78,16 @@ impl PlatformTextSystem for MacTextSystem { self.0.write().add_fonts(fonts) } - fn all_font_families(&self) -> Vec { - self.0 - .read() - .system_source - .all_families() - .expect("core text should never return an error") + fn all_font_names(&self) -> Vec { + let collection = core_text::font_collection::create_for_all_families(); + let Some(descriptors) = collection.get_descriptors() else { + return vec![]; + }; + let mut names = BTreeSet::new(); + for descriptor in descriptors.into_iter() { + names.insert(descriptor.display_name()); + } + names.into_iter().collect() } fn font_id(&self, font: &Font) -> Result { diff --git a/crates/gpui/src/text_system.rs b/crates/gpui/src/text_system.rs index 24438d8c819527a3e8dd869f9e1dac179d9dd618..34470aff021297d9b8a12025e5348550cd6111c5 100644 --- a/crates/gpui/src/text_system.rs +++ b/crates/gpui/src/text_system.rs @@ -65,8 +65,8 @@ impl TextSystem { } } - pub fn all_font_families(&self) -> Vec { - let mut families = self.platform_text_system.all_font_families(); + pub fn all_font_names(&self) -> Vec { + let mut families = self.platform_text_system.all_font_names(); families.append( &mut self .fallback_font_stack @@ -101,7 +101,6 @@ impl TextSystem { if let Ok(font_id) = self.font_id(font) { return font_id; } - for fallback in &self.fallback_font_stack { if let Ok(font_id) = self.font_id(fallback) { return font_id; diff --git a/crates/theme/src/settings.rs b/crates/theme/src/settings.rs index efc62ed59c429b97420fc276d1f2e2eca6c841cc..90c61ce269019e405ca825fb1bd6d30597fd54cf 100644 --- a/crates/theme/src/settings.rs +++ b/crates/theme/src/settings.rs @@ -205,7 +205,7 @@ impl settings::Settings for ThemeSettings { let available_fonts = cx .text_system() - .all_font_families() + .all_font_names() .into_iter() .map(Value::String) .collect();