diff options
Diffstat (limited to 'wgpu/src/text')
| -rw-r--r-- | wgpu/src/text/font.rs | 36 | 
1 files changed, 36 insertions, 0 deletions
| diff --git a/wgpu/src/text/font.rs b/wgpu/src/text/font.rs new file mode 100644 index 00000000..31df5bf4 --- /dev/null +++ b/wgpu/src/text/font.rs @@ -0,0 +1,36 @@ +pub use font_kit::error::SelectionError as LoadError; +pub use font_kit::family_name::FamilyName as Family; + +pub struct Source { +    raw: font_kit::source::SystemSource, +} + +impl Source { +    pub fn new() -> Self { +        Source { +            raw: font_kit::source::SystemSource::new(), +        } +    } + +    pub fn load(&self, families: &[Family]) -> Result<Vec<u8>, LoadError> { +        let font = self.raw.select_best_match( +            families, +            &font_kit::properties::Properties::default(), +        )?; + +        match font { +            font_kit::handle::Handle::Path { path, .. } => { +                use std::io::Read; + +                let mut buf = Vec::new(); +                let mut reader = std::fs::File::open(path).expect("Read font"); +                let _ = reader.read_to_end(&mut buf); + +                Ok(buf) +            } +            font_kit::handle::Handle::Memory { bytes, .. } => { +                Ok(bytes.as_ref().clone()) +            } +        } +    } +} | 
