diff --git a/src/image/mod.rs b/src/image/mod.rs index 0fa0d44..98a979a 100644 --- a/src/image/mod.rs +++ b/src/image/mod.rs @@ -5,7 +5,7 @@ mod tests; use std::borrow::Cow; use std::path::PathBuf; use std::str::FromStr; -use std::sync::{Arc, Mutex}; +use std::sync::{Arc, Mutex, OnceLock}; use std::time::Instant; use std::{ fs, @@ -21,6 +21,7 @@ use crate::utils::{usize_in_mib, Align, Point, Size}; use anyhow::Context; use bytemuck::{Pod, Zeroable}; use image::{ImageBuffer, RgbaImage}; +use usvg::fontdb; use resvg::{tiny_skia, usvg}; use smart_debug::SmartDebug; use wgpu::util::DeviceExt; @@ -264,8 +265,12 @@ impl Image { ) .unwrap(), ); - let mut fontdb = usvg::fontdb::Database::new(); - fontdb.load_system_fonts(); + static FONTDB: OnceLock = OnceLock::new(); + let fontdb = FONTDB.get_or_init(|| { + let mut db = fontdb::Database::new(); + db.load_system_fonts(); + db + }); tree.postprocess(Default::default(), &fontdb); let mut pixmap = tiny_skia::Pixmap::new(tree.size.width() as u32, tree.size.height() as u32)