In the current code implementation, it seems that the only difference
between `all_font_names` and `all_font_families` is whether dynamically
loaded font resources are included. Specifically, `all_font_families`
returns the names of all system fonts, while `all_font_names` includes
both the system font names and the dynamically loaded font names. In
other words, `all_font_families` is a strict subset of `all_font_names`.
This is what I observed in my tests on macOS.
<img width="682" alt="截屏2024-07-28 00 49 29"
src="https://github.com/user-attachments/assets/47317c28-0074-49d2-bcfa-052cab13e335">
Related codes:
```rust
let x: HashSet<_> = self.all_font_names().into_iter().collect();
let y: HashSet<_> = self.all_font_families().into_iter().collect();
let only_in_x = x.difference(&y).collect::<Vec<_>>();
let only_in_y = y.difference(&x).collect::<Vec<_>>();
println!("=====================================");
println!("1 -> {:?}", only_in_x);
println!("-------------------------------------");
println!("2 -> {:?}", only_in_y);
```
Release Notes:
- N/A
@@ -77,17 +77,6 @@ impl PlatformTextSystem for CosmicTextSystem {
result
}
- fn all_font_families(&self) -> Vec<String> {- self.0- .read()- .font_system- .db()- .faces()- // todo(linux) this will list the same font family multiple times- .filter_map(|face| face.families.first().map(|family| family.0.clone()))- .collect_vec()- }-
fn font_id(&self, font: &Font) -> Result<FontId> {
// todo(linux): Do we need to use CosmicText's Font APIs? Can we consolidate this to use font_kit?
let mut state = self.0.write();
@@ -17,7 +17,7 @@ use crate::{
StrikethroughStyle, UnderlineStyle,
};
use anyhow::anyhow;
-use collections::{BTreeSet, FxHashMap};
+use collections::FxHashMap;
use core::fmt;
use derive_more::Deref;
use itertools::Itertools;
@@ -78,18 +78,15 @@ impl TextSystem {
/// Get a list of all available font names from the operating system.
pub fn all_font_names(&self) -> Vec<String> {
- let mut names: BTreeSet<_> = self- .platform_text_system- .all_font_names()- .into_iter()- .collect();- names.extend(self.platform_text_system.all_font_families());
+ let mut names = self.platform_text_system.all_font_names();
names.extend(
self.fallback_font_stack
.iter()
.map(|font| font.family.to_string()),
);
- names.into_iter().collect()
+ names.sort();
+ names.dedup();
+ names
}
/// Add a font's data to the text system.