(
source: &font_kit::source::SystemSource,
name: &str,
)
| 20 | } |
| 21 | |
| 22 | pub fn load_font_family( |
| 23 | source: &font_kit::source::SystemSource, |
| 24 | name: &str, |
| 25 | ) -> Option<LoadedFontFamily> { |
| 26 | let family_handle = source.select_family_by_name(name).ok()?; |
| 27 | if family_handle.fonts().is_empty() { |
| 28 | log::warn!("No fonts found for family '{name}'"); |
| 29 | return None; |
| 30 | } |
| 31 | let handles = family_handle.fonts().to_vec(); |
| 32 | let mut loaded = Vec::with_capacity(handles.len()); |
| 33 | for handle in handles.iter() { |
| 34 | match font_kit::loaders::default::Font::from_handle(handle) { |
| 35 | Ok(font) => loaded.push(font), |
| 36 | Err(err) => { |
| 37 | log::warn!("Failed to load font '{name}': {err}"); |
| 38 | return None; |
| 39 | } |
| 40 | } |
| 41 | } |
| 42 | let properties = loaded.iter().map(|f| f.properties()).collect::<Vec<_>>(); |
| 43 | let default_index = |
| 44 | find_best_match(&properties, &font_kit::properties::Properties::new()).unwrap_or(0); |
| 45 | let font_family_name = |
| 46 | loaded.first().map(|f| f.family_name()).unwrap_or_else(|| name.to_string()); |
| 47 | Some(LoadedFontFamily { |
| 48 | family_name: font_family_name, |
| 49 | fonts: loaded, |
| 50 | handles, |
| 51 | // properties, |
| 52 | default_index, |
| 53 | }) |
| 54 | } |
| 55 | |
| 56 | pub fn load_font(handle: &font_kit::handle::Handle) -> Result<LoadedFont> { |
| 57 | // let loaded = font_kit::loaders::default::Font::from_handle(handle)?; |
no test coverage detected