(
ctx: &egui::Context,
source: &font_kit::source::SystemSource,
font_id: &egui::FontId,
base_family: egui::FontFamily,
fonts: &mut egui::FontDefinitions,
)
| 75 | } |
| 76 | |
| 77 | pub fn load_font_if_needed( |
| 78 | ctx: &egui::Context, |
| 79 | source: &font_kit::source::SystemSource, |
| 80 | font_id: &egui::FontId, |
| 81 | base_family: egui::FontFamily, |
| 82 | fonts: &mut egui::FontDefinitions, |
| 83 | ) -> Result<()> { |
| 84 | if fonts.families.contains_key(&font_id.family) { |
| 85 | return Ok(()); |
| 86 | } |
| 87 | let family_name = match &font_id.family { |
| 88 | egui::FontFamily::Proportional | egui::FontFamily::Monospace => return Ok(()), |
| 89 | egui::FontFamily::Name(v) => v, |
| 90 | }; |
| 91 | let family = load_font_family(source, family_name) |
| 92 | .with_context(|| format!("Failed to load font family '{family_name}'"))?; |
| 93 | let default_fonts = fonts.families.get(&base_family).cloned().unwrap_or_default(); |
| 94 | // FIXME clean up |
| 95 | let default_font_ref = family.fonts.get(family.default_index).unwrap(); |
| 96 | let default_font = family.handles.get(family.default_index).unwrap(); |
| 97 | let default_font_data = load_font(default_font)?; |
| 98 | log::info!("Loaded font family '{}'", family.family_name); |
| 99 | fonts.font_data.insert(default_font_ref.full_name(), Arc::new(default_font_data.font_data)); |
| 100 | fonts |
| 101 | .families |
| 102 | .entry(egui::FontFamily::Name(Arc::from(family.family_name))) |
| 103 | .or_insert_with(|| default_fonts) |
| 104 | .insert(0, default_font_ref.full_name()); |
| 105 | ctx.set_fonts(fonts.clone()); |
| 106 | Ok(()) |
| 107 | } |
no test coverage detected