From 2c1d564d628b10ba1f56901e73c3657132dd1a5e Mon Sep 17 00:00:00 2001 From: Edgar Geier Date: Wed, 1 Mar 2023 11:50:10 +0100 Subject: [PATCH] Update fontdb dependency to version 0.13 --- Cargo.toml | 2 +- src/font/fallback/mod.rs | 13 ++++++++----- src/font/mod.rs | 12 ++++++++++++ src/font/system/redox.rs | 3 +-- src/font/system/std.rs | 3 +-- src/shape.rs | 2 +- 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1e82553..d34a7fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ documentation = "https://docs.rs/cosmic-text/latest/cosmic_text/" repository = "https://github.com/pop-os/cosmic-text" [dependencies] -fontdb = { version = "0.10.0", default-features = false } +fontdb = { version = "0.13.0", default-features = false } libm = "0.2.6" log = "0.4.17" ouroboros = "0.15.5" diff --git a/src/font/fallback/mod.rs b/src/font/fallback/mod.rs index 7b8fa8c..d8abf88 100644 --- a/src/font/fallback/mod.rs +++ b/src/font/fallback/mod.rs @@ -71,7 +71,7 @@ impl<'a> FontFallbackIter<'a> { "Failed to find preset fallback for {:?} locale '{}', used '{}': '{}'", self.scripts, self.locale, - font.info.family, + font.name(), word ); } else if !self.scripts.is_empty() && self.common_i > 0 { @@ -95,7 +95,7 @@ impl<'a> Iterator for FontFallbackIter<'a> { self.default_i += 1; for font in self.fonts.iter() { - if font.info.family == default_family { + if font.contains_family(default_family) { return Some(font); } } @@ -109,7 +109,7 @@ impl<'a> Iterator for FontFallbackIter<'a> { let script_family = script_families[self.script_i.1]; self.script_i.1 += 1; for font in self.fonts.iter() { - if font.info.family == script_family { + if font.contains_family(script_family) { return Some(font); } } @@ -130,7 +130,7 @@ impl<'a> Iterator for FontFallbackIter<'a> { let common_family = common_families[self.common_i]; self.common_i += 1; for font in self.fonts.iter() { - if font.info.family == common_family { + if font.contains_family(common_family) { return Some(font); } } @@ -143,7 +143,10 @@ impl<'a> Iterator for FontFallbackIter<'a> { while self.other_i < self.fonts.len() { let font = &self.fonts[self.other_i]; self.other_i += 1; - if !forbidden_families.contains(&font.info.family.as_str()) { + if forbidden_families + .iter() + .all(|family| !font.contains_family(family)) + { return Some(font); } } diff --git a/src/font/mod.rs b/src/font/mod.rs index f82481b..2ef0d45 100644 --- a/src/font/mod.rs +++ b/src/font/mod.rs @@ -44,6 +44,18 @@ impl<'a> Font<'a> { }) } + pub fn name(&self) -> &str { + if let Some((name, _)) = self.info.families.first() { + name + } else { + &self.info.post_script_name + } + } + + pub fn contains_family(&self, family: &str) -> bool { + self.info.families.iter().any(|(name, _)| name == family) + } + #[cfg(feature = "swash")] pub fn as_swash(&self) -> swash::FontRef { swash::FontRef { diff --git a/src/font/system/redox.rs b/src/font/system/redox.rs index 3ba463d..5977ac5 100644 --- a/src/font/system/redox.rs +++ b/src/font/system/redox.rs @@ -44,8 +44,7 @@ impl FontSystem { let now = std::time::Instant::now(); //TODO only do this on demand! - for i in 0..db.faces().len() { - let id = db.faces()[i].id; + for id in db.faces().map(|face| face.id).collect::>() { unsafe { db.make_shared_face_data(id); } diff --git a/src/font/system/std.rs b/src/font/system/std.rs index 53fb10d..9ff1033 100644 --- a/src/font/system/std.rs +++ b/src/font/system/std.rs @@ -75,8 +75,7 @@ impl FontSystem { let now = std::time::Instant::now(); //TODO only do this on demand! - for i in 0..db.faces().len() { - let id = db.faces()[i].id; + for id in db.faces().map(|face| face.id).collect::>() { unsafe { db.make_shared_face_data(id); } diff --git a/src/shape.rs b/src/shape.rs index 4136d97..5904483 100644 --- a/src/shape.rs +++ b/src/shape.rs @@ -149,7 +149,7 @@ fn shape_run( None => break, }; - log::trace!("Evaluating fallback with font '{}'", font.info.family); + log::trace!("Evaluating fallback with font '{}'", font.name()); let (mut fb_glyphs, fb_missing) = shape_fallback(font, line, attrs_list, start_run, end_run, span_rtl);