Update fontdb dependency to version 0.13

This commit is contained in:
Edgar Geier 2023-03-01 11:50:10 +01:00
parent 750d988429
commit f8bc71af0a
No known key found for this signature in database
GPG key ID: 7A65B51FD6B75EF5
6 changed files with 24 additions and 11 deletions

View file

@ -9,7 +9,7 @@ documentation = "https://docs.rs/cosmic-text/latest/cosmic_text/"
repository = "https://github.com/pop-os/cosmic-text" repository = "https://github.com/pop-os/cosmic-text"
[dependencies] [dependencies]
fontdb = { version = "0.10.0", default-features = false } fontdb = { version = "0.13.0", default-features = false }
libm = "0.2.6" libm = "0.2.6"
log = "0.4.17" log = "0.4.17"
rustybuzz = { version = "0.6.0", default-features = false, features = ["libm"] } rustybuzz = { version = "0.6.0", default-features = false, features = ["libm"] }

View file

@ -74,7 +74,7 @@ impl<'a> FontFallbackIter<'a> {
"Failed to find preset fallback for {:?} locale '{}', used '{}': '{}'", "Failed to find preset fallback for {:?} locale '{}', used '{}': '{}'",
self.scripts, self.scripts,
self.locale, self.locale,
font.info.family, font.name(),
word word
); );
} else if !self.scripts.is_empty() && self.common_i > 0 { } else if !self.scripts.is_empty() && self.common_i > 0 {
@ -99,7 +99,7 @@ impl<'a> Iterator for FontFallbackIter<'a> {
for font_key in self.font_keys.iter().copied() { for font_key in self.font_keys.iter().copied() {
let font = Font::from_key(self.db, font_key).expect("invalid font key"); let font = Font::from_key(self.db, font_key).expect("invalid font key");
if font.info.family == default_family { if font.contains_family(default_family) {
return Some(font); return Some(font);
} }
} }
@ -114,7 +114,7 @@ impl<'a> Iterator for FontFallbackIter<'a> {
self.script_i.1 += 1; self.script_i.1 += 1;
for font_key in self.font_keys.iter().copied() { for font_key in self.font_keys.iter().copied() {
let font = Font::from_key(self.db, font_key).expect("invalid font key"); let font = Font::from_key(self.db, font_key).expect("invalid font key");
if font.info.family == script_family { if font.contains_family(script_family) {
return Some(font); return Some(font);
} }
} }
@ -136,7 +136,7 @@ impl<'a> Iterator for FontFallbackIter<'a> {
self.common_i += 1; self.common_i += 1;
for font_key in self.font_keys.iter().copied() { for font_key in self.font_keys.iter().copied() {
let font = Font::from_key(self.db, font_key).expect("invalid font key"); let font = Font::from_key(self.db, font_key).expect("invalid font key");
if font.info.family == common_family { if font.contains_family(common_family) {
return Some(font); return Some(font);
} }
} }
@ -150,7 +150,10 @@ impl<'a> Iterator for FontFallbackIter<'a> {
let font_key = self.font_keys[self.other_i]; let font_key = self.font_keys[self.other_i];
let font = Font::from_key(self.db, font_key).expect("invalid font key"); let font = Font::from_key(self.db, font_key).expect("invalid font key");
self.other_i += 1; 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); return Some(font);
} }
} }

View file

@ -80,6 +80,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")] #[cfg(feature = "swash")]
pub fn as_swash(&self) -> swash::FontRef { pub fn as_swash(&self) -> swash::FontRef {
swash::FontRef { swash::FontRef {

View file

@ -44,8 +44,7 @@ impl FontSystem {
let now = std::time::Instant::now(); let now = std::time::Instant::now();
//TODO only do this on demand! //TODO only do this on demand!
for i in 0..db.faces().len() { for id in db.faces().map(|face| face.id).collect::<Vec<_>>() {
let id = db.faces()[i].id;
unsafe { unsafe {
db.make_shared_face_data(id); db.make_shared_face_data(id);
} }

View file

@ -71,8 +71,7 @@ impl FontSystem {
let now = std::time::Instant::now(); let now = std::time::Instant::now();
//TODO only do this on demand! //TODO only do this on demand!
for i in 0..db.faces().len() { for id in db.faces().map(|face| face.id).collect::<Vec<_>>() {
let id = db.faces()[i].id;
unsafe { unsafe {
db.make_shared_face_data(id); db.make_shared_face_data(id);
} }

View file

@ -150,7 +150,7 @@ fn shape_run(
None => break, 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) = let (mut fb_glyphs, fb_missing) =
shape_fallback(&font, line, attrs_list, start_run, end_run, span_rtl); shape_fallback(&font, line, attrs_list, start_run, end_run, span_rtl);